6

他の SOAP エンドポイントへのサービス参照を持つ WCF サービスがあります。このエンドポイントには、別のアドレスに同一のコピーがあり、メタデータは同じですが、データは異なります。リクエストがサービスに届くと、2 つの同一のエンドポイントのどちらからデータを取得するかが指定されます。だから、私はこのようなものを持っています:

 using (var client = new ServiceClient())
 {         
     client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);                

     //do some work, pull some data, bake some muffins

 }

これは、異なる URL を使用して 2 つのリクエストが非常に接近している場合に機能しないことがあります。2 番目の要求は、最初の要求と同じエンドポイントに送信されます。チャネルが開いたらエンドポイントを変更できないことは理解していますが、クライアントは一度だけ使用されてから破棄されると思いました。同じプロキシが複数のリクエストに再利用されている場合、何らかの最適化が行われていますか? このような問題への良いアプローチは何ですか?

編集:詳細:

このスニペットは、RESTful サービスのコンシューマーに公開されるメソッド (foo() と呼びましょう) の一部です。静的ではありません。エンドポイント URL は、URI の一部として提供されるローカル文字列です。

[OperationContract]
[WebInvoke(Method = "GET",
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "getStuff?url={url}")]
 string foo(string url);

public string foo(string url)
{
     using (var client = new ServiceClient())
     {         
         client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);                

         //do some work, pull some data, bake some muffins
         return "SO rocks!";
     }
}

同時実行制御を明示的に設定していません。私はその背後にある理論を理解していますが、技術的な経験が不足しているため、手を握っていただければ幸いです。

また!プロキシ コンストラクターでエンドポイント アドレスを指定するのではなく、エンドポイント アドレスを変更する正当な理由がありました。ただし、テスト目的で、コンストラクターで指定してみましたが、完全に機能しているようです (JMeter に感謝します!)。ちょっとした作業で、実際のコードを再構築してそのように動作させることができましたが、それでも説明をいただければ幸いです。学習は重要です。

4

1 に答える 1