2016-05-05 20 views
1

我有下面的代码调用WCF代理: -WCF服务代理 - 两者关闭()和中止函数获取调用

var client = new ServiceClientProxy(); 

try 
{ 

    var documents = client.GetDocuments(); 
    client.Close(); 

    if(documents.Length > 50) 
    { 
    throw new Exception("Too many Documents"); 
    } 

    else if(documents.Length <10) 
    { 
    throw new Exception("Too many Documents"); 
    } 

    else 
    { 
    return documents; 
    } 

} 

catch(exception ex) 
{ 
    client.Abort(); 
} 

这里如果文件数,我们从服务中获得超过50或少于10,在这种情况下,我们将同时调用Close()以及客户端上的中止函数。这种调用WCF服务代理的预期方式是什么? 任何人都请建议,如果有更好的方法来处理这个问题。

在调用之后立即关闭客户端连接还是更好的方法,还是需要等到我们完全使用响应属性并关闭连接?

+1

本文可能对您有所帮助。 https://relentlessdevelopment.wordpress.com/2010/01/17/closing-a-wcf-client-the-proper-way/ – vercin

+0

可以修复缩进吗? –

+0

感谢vercin.The链接中的aticle有关于如何关闭wcf的信息。但是我的问题是,如果代码本身引发异常,那么中止函数会在关闭函数后调用。这是否会导致任何问题? – Vishnu

回答

1

而且它是一个更好的办法,来电后关闭客户端连接 立即还是我们需要等待,直到我们完全 使用的响应特性,并关闭在 端的连接?

取决于您是否需要对服务进行后续调用。如果没有,那么一定要关闭连接。

这是预期的方式调用WCF服务代理?任何人请 建议如果有更好的方式来处理这个问题。

号来处理烘焙成WCF,你可以实际上应该构建这样一个问题:

Documents documnts = null; 

    try 
    { 
      var client = new ServiceClientProxy(); 
      documents = client.GetDocuments(); 
    } 
    finally 
    { 
     try 
     { 
      if (client.State != CommunicationState.Closed) 
       client.Close(); 
      } 
      catch 
      { 
      client.Abort(); 
      }; 
    }; 

    if (documents.Length > 50) 
    { 
     throw new Exception("Too many Documents"); 
    } 
    else if (documents.Length < 10) 
    { 
     throw new Exception("Too many Documents"); 
    } 
    else 
    { 
     return documents; 
    } 

如果你想真正了解“为什么”我会强烈建议阅读本系列的文章。他们将清除问题的关闭/中止部分。

http://blogs.msmvps.com/p3net/2014/02/02/a-smarter-wcf-service-client-part-1/ 
http://blogs.msmvps.com/p3net/2014/02/09/a-smarter-wcf-service-client-part-2/ 
http://blogs.msmvps.com/p3net/2014/02/23/a-smarter-wcf-service-client-part-3/ 
http://blogs.msmvps.com/p3net/2014/03/15/a-smarter-wcf-service-client-part-4/ 

我应该指出的另一个事情是,您提供的代码是异常,应该是例外。

对我所认为的商业逻辑使用异常通常不是正确的做法。考虑您返回结构化结果的方法。也许在你的情况下,它是有道理的。

HTH

+0

非常感谢斯蒂芬。我还有一个疑问。如果我们先在客户端调用close并在同一个客户端调用abort,那么我们会得到任何异常或错误吗? – Vishnu

+1

你有运行代码,所以我认为没有什么能阻止你尝试它。 –

相关问题