Один и тот же сеанс с несколькими действиями SendActivity в WF - PullRequest
1 голос
/ 08 января 2009

Наш рабочий процесс в Workflow Foundation используется для вызова веб-служб ASMX с использованием действия InvokeWebService , которое имеет свойство SessionId для корреляции нескольких действий в одном сеансе. (отправляя файл cookie сеанса ASP.NET на каждый запрос ). Это сработало.

Теперь мы переключились на интерфейс веб-службы WCF , и мы изменили наши рабочие процессы, чтобы вместо этого использовать действие SendActivity . Однако мы не нашли никакого решения для сопоставления вызовов веб-службы, то есть для отправки куки-файла сеанса при каждом запросе.

Можно ли добиться этого в WF или нам нужно нестандартное решение?

1 Ответ

0 голосов
/ 09 января 2009

Мне не известны какие-либо встроенные средства для обработки файлов 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

...