2

次のシナリオを検討してください。

WCF サービスをホストする Windows サービスがあります。

WCF サービスは、クライアントと、物理的に異なるマシンにある AppFabric サーバーとの間のインターフェイスを提供します。オブジェクトを取得し、計算を行い、最適なものを返します。

20 ~ 30 のクライアントが同時にサービスに接続できますが、それほど多くはありません。

サービスでクエリが実行されるたびにインスタンスを作成するか、クライアント オブジェクトをメンバーとして関数を呼び出します。インスタンスを作成すると、嫌いな try finally ブロックですべてが散らかりますが、クライアント接続はどうですか?欠点は何ですか? ホストを再起動しても、クライアントは引き続き機能しますか? これを行うための通常の/推奨される方法は何ですか?

try
{
  PreOrderService.PreorderServiceClient proxy = new   PreOrderService.PreorderServiceClient("netTcpPreorderService");

  List<PreOrder> preOrders = proxy.FindWallet(preOrder.WalletId);
}
finally
{
  if (proxy.State != CommunicationState.Faulted)
    proxy.Close();
}
4

1 に答える 1

0

私は次のことを好む:

proxy = newServiceReference1.ServiceDataContractTestClient(); 
try
{ 
    proxy.MetodThrowsException();
    proxy.Close(); 
} 
catch
{ 
    proxy.Abort(); 
    throw; // Or handle exception
}

これは、サーバー接続が失われたかどうかを気にせず、proxy.MetodThrowsException() がサーバーを中断したときに CommunicationObjectFaultedException をスローしません。

可読性が低下する場合は、別の方法でラップします。

于 2013-10-17T14:49:14.433 に答える