Один и тот же сеанс с несколькими действиями SendActivity в WF
-
05-07-2019 - |
Вопрос
Наш рабочий процесс в Workflow Foundation использовался для вызова веб-служб ASMX с использованием действия InvokeWebService , у которого есть свойство SessionId для корреляции нескольких действий в тот же сеанс (отправляя файл cookie ASP.NET для каждого запроса ). Это сработало.
Теперь мы переключились на интерфейс веб-службы WCF , и мы изменили наши рабочие процессы, чтобы вместо этого использовать действие SendActivity . Однако мы не нашли никакого решения для сопоставления вызовов веб-службы, то есть для отправки куки-файла сеанса при каждом запросе.
Возможно ли добиться этого в WF или нам нужно индивидуальное решение?
Решение
Мне не известны какие-либо встроенные средства для обработки файлов cookie в любых действиях по интеграции WF / WCF ( SendActivity и ReceiveActivity ). ). Это имеет смысл, поскольку WCF не зависит от транспорта, и поэтому на высоком уровне API не могут быть связаны с какими-либо специфичными для HTTP функциями, как в случае веб-служб ASMX .
Решением в вашем случае может быть предоставление служб WCF через конечную точку, использующую basicHttpBinding , которая совместима с протоколом, поддерживаемым веб-службами ASMX, и затем возврат к использованию InvokeWebServiceActivity , чтобы вызвать их.
Кроме того, поскольку служба WCF может быть открыта через любое количество конечных точек , вы можете просто добавить конечную точку, которая использует basicHttpBinding, к уже существующим. Вот пример:
<configuration>
<system.serviceModel>
<services>
<service name="MyNamespace.MyServiceImpl">
<endpoint binding="wsHttpBinding" name="WsHttp"
contract="MyNamespace.IMyService" />
<endpoint address="basic" binding="basicHttpBinding" name="BasicHttp"
contract="MyNamespace.IMyService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/myservice" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
Тогда рабочие процессы, использующие InvokeWebServiceActivity , будут вызывать службу по следующему URL-адресу: