2017-08-20 6 views
0

WCFサービスを使用するMVC ASP.NETのWebサイトを開発しています。WCFクライアントを静的にする、または処理方法を使用する

の1-

private static ServiceClient _client = new ServiceClient(); 

2 - 使用するクライアントオブジェクトが静的ください:私は、だから私は、私はそれを定義する必要があり、約2オプションが思うこと

Public class Home : Controller 
{ 
    private ServiceClient _client = new ServiceClient(); 

    public ActionResult Index() 
    { 
     //code here 
    } 
} 

のようなコントローラでWCFクライアントを使用していますIDisposable.Dispose

Public class Home : Controller, IDisposable 
{ 
    private ServiceClient _client = new ServiceClient(); 

    protected override void Dispose(bool disposing) 
    { 
     _client.Dispose(); 
     base.Dispose(disposing); 
    } 
} 

パフォーマンスのための最良のオプションは何ですか?

答えて

0

両方のオプションは、パフォーマンスの観点からは関係ありません。 WCFチャネルファクトリを作成するだけでは、パフォーマンスが高価になります。しかし、ServiceClientClientBaseから継承されています。これはチャネルファクトリキャッシングを行います。クライアントを作成するのは安価で、実際には正しいアプローチです。クライアントを作成して使用し、すぐに破棄します。

したがって、WCFクライアントの欠陥ではない場合、第2のオプションは正しいでしょう。この欠陥により、クライアントのDisposeメソッドを使用してチャネルのフォルト状態を正しく処理することができなくなります。この問題は確かにSOのどこかでカバーされています。しかし、要するに、私は通常、WCFクライアントを作成して処分する方法です:

var client = new ServiceClient(); 
var success = false; 
try 
{ 
    // call client's methods 
    client.Close(); 
    success = true; 
} 
finally 
{ 
    if (!success) 
    { 
     client.Abort(); 
    } 
} 
関連する問題