-1

クライアントが間違った資格情報を送信し、サービスが SOAP 例外をスローした場合、試してみましたが、まだうまくいきません。

ここから私の更新されたコードを参照してください 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);

応答 XML 本文は、soapextension プロセス メッセージ関数から見た変更を取得していません。

だから私は今2つの問題を抱えています

throw SoapException1) SOAP 応答を変更する必要があるサービスから取得したい。

2)クライアント側から、キャッチする必要がありますSoapException

リンクから最新のコードを表示し、何を変更するか教えてください。ありがとう

4

2 に答える 2

2

移行して WCF を使用することを検討してください。WCF フォールトでした。

SoapExtensions.AfterSerializeまたはメソッドを使用して、エラー メッセージを置き換えたり、エラーを処理したりできBeforeSerialzeます。

ソース

于 2016-12-30T18:45:29.963 に答える
0

もう 1 つのオプションは、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 に答える