0

私は私が正しいか間違っているかを確認する方法がわからないので、あなたの助けは素晴らしいでしょう。

A.私の理解では、IsOneWay =true=クライアントはメソッドが終了するのを待ちたくありません。したがって、サービスは必要なときにこのメソッドを実行します。しかし、場合によっては、サービスはマルチスレッドを使用してメソッドを実行しますか?

B. ConcurrencyMode.Multipleを使用する場合、IsOneWay=trueとIsOneWay=falseを使用する場合の違いは何ですか。

4

2 に答える 2

3

ConcurrencyMode と Messaging Pattern は、それほど直接的な関係はありません。

IsOneWayは、クライアントとサーバーの相互作用に影響を与えます。

ConcurrencyModeはサーバー側の問題であり、クライアントはこの設定を認識しません。

于 2012-04-27T13:50:13.163 に答える
1

から: http://msdn.microsoft.com/en-us/library/ms751496.aspx

HTTP は、定義上、要求/応答プロトコルです。要求が行われると、応答が返されます。これは、HTTP 経由で公開される一方向のサービス操作にも当てはまります。操作が呼び出されると、サービス操作が実行される前に、サービスは HTTP ステータス コード 202 を返します。このステータス コードは、要求が処理のために受け入れられたが、処理がまだ完了していないことを意味します。操作を呼び出したクライアントは、サービスから 202 応答を受信するまでブロックされます。これにより、セッションを使用するように構成されたバインディングを使用して複数の一方向メッセージが送信されると、予期しない動作が発生する可能性があります。このサンプルで使用されている wsHttpBinding バインディングは、既定でセッションを使用してセキュリティ コンテキストを確立するように構成されています。デフォルトでは、セッション内のメッセージは、送信された順序で到着することが保証されています。このため、セッションの 2 番目のメッセージが送信されると、最初のメッセージが処理されるまで処理されません。この結果、前のメッセージの処理が完了するまで、クライアントはメッセージに対する 202 応答を受信しません。したがって、クライアントは後続の操作呼び出しごとにブロックされているように見えます。この動作を回避するために、このサンプルでは、​​メッセージを個別のインスタンスに同時にディスパッチして処理するようにランタイムを構成します。このサンプルでは、​​InstanceContextMode を PerCall に設定して、各メッセージを異なるインスタンスで処理できるようにします。ConcurrencyMode は Multiple に設定され、一度に複数のスレッドがメッセージをディスパッチできるようにします。セッションの 2 番目のメッセージが送信されると、最初のメッセージが処理されるまで処理されません。この結果、前のメッセージの処理が完了するまで、クライアントはメッセージに対する 202 応答を受信しません。したがって、クライアントは後続の操作呼び出しごとにブロックされているように見えます。この動作を回避するために、このサンプルでは、​​メッセージを個別のインスタンスに同時にディスパッチして処理するようにランタイムを構成します。このサンプルでは、​​InstanceContextMode を PerCall に設定して、各メッセージを異なるインスタンスで処理できるようにします。ConcurrencyMode は Multiple に設定され、一度に複数のスレッドがメッセージをディスパッチできるようにします。セッションの 2 番目のメッセージが送信されると、最初のメッセージが処理されるまで処理されません。この結果、前のメッセージの処理が完了するまで、クライアントはメッセージに対する 202 応答を受信しません。したがって、クライアントは後続の操作呼び出しごとにブロックされているように見えます。この動作を回避するために、このサンプルでは、​​メッセージを個別のインスタンスに同時にディスパッチして処理するようにランタイムを構成します。このサンプルでは、​​InstanceContextMode を PerCall に設定して、各メッセージを異なるインスタンスで処理できるようにします。ConcurrencyMode は Multiple に設定され、一度に複数のスレッドがメッセージをディスパッチできるようにします。この結果、前のメッセージの処理が完了するまで、クライアントはメッセージに対する 202 応答を受信しません。したがって、クライアントは後続の操作呼び出しごとにブロックされているように見えます。この動作を回避するために、このサンプルでは、​​メッセージを個別のインスタンスに同時にディスパッチして処理するようにランタイムを構成します。このサンプルでは、​​InstanceContextMode を PerCall に設定して、各メッセージを異なるインスタンスで処理できるようにします。ConcurrencyMode は Multiple に設定され、一度に複数のスレッドがメッセージをディスパッチできるようにします。この結果、前のメッセージの処理が完了するまで、クライアントはメッセージに対する 202 応答を受信しません。したがって、クライアントは後続の操作呼び出しごとにブロックされているように見えます。この動作を回避するために、このサンプルでは、​​メッセージを個別のインスタンスに同時にディスパッチして処理するようにランタイムを構成します。このサンプルでは、​​InstanceContextMode を PerCall に設定して、各メッセージを異なるインスタンスで処理できるようにします。ConcurrencyMode は Multiple に設定され、一度に複数のスレッドがメッセージをディスパッチできるようにします。このサンプルでは、​​メッセージを個別のインスタンスに同時にディスパッチして処理するようにランタイムを構成します。このサンプルでは、​​InstanceContextMode を PerCall に設定して、各メッセージを異なるインスタンスで処理できるようにします。ConcurrencyMode は Multiple に設定され、一度に複数のスレッドがメッセージをディスパッチできるようにします。このサンプルでは、​​メッセージを個別のインスタンスに同時にディスパッチして処理するようにランタイムを構成します。このサンプルでは、​​InstanceContextMode を PerCall に設定して、各メッセージを異なるインスタンスで処理できるようにします。ConcurrencyMode は Multiple に設定され、一度に複数のスレッドがメッセージをディスパッチできるようにします。

于 2012-04-27T15:31:42.880 に答える