問題タブ [wcf-faults]
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.
wcf - WCF 検証エラー
Validation Application Block - Enterprise Libraryを使用して、WCF サービス操作に送信されたパラメーターを検証しています。たとえば、特定の操作では、次のようにパラメーターを 1 または 6 にする必要があります。
これは問題なく機能します。つまり、検証エラーが発生しますが、サービスがクライアントによって呼び出されると、汎用の System.ServiceModel.FaultException がスローされます。メッセージは、「この障害の作成者は理由を指定しませんでした」を示します。
これで、サービス キャルの前にパラメーターを自分でチェックしてカスタム エラーをスローすることができましたが、それは Validation Application Block を使用したパラメーターの属性ベースの検証の目的を無効にしているようです。検証フォールトによって返されるエラーをカスタマイズする方法はありますか? 私が完全に間違ったことをしている可能性もあります。呼び出し元に、例外メッセージで 1 または 6 を渡す必要があることを知ってもらいたいだけです。これは可能ですか?
wcf - WCF 取得 "プライマリ署名は暗号化する必要があります"。ProtectionLevel.None を使用した FaultContract から
バランスの取れた wcf サービスをロードするように対話する既存の asp.net アプリケーションがあります (iis がホストされ、servicePrincipalName として構成されたアカウントで実行されているアプリ プール内など)。wcf サービスはいくつかのカスタム エラーを返します。これらはすべて FaultContract(typeof(x), ProtectionLevel = ProtectionLevel.None) で定義されています。これらのサービスは公開されていません。クライアントは、「サービス参照」生成クラスを使用してサービスにアクセスします。
これは問題なく機能しましたが、最新のコード ベースでは、「プライマリ署名は暗号化する必要があります」というメッセージが表示されます。サービスがこれらの障害のいずれかを返したときに、クライアントで例外が発生します。サービス コードと構成は変更されていません (少なくとも、障害を生成する従来の部分)。クライアント側のサービス参照生成コードは、最も変更されているように見えます (多くの場合、削除されて再作成されます)。
セキュリティ構成は、1 年以上変更されていません。すべての更新はかなり最新です。これを 3 つの環境でテストしたところ、新しいコード ベースをデプロイするとすぐに、障害によって例外が生成され始めました。生成されたクラスに含まれている必要があるようですが、Visual Studio によって生成されるため、非常に困惑しています。
これは誰にとってもおなじみの音ですか?助言がありますか?
更新: ProtectionLevel 属性を削除してデフォルトに設定すると問題は解決しますが、None を指定すると失敗する理由が気になります。運用契約またはサービス契約のデフォルト レベルと競合する可能性がありますが、これらの値は過去 1 年間変更されていないため、現在機能していたものが機能しない理由を説明できません。
更新: このコード生成の変更は、2.0.50727.3053 と 2.0.50727.3082 の間に発生しました (生成されたコードのランタイム バージョン コメントによると)。
wcf - 誰かが実際にFaultReasonTextを使用してWCFサービスからの障害をローカライズしていますか?
WCFには、障害の一部であるFaultReasonTextオブジェクトを介して、クライアントに返された障害をローカライズできるようにするローカリゼーションメカニズムがあります。
これを行う方法は、FaultReasonTextのコレクション内で障害のメッセージの可能なすべての翻訳を渡すことです。これは、SOAPv1.2に基づいていると私は理解しています。
誰かが実際にこのメカニズムを使用していますか?これは帯域幅の点で無駄ではありませんか?(おそらく)特定の言語にのみ関心があるクライアントに、考えられるすべての翻訳を送信するのはなぜですか?
c# - WCF シリアル化の問題/例外をトレースする方法
(OperationContract から DataContract を返した後) WCF シリアル化中にアプリケーション例外がスローされるという問題が発生することがあります。私が受け取る唯一の(そしてあまり意味のない)メッセージは
System.ServiceModel.CommunicationException : 基になる接続が閉じられました: 接続が予期せず閉じられました。
内部例外への洞察がないため、シリアル化中にエラーの原因を突き止めるのが非常に困難になります。
これらの例外を追跡、ログ記録、およびデバッグする方法を知っている人はいますか? または、例外をキャッチして処理し、定義された FaulMessage をクライアントに送信できますか?
ありがとうございました
c# - WCF障害のユニットテスト
WCFサービスから予想される障害を単体テストするための最良の方法は何ですか?
特定の再現可能なエラーに対して(正しく)FaultExceptionsをスローしているWCFサービスの単体テストを試みています。単体テストは、WCFクライアントのインスタンスを取得し、FaultExceptionをスローする適切なサービスメソッドを呼び出します。
これらはすべて期待どおりに機能しますが、サービスの実装でエラーが検出されない場合、障害が原因でIDEが破損するため、これを単体テストするのが困難です。私は例外ではなく障害を使用しているため、IDEが例外をシリアル化してクライアントに送信し、そこで例外が発生することを期待していました。
特定のユーザー未処理の例外のブレークを無効にする構成オプションがあることはわかりますが、チーム環境では簡単に実行できないため、同じ結果を達成するためのより良い方法を誰かが指摘してくれることを期待していました。
これは、実装が現在どのように見えるかのサンプルコードです...
単体テストプロジェクトには、WCFサービスへのサービス参照があり、インターフェイスを次のように定義しました。
障害は次のように定義されます。
サービスを呼び出すコードは、漠然と次のようになります。
- コードを編集して、ExpectedException属性を使用していることを示しましたが、サービスで例外がスローされたときにIDE/デバッガーが壊れないようにする効果はあまりないようです。
c# - WCFの障害処理
Qクライアント側で元の例外(サーバーで発生)を取得するにはどうすればよいですか?
セルフホストのWCFサービスとC#4を使用して、適切な例外処理を設定しようとしています。
私はこのようなクライアントを持っています
そしてサービスの実装
サービスweb.configには
これは私の最初の例外です
そして、これは私がクライアントに得るものです
必要に応じて、クライアント側で完全な詳細を投稿できますが、クライアントの例外には元の例外への参照がありません。
更新
これは、FaultContractAttributeが定義された私のインターフェースです
そしてこれは私のWcfExceptionクラスです
c# - バイトを転送するときのWCFデータサービスの例外[]
設定した最近のWCFデータサービスをテストしています。
ほとんどが正常に機能しています。コレクションは1つだけです。オブジェクトを追加して変更を保存すると、次の例外が発生します。
file(byte [])を含む唯一のオブジェクトなので、問題はこのfile(size?...?)が原因だと思います。詳細をアクティブにしても、エラーはあまりわかりません。欠点:
私はこのコレクションのすべての権利を持っています:
ファイルを追加する方法は次のとおりです。
追加してみました
私の要素に
空のtxtファイルを送信すると、機能します。
何か案が?
ありがとうございました!
wcf - Enterprise Library が WCF で FaultException をスローしない理由
IIS でホストされている WCF サービスを使用しています。
また、エラー コントラクトを使用してクライアントにエラーを送信します ( FaultException<'T> ) 。クライアント側では、 FaultException<'T>
をキャッチしてエラーをユーザーに表示します。
サーバーで未処理の例外がスローされた場合、WCF はプレーンなFaultExceptionを生成するため、クライアントはそれをキャッチし、ユーザーに "Internal Server Error" メッセージを表示します。
その後、WCF Exception Shielding に Enterprise Library 5.0 を使用し始めたところ、次の問題が発生しました。FaultContractExceptionHandlerを使用すると、すべてのエラーをクライアントに伝えることができますが、未処理の例外の場合、クライアントはFaultExceptionではなくCommunicationExceptionを受け取ります。他のすべては正常に動作します。
例外処理ポリシーをオフにした場合 (ExceptionShielding 属性を削除)、クライアントは期待どおりにFaultExceptionsをキャッチします。
何が原因か分かりますか?
ありがとう。
PS: 内部例外のチェーンは次の
とおり
です。
Web.config
サービスクラス
運営契約
wcf - クライアントでWCFエラーをログに記録する
私のアプリケーションは、WCFを使用してWebサービスを呼び出します。呼び出しはさまざまな理由で失敗する可能性があります。
- 障害
- タイムアウト
- 接続切断
- ..。
そのようなエラーをすべてログに記録したいと思います。すべての呼び出しをtry-catchでラップするのではなく、アプリケーション全体のすべてのWebサービス呼び出しに対して1か所でこれを実行したいと思います。
残念ながら、IClientMessageInspectorは、タイムアウトや接続の失敗に対して呼び出されません。すべての例外を一元的に記録するために使用できるWCF拡張ポイントはありますか?
WCFトレースのように、エラーをログに記録するだけではないことに注意してください。ログに記録したい:
- サービス名
- MethodName
- 間隔
- Exception.ToString()
私は回避策を受け入れています。
wcf - デシリアライゼーション障害の管理/変更/応答の傍受
次のリクエスト オブジェクトがあるとします。
また、WCF サービス定義は次のとおりです。
以下を操作に送信すると、目的の応答が得られます。
無効な Guid を送信すると (これはどのタイプでも発生します)、次の応答が返されます。
これは良いことですが、私のサービスがデータの何が問題なのかを正確に知っていることを考えると、消費者にとって十分な情報ではありません。
Web 構成設定で完全な例外を公開できます<serviceDebug includeExceptionDetailInFaults="true"/>
が、消費者にとっては情報が多すぎます! コード レベルでエラーをカスタマイズしたいのですが、デシリアライザーに接続する方法がわかりません。カスタム SOAP エラーと FaultContract を処理する方法は知っていますが、これはより低いレベルにあるようです。着信メッセージが CLR メソッドに到達する前に、何らかの方法でインターセプトする必要がありますか? 私が気付いていないこれを行う方法はありますか?