問題タブ [ierrorhandler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
json - WCF json エラー ハンドラーで例外が発生する
エンドポイントで 2 つの動作を構成しています。
- 1 つは json シリアライゼーション用で、基本的にはここの例と非常によく似ています。そこで重要なのは次のことです。
- もう 1 つはエラー処理用です。そのため、例外がスローされると、json 形式のメッセージがクライアントに送信されます。コードはhereから取得されます(「上記の情報に基づく完全なソリューションは次のとおりです:」で始まる答え)。
動作 1 のみを使用すると、すべて正常に動作します。2 番目の動作を追加すると、次の例外が発生します。
{"ExceptionType":"System.InvalidOperationException","Message":"受信メッセージに予期しないメッセージ形式 'Raw' があります。操作で予期されるメッセージ形式は 'Xml'、'Json' です。これは、WebContentTypeMapper が原因である可能性がありますバインディングで構成されていません。詳細については、WebContentTypeMapper のドキュメントを参照してください。"}
私のweb.configは次のようになります。
何か案は?
wcf - WCF IErrorHandle 非同期の問題
私の知る限り、HandleError はサービスに対して非同期で実行されるはずですが、次のコードは、サービスと同じスレッドで実行されることを証明しています。
c# - オブジェクトをWCFのIErrorHandlerに挿入する方法は?
私はこの状況を持っています:私はWCFサービスを持っています。MyErrorHandler
実装されたインターフェイスを使用して、すべての例外を処理していますIErrorHandler
。作業コード全体を以下に示します。
やりたいことはあるが、方法がわからない: オブジェクト (ILogger など) をMyErrorHandler
クラスに挿入したい。これは基本的に、ここにオブジェクトを挿入する必要があることを意味します: [GlobalErrorHandlerBehaviour(typeof(MyErrorHandler))]
. この問題を解決するのを手伝ってくれませんか?
ところで。DI を使用して何かを注入したいのですが、ロガーでメソッドIErrorHandler
を使用したくありません。private static readonly
c# - IIS でホストしているときに依存関係を IErrorHandler に注入する
私はちょうどこの素晴らしい答えを読んだところです。WCF サービスに依存関係を注入する方法です。解決策はかなりきれいですが、問題があります。
この回答の解決策はセルフホスティング (コンソール アプリケーション) を使用するため、独自の実装ServiceHost
と実行が可能ErrorHandler
です。
私の問題は、ASP.NET Web アプリケーション ホストでこれを行うにはどうすればよいですか? IIS 経由でホストしているときに、Service に何かを挿入しようとしています。どんな助けでも素晴らしいでしょう!
c# - HTTP ステータス コードが 401 Unauthorized の場合、IErrorHandler が間違ったメッセージ本文を返す
安静な WCF サービスのコンストラクター内でスローされた承認例外を処理するために、IErrorHandler を実装しました。一般的な例外がキャッチされると、カスタム タイプが期待どおりに返されますが、ContentType ヘッダーが正しくありません。
ただし、エラー ハンドラが 401 Unauthorized http ステータス コードを返そうとすると、メッセージ本文はデフォルトのタイプに上書きされますが、ContentType ヘッダーは本来あるべきものです。
明らかにここで何かが間違っていますが、私には何がわかりません。
IErrorHandler を実装して、正しいヘッダーを持つ json でカスタム型を返すにはどうすればよいですか?
BaseDataResponseContract オブジェクト:
これは私が返したいオブジェクトです。アプリケーション内の他のすべてのオブジェクトは、このオブジェクトから継承します。例外がスローされたとき、私たちが本当に気にかけているのは、http ステータス コードとエラー メッセージだけです。
IErrorHandler の実装 (簡潔にするためにログは示していません):
IServiceBehavior の実装:
Web.Config:
最後に、WebFaultException を使用すると同様の動作が見られます。私の考えでは、これはいくつかの深く埋もれた .Net シェナニガンの結果です。処理されない可能性のある他の例外をキャッチできるように、IErrorHandler を実装することを選択しています。
参照:
https://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler(v=vs.100).aspx
その他の例:
IErrorHandler が WCF でエラーを処理していないようです。何かアイデアはありますか?
c# - WCF: IErrorHandler 実装が指定された一般的なエラーを提供していない
次のようProvideFault
にインターフェイスのメソッドを実装しました。IErrorHandler
次に、この実装を、呼び出さChannelDispatcherBase
れたの別の実装のすべてに追加します。私のサービス実装はこの属性で装飾されており、次のようにもなっています。IServiceBehavior
GlobalErrorBehaviorAttribute
FaultContractAttribute
ただし、サービス実装内のメソッドのテストは常に失敗し、受け取ったエラーは型ではなく、次のようなものであると不平を言ってFaultException<ResponseModel>
いFaultException
ます。
クライアント側FaultException
ではなく受信しているのはなぜですか?FaultException<ResponseModel>