来自SoapException的不同TimeoutException

时间:2014-10-15 07:25:26

标签: c# web-services soapexception

让我描绘一下情况。我有一个 Windows服务(让我们命名为A calls一个Web服务(让他给他命名B B在不同的 Web服务本身上调用。 (让我们称之为网络服务WS1WS2WS3

图:

                       //This is a Black Box (e.g. I can't change implementation)
                       +-----------------------------------------------+
                       |                                               |
                       |                  ----> WS1                    |
WindowsService A ----> |   Webservice B   ----> WS2                    |
                       |                  ----> WS3                    |
                       |                                               |
                       +-----------------------------------------------+

在通话过程中可能会不时出现异常。 大多数异常停止程序的执行并通知开发人员(Me)。但是当Timeout出现时,Window-Service A应该尝试retry

所以我写了以下代码:

try
{}
catch (WebException ex)
{
    if (ex.Status == WebExceptionStatus.Timeout)
    {
        //Wait some time before retry
        //Log the exception
        //Retry
    }
    else
    {
         //Log the exception
         throw;
    }
}
catch (Exception ex)
{
     //Log the exception
     throw;
}

如果异常发生在Web-Service B 中,则此代码可以运行。然而,当timeoutWS1WS2中出现WS3时;我得到SoapException

问题:
无论如何,如果SoapException的原因是Timeout而没有使用此处提到的消息(MSDN- Handle TimeoutException),则会过滤掉。是否有任何字段可以指向基础异常的类型?

1 个答案:

答案 0 :(得分:0)

试试这段代码,它可能会帮助您了解错误原因:
PS:在catch()

中使用它
string pageContent = new StreamReader(wex.Response.GetResponseStream()).ReadToEnd().ToString();
return pageContent;