当我关闭程序时,如何关闭WCF服务连接?

本文关键字:WCF 服务 连接 何关闭 关闭程序 | 更新日期: 2023-09-27 18:11:23

我在windows Azure网站上托管我的WCF服务。在我的程序中,我在1-16个用户之间进行选择,对于所选的每个用户,我联系我的wcf服务并使用以下格式返回数据:

try
{
    ...
    client.Close();
}
catch (CommunicationException e)
{
    ...
    client.Abort();
}
catch (TimeoutException e)
{
    ...
    client.Abort();
}
catch (Exception e)
{
    ...
    client.Abort();
    throw;
}

WCF服务正在联系azure SQL数据库以获取数据,这意味着服务调用可能总共持续10秒。但是,如果我在检索数据时关闭程序并再次打开它并尝试检索数据,连接超时,我在azure网站上得到HTTP服务器错误,然后随后关闭2-3分钟。

如何在关闭程序时关闭WCF服务连接?我应该用"正在使用"来代替吗?还有,我是否应该尝试重构我的代码,以便只与服务联系一次,而不是为所选的每个用户联系一次?

当我关闭程序时,如何关闭WCF服务连接?

将自动关闭。但是如果你想要确定,你可以使用finally block:

try
{
    ...
    client.Close();
}
finally
{
    if(client.State != CommunicationState.Closed)
        client.Abort();
}

当您说要关闭程序时,您是否通过在任务管理器中终止进程来关闭程序?如果是,因为程序被不体面地关闭,可能没有Tcp/IP会话来关闭连接。

如果您优雅地关闭程序,那么client.dispose()将被调用,服务器将被确认连接关闭,而不是等待tcp/ip数据包到达并保持连接打开。

您可能正在使用try-finally块,如Uriil所建议的。

    try
{
using (...)
{
...
}
}
catch (some exceptions...