私は、SOAP Webサービスの「非同期」モード、「二重」モード、または「コールバック」モードとさまざまに呼ばれるものを使用する必要があるプロジェクトを検討しています。このモードでは、サービスの呼び出し元はSOAPヘッダーで「reply-to」アドレスを提供し、サービスはHTTP応答で呼び出しの出力を返す代わりに、この「reply-to」への個別のHTTP接続を作成します。 "アドレスを指定して、応答メッセージを投稿します。これは通常、次のように、CompositeDuplexBindingを使用してWCFで実現されます。
<binding name="async_http_text">
<compositeDuplex clientBaseAddress="http://192.168.10.123:1234/async" />
<oneWay />
<textMessageEncoding messageVersion="Soap12WSAddressing10" />
<httpTransport useDefaultWebProxy="false" />
</binding>
これにより、呼び出しごとに1つではなく2つのHTTP接続が発生します。1つはクライアントからサービスに、もう1つはサービスからクライアントに戻ります。サービス実装の観点からは、何も変更されません。インターフェイスメソッドを実装するメソッドがあり、要求を受け取って応答を返します。素晴らしい、これは私がほとんど必要としているものです。
私の状況では、リクエストとレスポンスは数分から数日まで何でも分けることができます。要求と応答を分離し、後で応答するのに十分な情報が得られるまで(または、特定の状況では決して応答しないまで)状態(メッセージ、応答URIなど)を「保存」する方法が必要です。
必要なばかげたタイムアウト値(有効なものとして受け入れられている場合でも)とともに、メソッドを一度に最大数日間基本的に「一時停止」することにそれほど興奮していませんが、どうすればよいかわかりません。このようなシステムを組み合わせます。
完全に明確にするために、私は標準化団体によって提供される一連の標準を実装しているので、SOAPメッセージのセマンティクスを変更したりプロトコルの実装を変更したりする柔軟性がありません。この種の相互作用は、ReplyToヘッダーがWS-Addressingに実装されたときに意図されていたものとまったく同じです。
どうしますか?おそらく、Workflow Foundationはこの種のことを可能にしますか?