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 回答