Один и тот же сеанс с несколькими действиями SendActivity в WF

StackOverflow https://stackoverflow.com/questions/424806

Вопрос

Наш рабочий процесс в 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-адресу:

  

http: // localhost / myservice / basic

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top