调用 WCF 服务的最佳实践 [重复]

Posted

技术标签:

【中文标题】调用 WCF 服务的最佳实践 [重复]【英文标题】:Best practice to call WCF Service [duplicate] 【发布时间】:2014-03-20 00:01:51 【问题描述】:

我一直都知道从不像这样调用WCF服务时使用using语句

using (Service.YourClientProxy client = new Service.YourClientProxy())

    var time = client.Time();

所以我一直用这个来调用Service

YourClientProxy clientProxy = new YourClientProxy();

try

   .. use your service
   clientProxy.Close();

catch(FaultException)

   clientProxy.Abort();

catch(CommunicationException)

   clientProxy.Abort();

catch (TimeoutException)
 
   clientProxy.Abort();

我一直在阅读 och *** 并且我已经阅读了这篇文章 here Service.cs 类取自***

我想知道下面这是否是调用 WCF 服务的好习惯,这真的会关闭服务吗?

public static class Service<TChannel>

    public static ChannelFactory<TChannel> ChannelFactory = new ChannelFactory<TChannel>("*");

    public static TReturn Use<TReturn>(Func<TChannel, TReturn> codeBlock)
    
        var proxy = (IClientChannel)ChannelFactory.CreateChannel();
        var success = false;
        try
        
            var result = codeBlock((TChannel)proxy);
            proxy.Close();
            success = true;
            return result;
        
        finally
        
            if (!success)
            
                proxy.Abort();
            
        
    

像这样从客户端调用服务。

        var time = Service<Service.YourServiceChannel>.Use(resultAsync =>
        
            return resultAsync.TimeAsync();
        );

【问题讨论】:

我做了一个参考并阅读了那篇文章,我不清楚什么是最佳实践。我还问我所指的代码示例是否真的关闭了连接。 【参考方案1】:

来自这篇文章:

http://msdn.microsoft.com/en-us/library/aa355056(v=vs.110).aspx

似乎最好的做法是通过在 try 块中调用 Close 来调用 Dispose:

try

    client.Close();

catch (CommunicationException e)

    client.Abort();

catch (TimeoutException e)

    client.Abort();

catch (Exception e)

    client.Abort();
    throw;

您还可以在每个 catch 块中添加日志记录或其他任何内容。

【讨论】:

-1:你的Dispose呢?这个问题是重复的。 这里调用 Close() 和调用 Dispose() 不是一回事吗? 差不多,在这种情况下,您的答案应该是“Close”而不是“Dispose”。

以上是关于调用 WCF 服务的最佳实践 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

WCF 双工客户端的最佳实践

大型 WCF 服务的最佳实践?

WCF 服务代理生命周期的最佳实践?

使用 WCF 对服务进行版本控制的最佳实践?

设计 SOA WCF Web 服务时的最佳实践是啥?

“重载”方法的 WCF 最佳实践