C# WCF客户端,是否保留引用?
考虑以下场景: 有一个承载WCF服务的windows服务 WCF服务在客户端和位于物理上不同的计算机上的AppFabric服务器之间提供接口。它检索对象,对其进行计算并返回最佳值 20-30个客户端可以同时连接到该服务,这并不多 更好的做法是,每次对服务执行查询时都创建一个实例,或者将客户机对象作为成员并调用函数。创建一个实例会把我不喜欢的try-finally块弄得乱七八糟,但是客户端连接又有什么缺点呢?是否可以重新启动主机并使客户端仍然工作?通常/首选的方法是什么C# WCF客户端,是否保留引用?,c#,.net,wcf,C#,.net,Wcf,考虑以下场景: 有一个承载WCF服务的windows服务 WCF服务在客户端和位于物理上不同的计算机上的AppFabric服务器之间提供接口。它检索对象,对其进行计算并返回最佳值 20-30个客户端可以同时连接到该服务,这并不多 更好的做法是,每次对服务执行查询时都创建一个实例,或者将客户机对象作为成员并调用函数。创建一个实例会把我不喜欢的try-finally块弄得乱七八糟,但是客户端连接又有什么缺点呢?是否可以重新启动主机并使客户端仍然工作?通常/首选的方法是什么 try { PreOr
try
{
PreOrderService.PreorderServiceClient proxy = new PreOrderService.PreorderServiceClient("netTcpPreorderService");
List<PreOrder> preOrders = proxy.FindWallet(preOrder.WalletId);
}
finally
{
if (proxy.State != CommunicationState.Faulted)
proxy.Close();
}
试试看
{
PreOrderService.PreOrderService客户端代理=新的PreOrderService.PreOrderService客户端(“netTcpPreorderService”);
List preOrders=proxy.FindWallet(preOrder.WalletId);
}
最后
{
if(proxy.State!=CommunicationState.Faulted)
proxy.Close();
}
我更喜欢做以下事情:
proxy = newServiceReference1.ServiceDataContractTestClient();
try
{
proxy.MetodThrowsException();
proxy.Close();
}
catch
{
proxy.Abort();
throw; // Or handle exception
}
这与服务器连接是否丢失无关,也不会在proxy.MetodThrowsException()中断服务器时引发CommunicationObjectFaultedException
如果你发现它降低了可读性,那么用一个单独的方法将其包装。我有一个答案的可能重复,我将其删除,因为进一步阅读(即来自CodeCaster的可能重复的问题,以及CodeCaster在对我的答案的评论中提出的一些观点)表明我自己的答案是无知的。我想说明的一个重要部分是,即使您确实将代理设置为对象成员(非常确定您仍然可以),您仍然需要try/catch/finally来处理通过代理的每个调用。