問題タブ [faultexception]
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でFaultExceptionを処理するにはどうすればよいですか?
トランザクションの一部として呼び出されているWCFサービスがあります。
サービスが2回呼び出された場合(デバッグ中に発生することが多い)、サービスによってFaultExceptionがスローされるようにしたいのですが、トランザクション全体が成功する必要があります。
FaultExceptionをスローしているので、トランザクションは中止に投票しますか?
私はこれを行うことを検討しています(トランザクションを完了に設定し、次に障害をスローします)-しかし、それが機能するかどうかさえわかりません。それはまた私が心配する必要がないいくつかの合併症を持っています。
明らかな解決策は、パラメータを使用してメッセージを返すことですSuccess
(これは私が最初に行ったことです)が、最終的には障害であり、例外が発生するに値するため、これは悪い設計です。
または、クライアントに障害をキャッチしてトランザクションを続行させるのと同じくらい簡単な解決策です。すでに投票が行われているのではないかと心配しています。
WCFサービスに障害をスローさせながら、トランザクションを成功させるための最良の方法は何ですか?
.net - 障害例外の詳細としてのカスタム例外
WCFサービスからFaultException内に独自のカスタム例外をスローし、WCFクライアントでキャッチしようとしています。ただし、クライアント側では、例外は非ジェネリックのFaultExceptionとしてキャッチされ、カスタム例外の詳細は失われます。
私のカスタム例外は次のとおりです。
これが私がそれを投げる方法です:
([FaultContract(typeof(MyCustomException))]がインターフェイスのメソッドの上に配置されていることに注意してください)
そして、これが私のクライアントでそれをキャッチしようとする方法です:
私の目標は、例外が上記の最初のcatch句でキャッチされることですが、2番目のcatch句でキャッチされることになります。
不思議なことに、MyCustomExceptionをApplicationExceptionに置き換えると、実際にFaultExceptionが適切にキャッチされます。
問題は、MyCustomExceptionがSerializableで(DataContractSerializer経由ではなく)シリアル化されていることと、WCFへの追加のディレクティブが欠落していることだと思います。ServiceKnownType属性の行に何かありますか?(私はそれを試しましたが、無駄になりました)。
wcf - 文字列ではなくXMLメッセージを返すWebFaultException?
私のRESTfulサービスレイヤーでは、私にバブルする例外はすべて、FaultExceptionsとしてキャッチされます。そのFaultException内に、、およびを含むカスタムXMLメッセージが<errorNumber>
あり<errorCode>
ます<message>
。例外をWebFaultExceptionとして再パッケージ化して、応答ヘッダーのHttpStatusCodeを400、401、404などに設定できるようにします。
ただし、は使いたくありませんWebFaultException<string>(string message, HttpStatusCode code)
。メッセージもXMLメッセージにしたい。
応答メッセージのHttpStatusCodeを設定し、XMLメッセージを設定する方法を見た人はいますか?Fiddlerを使用して、応答ヘッダーとサービスから送信されるメッセージを調べています。
wcf - Wcf例外処理はエラーをスローします
こんにちは私はwcfで例外を処理するのに問題があります。私はこのようなサービスを持っています:
WCFTestClientユーティリティのサービスでSavePerson()を呼び出しています。SavePerson()の実装は次のとおりです。
しかし、私はこのエラーを受け取ります:
サービスの呼び出しに失敗しました。考えられる原因:サービスがオフラインであるか、アクセスできません。クライアント側の構成がプロキシと一致しません。既存のプロキシが無効です。詳細については、スタックトレースを参照してください。新しいプロキシを開始するか、デフォルト構成に復元するか、サービスを更新することで、回復を試みることができます。
SavePersonメソッドを変更した場合、代わりに:
そうです
上記のエラーは発生しませんが、例外メッセージのみが表示され、内部例外は発生しません。私は何が間違っているのですか?
wcf - FaultException.Detail が空に戻る
WCF クライアントで特定の FaultException をキャッチしようとしています。基本的に、障害クラスから内部記述を抽出する必要があります。これにより、上位層が何でもできるように別の例外にパッケージ化できます。
私は何度もこれを成功させてきましたが、今回の違いは、例外をスローするメソッドの上で宣言されたサービス参照属性からわかるように、fault が配列として宣言されていることです。
これは私のコードです:
問題は、WCF トレースからの SOAP 応答でデータ (説明フィールドなど) を確認できても、コード内の詳細 (配列) が常に空になることです。
したがって、必要なものは間違いなく戻ってきますが、何らかの理由で逆シリアル化されないか、コードからアクセスできません。
どんな助けでも大歓迎です!
更新:
@Darin の提案を試してみましたが、うまくいきませんでした。XmlReader から抽出している文字列は "/r/n" です。
詳細セクションがまったく表示されないようです。
c# - wcfクライアントプロキシのAbort()メソッドは、FaultExceptionをキャッチした後にセッションを解放しません
IISとwcfクライアントでホストされる単純なwcfサービスを作成し、wcfサービスからFaultExceptionをキャッチしてから、client.Abort()を呼び出してセッションを解放すると(Microsoftのサンプルによると)、解放されないことがわかりました。セッションと11番目の呼び出しで電話を切ります。
次に例を示します。
Wcfサービス:
クライアント:
}
ただし、catch(FaultException)のclient.Abort()をclient.Close()に置き換えると、すべてがチャームのように機能し、wcf-serviceメソッドの11回目の呼び出し後にロックが発生しなくなります。
なぜそうなるのでしょうか?FaultExceptionがキャッチされた後、Abort()メソッドがセッションをクリーンアップしないのはなぜですか?
c# - ログインが正しくない場合に C# WCF セッションを無効にする方法
ログイン情報がデータベースに保持される、WCF を使用するアプリケーションのリモート サービスを作成しています。このサービスでは、ログインまたはアカウント作成の呼び出しによるセッションの確立が必要です。関連する ASP はありません。
ここで、公開されたIsInitiatingメソッドを呼び出してクライアントがセッションを開始したときに、提供されたアカウント データをデータベースの情報と照合し、正しくない場合は、そのセッションを無効にして、クライアントに強制的に再起動させたいと考えています。IsInitiatingメソッドを呼び出します。
他のいくつか の質問を見て、セッションを無効にする 2 つの方法の長所と短所を見つけました。これは、FaultException をスローするという難しい方法で行います。もう 1 つは受け入れられたセッション ID を保存する、よりソフトなマナーです。
さて、最初のものは、私が望むものを達成しましたが、不正なログインがアプリケーションの通常の流れの一部であることを考えると、あまりにも積極的です. 一方、2 番目の方法では、クライアントは非開始メソッドを拒否されても引き続き呼び出すことができますが、スレッド セーフ要件が追加されるため、サービスでかなりのコード オーバーヘッドが発生します。
質問: サービスがセッションの初期化を無効にしてそれをクライアントに伝え、新しいIsInitiating呼び出しを強制的に行うことができるようにする 3 番目のパスはありますか?
私が持っているコードの縮小版:
wcf - StackTraceを送信せずにWCFFaultException
FaultContract
事前定義された属性を持ついくつかのWCFサービスがあります。例外がスローされると、FaultException<TDetail>
StackTrace、Source、およびその他の潜在的に保存されていない情報が送信されます。
返品のみ可能ですか:
- 詳細(一般的なTDetailから)
- FaultMessage
- FaultCode
- (そしておそらく)FaultReason
c# - WCF障害のユニットテスト
WCFサービスから予想される障害を単体テストするための最良の方法は何ですか?
特定の再現可能なエラーに対して(正しく)FaultExceptionsをスローしているWCFサービスの単体テストを試みています。単体テストは、WCFクライアントのインスタンスを取得し、FaultExceptionをスローする適切なサービスメソッドを呼び出します。
これらはすべて期待どおりに機能しますが、サービスの実装でエラーが検出されない場合、障害が原因でIDEが破損するため、これを単体テストするのが困難です。私は例外ではなく障害を使用しているため、IDEが例外をシリアル化してクライアントに送信し、そこで例外が発生することを期待していました。
特定のユーザー未処理の例外のブレークを無効にする構成オプションがあることはわかりますが、チーム環境では簡単に実行できないため、同じ結果を達成するためのより良い方法を誰かが指摘してくれることを期待していました。
これは、実装が現在どのように見えるかのサンプルコードです...
単体テストプロジェクトには、WCFサービスへのサービス参照があり、インターフェイスを次のように定義しました。
障害は次のように定義されます。
サービスを呼び出すコードは、漠然と次のようになります。
- コードを編集して、ExpectedException属性を使用していることを示しましたが、サービスで例外がスローされたときにIDE/デバッガーが壊れないようにする効果はあまりないようです。
wcf - WCF/WebService: 相互運用可能な例外処理
WCF が例外をエラーに変換し、SOAP メッセージとして送り返すことは理解していますが、これが本当に相互運用可能かどうか疑問に思っていました。この考えられるシナリオを理解しようとするのに苦労していると思います:
- クライアント (Java) が WCF サービス (LoginService) を呼び出します。
- サーバーは適切な承認をチェックしますが、ユーザー承認は失敗します。
- サーバーが UnauthorizedAccessException をスローします。
- WCF はこれを Fault に変換します。(* - 以下も参照)
- クライアントは、このフォールトの読み取り方法を認識できなければなりません。
.NET が UnauthorizedAccessException からエンコードする SOAP Fault を Java が変換する方法を Java が認識していることを期待しているため、これがどのように相互運用可能であるかを理解するのに苦労していると思います。
- また、.NET が実際にどのように例外を障害に変換するのか、障害コード、名前などとして何が入るのか。おそらく障害名が「UnauthorizedAccessException」のように「当然」のように見えるものもありますが、私は '推測するよりも確実に知っている方がよい。