关闭程序时如何关闭WCF服务连接

时间:2014-07-03 14:32:47

标签: c# web-services wcf azure

我在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服务连接。我应该使用“使用”声明吗?此外,我是否应该尝试重构我的代码,仅为每个选定的用户联系服务一次而不是一次?

2 个答案:

答案 0 :(得分:0)

它将自动关闭。但如果您想确定,可以使用finally阻止:

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

答案 1 :(得分:0)

当您说关闭程序时,您是否通过终止任务管理器中的过程来关闭程序?如果是这样,因为该程序被不正当地关闭,可能没有用于关闭连接的Tcp / IP对话。

如果你正常关闭程序以便调用client.dispose(),服务器将被确认连接关闭,而不是等待tcp / ip数据包到达并保持连接打开。

你可能正在使用try-finally块作为Uriil建议。

    try
{

using (...)
{
...
}

}
catch (some exceptions...