【问题标题】:show webservice soapexception response in the client in ASP.NET在 ASP.NET 的客户端中显示 webservice soapexception 响应
【发布时间】:2009-09-06 18:08:18
【问题描述】:

我正在尝试创建一个测试 Web 服务并抛出一个 SoapException。但是当我通过浏览器打开服务时,它显示内部服务器错误 - 500。

如果我尝试通过发送手动创建的 SoapRequest(在 stringbuilder 中)来手动使用它,我会在 Visual Studio 本身的“WebResponse response = req.GetResponse()”行中收到相同的错误“Servererror - 500”

无论如何,我是否真的可以看到“响应 XML 中的错误”。

【问题讨论】:

    标签: asp.net web-services soap soap-client soapexception


    【解决方案1】:

    听起来服务有问题,您需要在服务器端而不是客户端对其进行调试。我得出这个结论是因为您的客户端代码和网络浏览器有问题。

    假设您使用的是 .NET,您是否启用了在服务器上显示 ASP.NET 错误?有关信息,请参阅this article

    更新:

    所以你在服务器上抛出了一个错误,并想在客户端得到错误文本?服务器上的错误应该会导致 500 错误消息,并且不太可能向客户端返回任何 XML。也许您可以向 SoapException 构造函数传递一些东西?

    你看过docs for SoapException吗?他们有一些使用 SoapException 的 Detail 属性传递信息的示例。

    【讨论】:

    • 服务器代码就是 [WebMethod] public void GetSoapException() { throw new SoapException(); } 所以没有出错的可能。
    • 对...我可以将一些东西传递给 SoapException 构造函数(事实上我已经尝试过了)但最后我需要抛出那个异常...我错了吗?抛出异常总是会导致“服务器错误 - 500”吗?如果是这样,我怎么能得到响应 XML 的错误。
    【解决方案2】:

    您能在浏览器中访问 asmx(假设您使用的是 asmx),看看它是否正常工作?

    【讨论】:

    • 不,如果我直接从 IE 打开 asmx 并调用该方法,它不会工作,我得到的下一个屏幕是“HTTP 500 internal server error”
    【解决方案3】:

    浏览了 5-6 个小时终于搞定了......这里是:

    当您手动获取响应时,请使用以下内容:

    try
    {
        WebResponse response = req.GetResponse();                
        Stream str = response.GetResponseStream();
        StreamReader rdr = new StreamReader(str);
        Response.Write(rdr.ReadToEnd());          
        Response.End();
    }
    catch (WebException webEx)
    {
        Stream str = webEx.Response.GetResponseStream();
        StreamReader rdr = new StreamReader(str); 
        Response.Write(rdr.ReadToEnd());          
        Response.End();
    }
    

    【讨论】: