WCF服务代理 - 调用Close()和Abort函数

时间:2016-05-05 06:18:26

标签: wcf wcf-data-services wcf-binding wcf-security wcf-rest

我有以下代码来调用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()以及客户端上的Abort函数。这是调用WCF服务的预期方式代理? 任何人都可以建议是否有更好的办法来处理这个问题。

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

1 个答案:

答案 0 :(得分: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