問題タブ [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 - Message Inspector 内で一般的な WCF Fault Exception を作成すると、キャッチされません
一般的な障害例外を作成しFaultException<MyWebServiceFaultDetail>
、MessageFault としてメッセージ インスペクター パイプラインに戻す場合、クライアントはその catch(FaultException<MyWebServiceFaultDetail> ex)
ブロックで一般的な障害を受信せず、ブロック内でのみキャッチされcatch (FaultException ex)
ます。
MyWebServiceFaultDetail
と含意はどちらも、単一のプロジェクト内のIClientMessageInspector
クライアント WCF Web 参照と同じプロジェクト内にありますMyProjects.MyWebService
。
WebService は、プロジェクトへの参照を持つ別のプロジェクトによって呼び出されますMyProjects.MyWebService
。
*簡潔にするためにコメントを削除しました
データ コントラクト:
メッセージ インスペクター。reply.Headers.Action
このメソッドの実行時にそれが nullであることを追加します。CreateMessage() の呼び出しでアクション値を設定しても影響はありませんでした。私が試した値。
.CreateMessage(reply.Version, ex.CreateMessageFault(), "*");
.CreateMessage(reply.Version, ex.CreateMessageFault(), reply.Headers.Action);
.CreateMessage(reply.Version, ex.CreateMessageFault(), ex.Action);
FaultException
を受信しているが、を受信していないクライアント コードFaultException<MyWebServiceFaultDetail>
c# - 特定の FaultExceptions のみを渡すように指定する方法は?
WCF サービスがあり、FaultException から継承する CustomFaultException クラスがあります。
以下のコードを設定しました。
ただし、完全なスタック トレースの詳細を含む例外が常に返されます。
CustomFaultException などの特定の種類の例外のみを返すように WCF サービスを構成または実装する方法は?
ありがとう
wcf - WCFによるカスタム例外
ねえ、私はWCFを介して例外を処理するためにOleg Sychのソリューションを使用しています: リンク
すべてが既知の例外(InvalidOperationExceptionやSystemExceptionなど)で正常に機能しますが、独自のカスタム例外を使用しようとすると機能せず、次のwcf例外が発生します:「パイプからの読み取り中にエラーが発生しました:パイプは終了しました。(109、0x6d)」
これは私のカスタム例外です:
私は何が間違っているのですか?属性がありませんか?
wcf - 単一のアプリケーションでサービスとクライアントをホストするときに WCF 障害をキャッチする
Visual Studio 単体テストで WCF サービスを試しています。クライアントとサービスの両方がプログラムで構成されます。
現在、私のコードは次のようになっています。
ServiceKnownTypesDiscoveryHelper が既知の型を返さない場合、サービスとクライアントが .NET servicemodel コードのどこかでシリアル化に関連する何かをスローする必要があることがわかっています (TestEntity を返すように変更すると、もちろんすべて問題なく動作します)。
しかし、現在、サービスが失敗した場合、次のような漠然とした例外メッセージしか表示されません。
そして using() の最後に私は得る
(これも奇妙です-ServiceChannelが障害状態にある場合、なぜServiceChannelを破棄できないのですか...)
これらのあいまいな例外メッセージの代わりに、サービスまたはクライアントが失敗する原因となった実際の障害をキャッチするにはどうすればよいですか?
asp.net - WCF SOAP エラーの型が正しくありません
まず、私の設定は次のとおりです。
- .Net 4.0 ASP.Net アプリケーション
- basicHttpBinding (soap 1.1) を使用した WCF サービス
- 参照クラスは、オプション /useSerializerForFaults; を指定して svcutil を使用して生成されました。WSDL はすべての操作を定義し、types.xsd および types_fault.xsd ファイルへのリンクを提供します。参考までに、WSD ファイルと XSD ファイルは多くのアプリケーションで共通であるため、変更することはできません (もちろん、重大な検証エラーがない限り)。
SOAP エラーをクライアントに送信すると、問題が発生します。エラーの詳細について、コード内の正しいタイプにアクセスできないため、クライアントはこのエラーを処理できません。
以下は、理解を深めるための WSDL の抜粋です。
したがって、たとえば、Responseを返信する(エラーは発生していない) 場合、CreateScheduledWorkResponse要素を使用して正しく入力できます。しかし、FaultExceptionが発生した場合、CreateScheduledWorkFaultMessage を返すことしかできません ( CreateScheduledWorkFaultを返すことはできません)。そして、クライアントはこのタグを処理できません...
つまり、CreateScheduledWorkFault 型はコードで使用できません。
--> svcutil を使用して WSDL および XSD からコードを生成するときに、コード内の目的の型にアクセスできないため、何か問題があると思われます。
私はこのようにsvcutilを使用します:
svcutil /useSerializerForFaults CSW.wsdl CSW.xsd CSW_Fault.xsd
ご協力いただきありがとうございます。詳細が必要な場合は、お気軽にお問い合わせください。
ボリス
c# - WSE012:次の情報が欠落しているため、入力は有効なSOAPメッセージではありませんでした:アクション
Webサービスにアクセスしようとしています(これもWCFを使用してコーディングされていると思いますが、制御できません)。例外が発生します。
System.ServiceModel.FaultException:WSE012:次の情報が欠落しているため、入力は有効なSOAPメッセージではありませんでした:アクション。
サーバースタックトレース:
[0]で再スローされた例外:
の呼び出しコードは次のProcessServiceName.Execute
とおりです。
例外は、サービスリファレンスによって自動生成されたWCFコードを直接呼び出して;を呼び出す2番目の行から発生します。このメソッドは、データベースオブジェクトを取得し、それをWebサービスに必要なオブジェクトに変換するだけです。System.ServiceModel.ClientBase<T>. Channel
.CallServiceName(request)
BuildServiceRequest
App.config
(これはWindowsサービス内で呼び出されます)の関連部分は次のとおりです。
実際のWebサービス作業を行うすべてのコードがWCF内からのものであることを考えると、問題が何であるかはよくわかりませんが、おそらく、App.config
それを防ぐために少し異なるものが必要です。
グーグルを見て、私は何の助けも見つけていません。StackOverflowでは、2011年9月のこの未回答のWCFの質問は役に立ちません。カスタムバインディング(2009年11月の回答とWSEに関するリンク)は役に立ちません(そして私はそれらをほとんど理解していません) 。 2009年11月のフォーラムの回答と2009年10月のColdFusionの回答はどちらも無関係です。私が見ている他のすべてのGoogleヒットは、これらのリンクの複製です。
どんな援助も大歓迎です!
編集して詳細を追加
Wiktor Zychlaは、問題は(理論的には)プロキシクラスにある可能性があることを正しく指摘しています。ただし、これらのクラスは、自動的に生成されたクラスから完全に編集されていません。例えば:
他のすべてのプロキシクラスも同様に自動生成されたコードから編集されていません(空白と名前空間の最適化のためにここで編集したので、StackOverflow内の画面によりよく適合します;using
ステートメントを追加した3つの名前空間はすべてで完全に修飾されていますClientName.ProjectName.Services.ServiceName
これらのサンプルで編集した名前空間と同様に、クラス参照。
WCFメッセージログを追加すると、メッセージログに次のように表示されます。(これは上記のコードとは異なるサービス呼び出しからのものですが、同じ例外をスローします。これは、このサービス呼び出しが単純であるため、何らかの理由ですべてのサービス呼び出しがログに記録されていないためです。私が行った唯一の編集は、水平スクロールなしで読みやすいエラーメッセージ。)
さらに詳細:ServiceNameSoapインターフェース
Wiktor Zychlaが要求したように、自動生成されたコードからのインターフェイスServiceNameSoap
宣言は、画面にぴったり合うように(したがってusing
)、クライアントの機密名を編集するためにのみ編集されています。
c# - Web サービス呼び出しでの FaultException エラー
データベースからいくつかのカテゴリを返す Web サービスを作成しました。WCFが提供していることをクライアントでテストすると、すべてが完璧です。クライアントの構築を開始しました。サービスへのサービス参照を追加しましたhttp://localhost/Transaction/transaction.svc
。クライアント Web サービスの新しいインスタンスを作成します
Object reference not set to an instance of an object
コードの 2 行目に進みます。エンドポイント名は正しいです。
エラーの理由は何ですか?
PS : さらにコードが必要な場合は、何を投稿すればよいかお知らせください。前もって感謝します。
編集 :
サービスは機能しており、WCFClient でテストしているため、残りのコードは正しい必要があります。
これは、データベースからアイテムを取得するコードです。投稿された解決策を試してみましたが、アプリは停止しませんでした。
wcf - serviceDebug includeExceptionDetailInFaults="true"-ライブサイト上
ASP.NETWebサイトの下にあるWCFサービスを使用しています。
障害例外をスローせずにglobal.asaxファイルのエラーをキャッチするのに便利なので、ライブに移行するときにサービスのデバッグ/例外の詳細を保持したいと思います。
私がこれをすべきではない理由はありますか?ASP.NETサイトにエラーハンドラーがあります。
c# - セルフホスティング WCF と System.ServiceModel.FaultException
ディレクトリ X にいくつかの DLL を含む単純な WCF サービス ライブラリ プロジェクト (これをプロジェクト W と呼びます) があります。
私は W を自己ホストしたいので、コンソール プロジェクト (これをプロジェクト C と呼びます) を作成し、W への参照を追加し、W のスタートアップ ディレクトリを X に設定し、基本的に次の主要なコード行を用意します。
W でメソッドをテストするSystem.ServiceModel.FaultException
と、{"The specified module could not be found. (Exception from HRESULT: 0x8007007E)"}
.
これはどういう意味ですか?ロードしようとしているモジュールを確認するにはどうすればよいですか?
私はC#とWCFの両方にかなり慣れていないので、ヒントをいただければ幸いです。
c# - 特定の WCF FaultException のキャッチ
単一層アプリケーションは、次の方法で例外を区別できます。
ex は単なる一般的な例外です。
多層の WCF に移行すると、これらすべてが失われ、FaultException メカニズムを使用する必要があります。
問題は、上記を行う方法が見つからないことです。
私のクライアントでは、FaultException タイプをキャッチし、それらを区別したいと考えています。つまり、次のようなものです。
これを行う方法はありますか?
それ以外の場合は、FaultException の種類ごとに 1 つずつ、多くの catch コンストラクトが必要です。