2

私は WCF - WSIT (Metro) 統合プロジェクトに取り組んでおり、Java クライアントが耐久サービスに接続できるようにしたいと考えています。

持続的サービス http://msdn.microsoft.com/en-us/library/bb410767(v=vs.90).aspx

永続的なサービスには wHttpContextBinding が必要ですが、これは正常に機能しているようです。唯一の問題は、WSIT クライアントによって生成されたプロキシが、instanceId を SOAP エンベロープに割り当てることができないように見えることです。私が認識していない構成設定、または送信メッセージを傍受して instanceId を追加する方法はありますか?

次の SOAP の例は、.NET クライアントによって生成されます。エンベロープ WSIT 送信とこれの唯一の違いは、コンテキスト ノードが WSIT 送信にないことです。

      <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:r="http://schemas.xmlsoap.org/ws/2005/02/rm" xmlns:a="http://www.w3.org/2005/08/addressing">
        <s:Header> 
...
          <Context xmlns="http://schemas.microsoft.com/ws/2006/05/context">
            <Property name="instanceId">{I want to set this Id}</Property>
          </Context>
...
        </s:Header>
        <s:Body>
          <IncreaseCounter xmlns="http://tempuri.org/"/>
        </s:Body>
      </s:Envelope>

それが理にかなっていることを願っています。問題は、ws2007HttpBinding または wsHttpBinding 関連、または WCF インスタンス管理関連ではありません。パー/コール、セッション、シングル。WSIT、Java ビットのみについてサポートが必要です。

4

2 に答える 2

3

プロジェクトの Java 側で作業している私の同僚が、構文を理解するのを手伝ってくれました。他の人に役立つ可能性があるため、解決策を共有します。この記事の重要な点は、WSIT のドキュメントが、永続的な WCF サービスを Java クライアントで使用できることを忘れていないことです。長時間実行されるワークフローに参加できる Java クライアント、またはホストされた Windows ワークフロー (WF) のクライアントを作成する必要がある場合、耐久性のある WCF は不可欠です。

次の Java コードは、関連するヘッダーを返します。

private static Header getContextHeader(IDemoService port) {
    Header contextHeader = null;

    Iterator<Header> iterator = ((WSBindingProvider)port).getInboundHeaders().iterator();

    while(iterator. hasNext()){        
        Header header = iterator.next();

        if (header.getLocalPart().equalsIgnoreCase("Context")) {
            contextHeader = header;
        }

    }

    return contextHeader;
}

次に、次のようにコンテキストを設定できます。

Header contextHeader = getContextHeader(port);  
((WSBindingProvider)port).setOutboundHeaders(contextHeader); 
于 2011-04-08T15:48:22.843 に答える
1

wcf サービスのインスタンス管理を指定する必要がある場合があります。3 つのオプションがあります。

  • 通話ごと
  • セッションごと
  • 独身

セッションごとに必要なようです。

http://www.dotnetfunda.com/articles/article912-3-ways-to-do-wcf-instance-management-per-call-per-session-and-single-.aspx

于 2011-03-24T16:45:59.107 に答える