2011-07-29 6 views
3

グローバル例外ハンドラを追加しようとしているWCF/REST Webサービスがあります。私は、標準の.NET WebサイトのApplication_Errorイベントに似たものを探しています。WCF RESTサービスへのグローバルエラー処理の追加

私はここでは詳述何のようIErrorHandlerとIServiceBehaviorの使用についての情報をたくさん見つけた:http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx#Y1479

私は必要なもののように思えるが、私が見つけたすべての例では、サービスがウェブに定義されていることを前提としています。 config。私はそれをやっていないよ - 私はそうのようなのglobal.asaxで構成されたRouteTablesを、使用しています:

public class Global : HttpApplication 
{ 
    void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(); 
    } 

    private void RegisterRoutes() 
    { 
     // Edit the base address of Service1 by replacing the "Service1" string below 

     RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHost2Factory(), typeof(myService))); 


    } 

だから、どのように私は私のカスタムIErrorHandlerとIServiceBehaviorを設定しない、ことを考えると?ルート・テーブルをweb.config経由で設定するのではなく、ルート・テーブルを使用しているということを考えれば、正しい軌道にいるのでしょうか?私はWCFの新機能です。

答えて

4

の配線は、CreateServiceHostをオーバーライドするカスタムWebServiceHostFactoryを作成することで実現できます。次のように

例えば

あなたがIServiceBehaviorを実装するクラスGlobalErrorHandlerBehaviourを持っている場合、あなたはそれを配線できます。

public class CustomWebServiceHostFactory : WebServiceHostFactory 
{ 
    protected override ServiceHost CreateServiceHost(System.Type serviceType, System.Uri[] baseAddresses) 
    { 
     return ApplyGlobalErrorHandler(base.CreateServiceHost(serviceType, baseAddresses)); 
    } 

    private ServiceHost ApplyGlobalErrorHandler(ServiceHost serviceHost) 
    { 
     serviceHost.Description.Behaviors.Add(new GlobalErrorHandlerBehaviour()); 
     return serviceHost; 
    } 
} 

あなたは、このカスタム工場に渡すServiceRouteコンストラクタにお電話を更新します。

+0

これは正解です。この男にすべてのポイントを与えてください! :) –

関連する問題