gpt4 book ai didi

c# - Using 语句和 WCF 客户端的问题

转载 作者:太空狗 更新时间:2023-10-29 18:11:13 25 4
gpt4 key购买 nike

我一直在将所有调用 WCF 调用的代码包装在一个 using 语句中,以为对象将被正确处理。当我在谷歌上搜索异常“位于 .. 的 Http 服务太忙”时,我找到了这个链接 http://msdn.microsoft.com/en-us/library/aa355056.aspx那就是说不应该在类型化代理中使用 using 语句。真的是这样吗?我想我的代码发生了很大的变化(叹息)。这个问题只出现在类型化的代理中吗?

示例代码:

private ServiceClient proxy;

using(proxy = new ServiceClient("ConfigName", "http://serviceaddress//service.svc")){
string result = proxy.Method();
}

最佳答案

问题的核心是:在您的using block 结束时(这通常是一个非常好的主意!),WCF 代理将被释放.但是,在处理 WCF 代理期间,可能会发生异常 - 这些异常将导致应用程序出现异常。由于这是在 using block 的末尾隐式完成的,您甚至可能看不到错误发生的位置。

通常,Microsoft recommends a pattern something like this:

private ServiceClient proxy;

try
{
proxy = new ServiceClient("ConfigName", "http://serviceaddress//service.svc");
string result = proxy.Method();
proxy.Close();
}
catch (CommunicationException e)
{
// possibly log error, possibly clean up
proxy.Abort();
}
catch (TimeoutException e)
{
// possibly log error, possibly clean up
proxy.Abort();
}
catch (Exception e)
{
// possibly log error, possibly clean up
proxy.Abort();
throw;
}

您需要显式调用 proxy.Close() 方法,并准备好处理该调用可能发生的任何异常。

关于c# - Using 语句和 WCF 客户端的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6729895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com