powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WWF + WCF проблема с корреляцией Receive
2 сообщений из 2, страница 1 из 1
WWF + WCF проблема с корреляцией Receive
    #38668858
Badabum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть сервис WCF, config:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.5.1" >
    </compilation>
    <httpRuntime targetFramework="4.5.1"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <sqlWorkflowInstanceStore connectionString= "Data Source=SERVER;Initial Catalog=WorkFlow;Persist Security Info=True;User ID=test;Password=******"/>
          <workflowIdle timeToUnload="0"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
        <add binding="basicHttpBinding" scheme="http"/>
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <defaultDocument>
      <files>
        <add value="TestWWF.xamlx" />
      </files>
    </defaultDocument>
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>


Далее скрин главного Activity

Первый входящий блок "CreateNewObject"

получает данные через Receive, потом из входных данных создается объект
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
[DataContract]
    public class AAA
    {
        public AAA()
        {
            Id = 1;
            Value = 1;
            Name = "Created";
        }

        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public int Value { get; set; }
        [DataMember]
        public String Name { get; set; }

        public override string ToString()
        {
            return String.Format("Id = {0}, Value = {1}, Name = {2}", Id,Value, Name);
        }

    }


Далее пытался опять получить данные, т.е. Activity должен был остановиться и ждать команды из-вне, он останавливается, в базу сохраняется, далее задержка примерно в 3-4 сек (чтоб толкнуть тестовое консольное приложение) вываливается ошибка, ошибки разные при разных настройках кореляции, приведу ниже.
Скрин активити который должен возобновить действие:

Скрин настроек кореляции:


Передается в Receive объект (ААА), по нему и пытался делать корреляцию (если я вообще правильно понимаю как ее делать)
параметры полей одинаковы, что у того что переадаваля в "Receive", что у того что создавался на шаг выше, пробовал у класса ААА перегрузить хешкод, чтоб всегда было одно значение

Код клиента, возобновляющего процесс:
Код: c#
1.
2.
3.
4.
5.
6.
7.
static void Main()
        {
            AAAA.ServiceClient client = new AAAA.ServiceClient();
            client.OperationContinueWork(new NewTypeService.AAA() { Id = 1, Name = "sdf", Value = 10 });
            Console.WriteLine("Continue: ");
            Console.ReadKey();
        }


И текст ошибки при выборе CorrelationInitializers = QueryCorrelationInitializer
Если не указан LoadWorkflowByInstanceKeyCommand.AssociateLookupKeyToInstanceId, то необходимо заранее связать LookupInstanceKey с экземпляром. В противном случае команда LoadWorkflowByInstanceKeyCommand завершится ошибкой. Поэтому нельзя указывать LookupInstanceKey в коллекции InstanceKeysToAssociate, если не задан AssociateLookupKeyToInstanceId.

при выборе CorrelationInitializers = (RequestReplyCorrelationInitializer, ContextCorrelationInitializer, CallbackCorrelationInitializer)
Выполнение InstancePersistenceCommand прервано, поскольку ключ экземпляра "4ee03fe1-2b80-89e8-1374-54f043553cb9" не связан с экземпляром. Возможно, экземпляр или ключ были очищены либо ключ является недопустимым. Ключ может быть недопустимым, если сообщение, из которого он создан, отправлено в неверное время или содержит неверные данные корреляции.


Вопрос - как правильно настроить корреляцию, или чего еще - чтобы можно было продолжить выполнение Activity?
...
Рейтинг: 0 / 0
WWF + WCF проблема с корреляцией Receive
    #38669146
Badabum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В первом приближении поборол, сильно помогла статейка:
http://xhinker.com/post/WF4Correlate-Multiple-Receive-Activities.aspx
По крайней мере состояние начало сохраняться и подыматься при использовании утилиты WcfTestClient.exe
....
Заработало:
Если делал сервис референс с консольного приложения, но не работало до тех пор пока в настройках ИИС-а не убрал галку "Включить сжатие статического содержимого"
Тут еще можно порыться, но уже на верном пути, еще подскажите - в каком случае необходимо настраивать CorrelationInitializers?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WWF + WCF проблема с корреляцией Receive
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]