0

私は数日からWCFサービスに取り組んでいます。私は例外のあるサービスを作成しました

public String Login(string Vendorname, string VendorAccessCode)
    {        
        try
        {
        if()
        {
        }
        else
        {
            UserIdentityToken = string.Empty;
            this.ErrorMessage = "Authentication failed. Please contact administrator";
            throw new FaultException(this.ErrorMessage);
        }

        }
        catch (FaultException ex)
        {
           logger.Error(ex.Message); 
        }
        catch (Exception ex)
        {
            logger.Error(ex.Message); 
        }

        return UserIdentityToken;
    }

この後、私はMessgaeInspectorのクライアント側で例外を処理しています。

      public class MessageInspector : IClientMessageInspector
     {


    public void AfterReceiveReply(ref Message reply, object correlationState)
    {
        if (reply.IsFault)
        {

            MessageFault fault = MessageFault.CreateFault(new FaultCode("Receiver"), new FaultReason(reply.ToString()));
            throw new FaultException(fault);
        }
    }
   }

クライアントサイドコードを次のように処理しています

            try
            {                                objVendorServiceClient.Login(txtuserName.Text.Trim(),
txtAccessCode.Text.Trim());               
            }
            catch (FaultException ex)
            {                
                lblAuthenticationMessage.Text = ex.Message;                
                throw ex;
            }

ただし、Serviceで認証が失敗すると、Reply.IsFaultはfalseのみを返します。誰かが私に返信とは何かを説明できますか?

4

1 に答える 1

0

Message.IsFaultプロパティ

このメッセージがSOAP障害を生成するかどうかを示す値を取得します。

あなたは言う:

サービスで認証が失敗するたびに、Reply.IsFaultはfalseを返します

これは、自分で障害を見つけてログに記録し、空の文字列を返すためです。WCFがFaultExceptionをキャッチし、そこからSOAPフォールトを作成するには、FaultExceptionをスローする必要があります。

于 2012-12-10T09:54:13.620 に答える