1

Workflow Foundationのワークフローは、 InvokeWebServiceアクティビティを使用して ASMX Web サービスを呼び出していました。このアクティビティには、同じセッション内の複数のアクティビティを関連付けるプロパティSessionIdがあります (リクエストごとに ASP.NET セッション Cookie を送信することにより)。出来た。

ここで、WCF Web サービス インターフェイスに切り替え、代わりにSendActivityアクティビティを使用するようにワークフローを変更しました。しかし、Web サービスの呼び出しを相互に関連付ける、つまりすべてのリクエストでセッション Cookie を送信するという解決策は見つかりませんでした。

WF でこれを実現することは可能ですか、それともカスタム ソリューションが必要ですか?

4

1 に答える 1

0

WF / WCF統合アクティビティ(SendActivityおよびReceiveActivity )のいずれかでCookieを処理するための組み込み機能を認識していません。WCFはトランスポートに依存しないため、これは理にかなっています。したがって、高レベルでは、ASMX Webサービスの場合のように、APIをHTTP固有の機能に結合することはできません。

この場合の解決策は、ASMX Webサービスでサポートされているプロトコルと互換性のあるbasicHttpBindingを使用するエンドポイントを介してWCFサービスを公開し、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

于 2009-01-09T13:17:32.957 に答える