WCF / WF - почему я не могу опубликовать обновленный код и возобновить / отладить приостановленный рабочий процесс на нем

У меня есть рабочий процесс WCF с использованием AppFabric / Persistence и .net 4.0, который, как я знаю, будет иметь несколько ошибок в действиях кода из-за того, что он разговаривает с внешней мыльной службой, которая иногда выдает SoapExceptions в качестве возвращаемых значений, когда операция не может будет завершена. Это неизбежно, и существует огромное количество исключений, чтобы обработать их все с самого начала.

Во время разработки, когда возникают эти ошибки, мой рабочий процесс приостанавливается, и я могу довольно легко отследить ошибку и закодировать обработчик для недавно обнаруженного исключения мыла. Проблема в том, что после того, как я внесу изменения в активность кода и опубликую новую dll, «возобновление» приостановленного рабочего процесса не использует эти изменения, и я не могу нарушить код при возобновлении.

Рабочие процессы пытаются запустить их 5 раз, затем повторно выдают ту же ошибку, даже если это было что-то вроде исключения нового исключения («ИСКЛЮЧЕНИЕ ТЕСТА»), а затем я удалил его из кода.

Я НЕ меняю определение рабочего процесса, а просто вносю небольшие изменения в codeactivities.

Клянусь, я мог бы сделать это в VS2010, но прошло много времени с тех пор, как я перешел на vs2012. К вашему сведению, я могу отлаживать новые рабочие процессы, которые не были приостановлены. Я могу пройтись по коду. Просто не могу отлаживать при возобновлении.


person CarComp    schedule 06.02.2013    source источник


Ответы (2)


Я сомневаюсь, что у вас это получилось - я помню это из своего опыта работы с VS2008.

Я не помню точно, почему это происходит, но думаю, что нет. Что мы делали в продакшене, когда мы публиковали новый код, а рабочие процессы еще не завершены (и сохраняются) - мы добавили привязку сборки в config, которая была указана на новый код. Также присутствовал старый код.

Что-то вроде this:

   <configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="myAssembly"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0"
                             newVersion="2.0.0.0"/>
            <codeBase version="2.0.0.0"
                      href="http://www.litwareinc.com/myAssembly.dll"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

Это также может быть полезно.

person evgenyl    schedule 28.03.2013

Я могу возобновить и отладить, обновив схему с помощью C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ SQL \ en \ SqlWorkflowInstanceStoreSchemaUpgrade.sql и изменив его на .net 4.5

Возможно, это не самое элегантное решение, но оно работает.

Я также хотел бы заявить, что лично я ненавижу подобные решения, особенно после их поиска. Если вы пришли сюда и не можете развернуть 4.5, прошу прощения.

person CarComp    schedule 23.04.2013