我实现.Net Webservice(不是WCF)并且需要在某些情况下抛出SoapFault,根据协议我应该发送一个包含InternalFaultCode元素的自定义错误。
我尝试使用自己的FaultObject作为详细信息抛出SoapFaultException,但客户端在faultstring元素下获取该Exception的.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");
}
}
答案 0 :(得分:-1)
我终于找到了我想要的东西,很少有链接让我顺利地完成了这个过程。
基本上这个过程是:
扩展SoapExtension类并覆盖ProcessMessage()方法。
在ProcessMessage()中,为SoapMessageStage.AfterSerialize的消息阶段添加特殊处理程序代码。
修改Web服务的web.config文件并在节中添加节点。