我有以下代码来调用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服务的预期方式代理? 任何人都可以建议是否有更好的办法来处理这个问题。
也是在调用后立即关闭客户端连接的更好方法,还是我们需要等到完全使用响应属性并在结束时关闭连接?
答案 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