2011-07-24 13 views
1

私は作成したValidationFaultを持つAJAX対応WCFサービス(この動作ではenableWebScriptを使用しています)を持っています。ここでAJAX対応のWCFサービスからJSONのフォルトを返す方法は?

サービスです:

[ServiceContract] 
public interface ICoreWCF 
{ 
    /// <summary> 
    /// Saves the Customer. 
    /// </summary> 
    [OperationContract] 
    [WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    [FaultContract(typeof(ValidationFault))] 
    void Customer_Save(Customer customer); 
} 

ここのせいです:

[DataContract] 
public class ValidationFault 
{ 
    [DataMember(Name = "success")] 
    public bool Success { get; set; } 

    [DataMember(Name = "msg")] 
    public string ValidationMessage { get; set; } 

    [DataMember(Name = "errors")] 
    public Dictionary<string, string> Errors { get; set; } 
} 

私は戻って、クライアントのJavaScriptにこの障害を送りたいと思います。 問題は、私のカスタムフォルトのDataMembersが無視され、一般的な例外が返されることです。

どのようにエラーコレクションをクライアントに送信できますか?

は、私はすでにそれが障害に例外を変換するために、アプリケーションブロックを例外処理を使用し、次にIErrorHandlerは結果の障害をシリアライズするように、thisに似て自分のIErrorHandlerを書いてみました。しかし、WebScriptingEnablingBehaviorのJsonErrorHandlerは、結果のMessageオブジェクトをうまく扱っていないようです。

ありがとうございました。

+0

見て[ここ] [1]既に回答しました。 [1]:http://stackoverflow.com/questions/1272877/returning-error-details-from-ajax-enabled-wcf-service –

+0

ありがとう@ブライアン。私はこの質問を見ましたが、残念ながら私はこの答えで説明されているのと同じ問題が発生しています:http://stackoverflow.com/questions/1272877/returning-error-details-from-ajax-enabled-wcf-service/3705135#3705135 –

答えて

0

webinvokeにあなたはRequestFormat=WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json を追加することができ、あなたがIErrorHandlerを実装し、それがカスタム動作を使用して使用してサービスを提供するために関連付けられている場合は

+0

ありがとうございました。残念ながら、これは問題を解決しません.. –

0

それを試してみてくださいリンクによって目撃としてWebHttpBehaviorから継承された後、おそらくあなたは、デフォルトのリクエスト/レスポンスのフォーマットなどを追加してみてくださいたとえば、

private class CustomWebScriptBehavior : WebHttpBehavior 
{ 
    protected override void AddServerErrorHandlers(ServiceEndpoint endpoint, 
     System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher) 
    { 
     // clear current error handlers 
     endpointDispatcher.ChannelDispatcher.ErrorHandlers.Clear(); 
     // add our error handler 
     endpointDispatcher.ChannelDispatcher.ErrorHandlers.Add(
       new ErrorHandler(true)); 
    } 

    private WebMessageFormat _requestFormat; 
    private WebMessageFormat _responseFormat; 

    public CustomWebScriptBehavior() 
    { 
     _requestFormat = _responseFormat = WebMessageFormat.Json; 
    } 

    public override bool AutomaticFormatSelectionEnabled 
    { 
     get { return false; } 
     set { throw new NotSupportedException(); } 
    } 

    public override WebMessageBodyStyle DefaultBodyStyle 
    { 
     get { return WebMessageBodyStyle.WrappedRequest; } 
     set { throw new NotSupportedException(); } 
    } 

    public override WebMessageFormat DefaultOutgoingRequestFormat 
    { 
     get { return _requestFormat; } 
     set { _requestFormat = value; } 
    } 

    public override WebMessageFormat DefaultOutgoingResponseFormat 
    { 
     get { return _responseFormat; } 
     set { _responseFormat = value; } 
    } 
} 

これにより、メソッドごとにWebInvoke属性を指定する必要がなくなります。

+0

答え、VinayC、ありがとうが、残念ながらそれは私の問題を解決しません。 –

関連する問題