5

WCF アプリケーションに Apache.NMS.WCF バインディングを使用しようとすると、次のエラーが発生します -

コントラクトには TwoWay (要求と応答または二重のいずれか) が必要ですが、バインディング 'NmsBinding' はそれをサポートしていないか、サポートするように適切に構成されていません。

私の system.service モデルは次のようになります -

    <bindings>
        <nmsBinding>
            <binding 
                name="myNMSBinding" 
                destination="test.queue" 
                destinationType="TemporaryQueue"
                >
            </binding>
        </nmsBinding>
    </bindings>

    <extensions>
        <!--<bindingElementExtensions>
            <add name="nmsTransPort" 
                 type="Apache.NMS.WCF.NmsTransportElement, Apache.NMS.WCF, Version=1.1.0.1642, Culture=neutral, PublicKeyToken=82756feee3957618" />
        </bindingElementExtensions>-->
        <bindingExtensions>
            <add name="nmsBinding" 
                 type="Apache.NMS.WCF.NmsBindingCollection, Apache.NMS.WCF, Version=1.1.0.1642, Culture=neutral, PublicKeyToken=82756feee3957618" 

                 />
        </bindingExtensions>
    </extensions>

    <services>
        <service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
            <!-- Service Endpoints -->
            <endpoint 
                address="tcp://localhost:61616" 
                binding="nmsBinding" 
                bindingConfiguration="myNMSBinding" 
                contract="WcfService1.IService1"
                />
        </service>
    </services>

Apache NMS をデュプレックスに設定する方法はありますか、それともサポートしていないだけですか?

4

1 に答える 1

6

ActiveMQ のようなメッセージ キューは、通常、設計上、一方向のみです。メッセージをそこにドロップできます。それだけです。

応答が必要な場合の実際の解決策は、役割を逆にすることです。メイン コントラクト (一方向) でメッセージを送信したサービスは、アプリが応答する 2 番目のキューで応答を返すクライアントになります。サーバーとしてリッスンしています。

トピックに関する MSDN ドキュメントやその他のリソースを参照してください。

サンプルでは通常、MSMQ が WCF でネイティブにサポートされているため、MSMQ を使用しますが、タスクを 2 つの個別の一方向コントラクトに分割する基本原則と、2 つの個別の要求キューと応答キューをセットアップして使用する方法は、ActiveMQ にも同様に適用する必要があります。

于 2010-01-13T21:37:11.073 に答える