3

我有一个 asmx 服务和一个引发肥皂异常的方法。问题是当发生异常时,我得到以下错误字符串。

<faultstring>System.Web.Services.Protocols.SoapException: Error occurred at CustomServices.Application.TestService.ThrowSoapException(XmlNode ErrorNode) at CustomServices.Application.TestService.MyMethod(String param1, String param2, String param3)</faultstring> 

但我想要的只是我传递给 SoapException 构造函数“发生错误”的字符串。像这样的东西

<faultstring>Fault occurred</faultstring> 

现在可以使用的一个选项是我可以将自定义错误模式设置为 On 并且它只显示短消息,但是我想知道是否有任何其他方法可以做到这一点并在代码本身中阻止它而不是改变配置文件的自定义模式。以下是我抛出肥皂异常的代码

 public void WebServiceExceptionHandler(XmlNode node)
    {
        System.Xml.XmlDocument Xmldoc;
        System.Xml.XmlNode xmlNode;
        try
        {
            Xmldoc = new System.Xml.XmlDocument();
            xmlNode= doc.CreateNode(XmlNodeType.Element, SoapException.DetailElementName.Name, SoapException.DetailElementName.Namespace);

          //my detaild error node to be displayed.
            XmlNode errorNode= Xmldoc.ImportNode(node, true);
            xmlNode.AppendChild(errorNode);
            //Throw the exception.    
            SoapException se = new SoapException("Error Occurred", SoapException.ServerFaultCode, Context.Request.Url.AbsoluteUri, xmlNode);
            throw se;
        }   

我没有看到任何可以将故障字符串限制为我发送的错误的东西,而不是向其中添加堆栈跟踪信息。有人可以帮我解决这个问题。我尝试更改soapException 类的构造函数以仅传递错误消息和故障代码,但这似乎无济于事。

4

1 回答 1

2

当 customErrors 功能设置为 Off 或 RemoteOnly* 时,ASP.Net 会自动包含异常详细信息,例如异常名称和堆栈跟踪。为了改变这一点,你需要像这样改变你的 web.config:

<configuration>
    <system.web>
        <customErrors mode="On" />
    </system.web>
</configuration>

进行此更改后,您应该会看到预期的<faultstring></faultstring>


*如果customErrors 设置为RemoteOnly,将在本地生成详细的消息,但如果请求来自远程机器,则会发送不太详细的版本。

于 2014-01-10T18:42:46.863 回答