【问题标题】:How to throw SoapFault in .net WebService?如何在 .net WebService 中抛出 SoapFault?
【发布时间】:2015-04-21 14:31:37
【问题描述】:

我正在实现一个 .Net Web 服务(不是 WCF)并且需要在某些情况下抛出 SoapFault,根据协议我应该发送一个包含 InternalFaultCode 元素的自定义错误。

我尝试使用我自己的 FaultObject 作为详细信息抛出 SoapFaultException,但客户端在 faultstring 元素下获取了该异常的 .ToString()。

// This is the method I call every time I want to throw a FaultException
private void ThrowFault(string internalCode, string errorMsg)
{
    throw new SoapException(errorMsg, SoapException.ServerFaultCode, new FaultException<InternalFaultDataType>(new InternalFaultDataType("Server", errorMsg, internalCode)));
}

// This is just an example
[System.Web.Services.WebMethod()]
[return: System.Xml.Serialization.XmlElement("authenticateUserResponse")]
public AuthenticateUserResponse AuthenticateUser(AuthenticateUserRequest data)
{
    var x = User.GetByUserName(data.username);
    if(null != x) {
        // Check auth
        return AuthenticateUserResponse.fromUser(x);
    } else {
        this.ThrowFault("INVALID_CREDENTIALS", "Invalid username or password");
    }
}

【问题讨论】:

  • 添加一些示例代码可能对我们有所帮助
  • 我不确定要向您展示什么,因为我不知道如何从 Web 服务中抛出我自己的 SoapFaultException。现在我正在扔其中一个,但很明显它被抓住并重新扔了,我不知道如何。
  • 所以你能不能把那个代码..这样我们也可以分析
  • 我添加了代码,我清理了它,所以它更短!

标签: c# .net web-services soap


【解决方案1】:

我终于找到了我要找的东西,很少有链接可以引导我以正确的方式完成此操作。

基本上流程是:

  • 扩展 SoapExtension 类并覆盖 ProcessMessage() 方法。

  • 在 ProcessMessage() 中,为 SoapMessageStage.AfterSerialize 的消息阶段添加特殊处理程序代码。

  • 修改 Web 服务的 web.config 文件并在部分中添加一个节点。

User Friendly ASP.NET Exception Handling

Throwing Better .NET Exceptions with SOAP and HTTP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多