-1

我想如果客户端发送错误的凭据然后服务抛出肥皂异常,但我尝试但仍然没有运气。

从这里查看我的更新代码https://github.com/karlosRivera/EncryptDecryptASMX

任何人都可以下载我的代码并在他们的 PC 上运行以捕获问题。

看到这个区域

[AuthExtension]
[SoapHeader("CredentialsAuth", Required = true)]
[WebMethod]
public string Add(int x, int y)
{
    string strValue = "";
    if (CredentialsAuth.UserName == "Test" && CredentialsAuth.Password == "Test")
    {
        strValue = (x + y).ToString();
    }
    else
    {
        throw new SoapException("Unauthorized", SoapException.ClientFaultCode);

    }
    return strValue;
}

对于这条线throw new SoapException("Unauthorized", SoapException.ClientFaultCode);

我从我的 soapextension 进程消息函数中看到的响应 XML 正文没有发生变化。

所以我现在有两个问题

1)我想throw SoapException从需要更改肥皂响应的服务中获得。

2)从客户端我需要赶上SoapException

请从链接中查看我的最新代码并告诉我要更改的内容。谢谢

4

2 回答 2

2

考虑迁移和使用 WCF。这是 WCF 故障。

SoapExtensions.AfterSerialize您可以使用or方法替换错误消息或处理错误BeforeSerialze

资源

于 2016-12-30T18:45:29.963 回答
0

另一种选择是避免发送SoapExceptions,但更复杂的嵌入错误语义的对象。例如

[Serializable]
class Result<T>
{
    public bool IsError { get; set; }
    public string ErrorMessage { get; set; }

    public T Value { get; set; }
}

在这种情况下,您的方法可能如下所示:

[AuthExtension]
[SoapHeader("CredentialsAuth", Required = true)]
[WebMethod]
public Result<string> Add(int x, int y)
{
    string strValue = "";
    if (CredentialsAuth.UserName == "Test" && CredentialsAuth.Password == "Test")
    {
        return new Result<string> { Value = (x + y).ToString() };
    }
    else
    {
        return new Result<string> { IsError = true, ErrorMessage = $"Unauthorized -  {SoapException.ClientFaultCode}" };
    }
}

Result可以开发成包含一组字段/输入错误,以返回与不正确的输入参数值相关的更精确的错误消息。

于 2016-12-30T19:00:06.430 回答