問題タブ [wcf-behaviour]
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サービスを同期的に呼び出す方法
WCFサービスがあり、VS2010の「サービス参照の追加」を使用してクライアントを作成しています。
問題は、「非同期操作の生成」オプションがオフになっているにもかかわらず、サービスが非同期で呼び出されていることです。
では、どうすればサービスを同期的に呼び出すことができますか?この動作は(クライアントまたはサーバーで)どこで定義されていますか?私はWCFに少し慣れていません。親切に啓発してください。
クライアントはコンソールアプリケーションです。
「非同期操作の生成」のチェックを外しています。それでも、プロキシには、メソッドが非同期的に呼び出されることを示す次の行が含まれています。理由はわかりません:)
wcf - WCFルーターで現在のフィルターテーブルをプログラムで読み取る方法
次の構成の既存のwcfルーターがあります。
ルーターにクエリを実行して、「リクエストがあった場合、どのエンドポイントにルーティングしますか?」と尋ねられるようにしたいと思います。
APIを介してプログラムでルーティングを実行する方法はありますか?たとえば、エンドポイント名を返すルーティングメソッドを介してリクエストを実行します
wcf - SoapUIは応答を取得しますが、.Netクライアントは取得しません
.netクライアントからhttpsJavaWebサービスにアクセスしようとしていますが、常に「504GatewayTimeout」例外が発生します。
SoapUIを使用して同じWebサービスから応答を取得できました。
また、SoapUIと.netクライアントのリクエストSOAPメッセージが類似していないことにも気づきました。私の質問は、メッセージの形式が間違っていると「504ゲートウェイタイムアウト」の問題が発生するのでしょうか。はいの場合、.netクライアントでsoapメッセージを変更するにはどうすればよいですか?
2つの異なるアプリが生成するリクエストソープメッセージは次のとおりです。
SoapUI
.NETクライアント
wcf - IISでホストされているWCFサービスのすべての操作にOperationBehaviorを追加するにはどうすればよいですか?
カスタムのOperationBehaviorがあります。一度にすべての操作に適用したいと思います。残念ながら、OperationBehaviorsは、サービス全体またはweb.configで構成することはできません。
テストアプリケーションでWCFサービスをホストする場合、次のことができます。
しかし、IISでホストされているWebアプリケーションでそれを行うにはどうすればよいですか?
乗り込もうとしOperationContext.Current.Host.Description.Endpoints
ましApplication_Start
たが、もちろんOperationContext.Current
操作開始前に利用できないので、アプローチが失敗します。
wcf - 入力に必要なプロパティの空のノードがある場合に返される WCF Catch フォールト
障害処理に Unity/Unity.WCF/Unity.Interceptors を使用する WCF サービスを作成しました。
ここで、SOAP 要求を実行し、要求に必要なノードを含めない場合 (サービス メソッドが実行されます)、例外をスローし、インターセプターがこれを SOAP 障害にします。
例:
デバッガーを使用してサービス呼び出しをステップ実行できます。要求オブジェクトを検証するときに例外をスローし、インターセプターがこれを SOAP エラーにします。
今 - 私たちのテスターは、次のように必要なパラメーターに空のノードを提供しました:
また、サービスは次のエラー メッセージを返します。
問題は、このリクエストがサービスに到達しないため、このエラー メッセージに対して何もできないことです。ここで起こることにどう影響を与えることができますか?
これは、MVC でのモデルバインディングを少し思い出させます。バインディングの動作などに影響を与えることはできますか?
wcf-behaviour - プログラムで追加した FaultContract が認識されないのはなぜですか?
明示的にスローしない場合でも、WCF サービスが常に詳細なフォールトをスローするようにしています。それを達成するために、私は実装しました:
IErrorHandler.ProvideFault が障害以外のエラーを FaultException としてラップする ErrorHandler
ServiceBehavior 拡張機能。このハンドラーをアタッチし、各操作にこの FaultException の障害の説明を追加します。これにより、クライアントはそれをそのようにキャッチする可能性があります。
サービスをエラー ハンドラー属性で装飾しました (当初は、ErrorHandler と Operation.Faults に対して、IServiceBehavior の 2 つの異なる実装がありました)。
また、新しい FaultDescription に設定されたデータが、コントラクトで FaultContract を定義したときに調べたものと同じであることも確認しました。
何を試しても、コントラクトの属性として FaultContract を使用すると、クライアントによって障害が適切にキャッチされますが、実行時に ApplyDispatchBehavior を介して接続すると、一般的な FaultException のみがキャッチされます。どうやら、他のすべて (エラーのラッピングとスロー) は機能しており、実行時の各アクションへの FaultContract の追加のみが失敗します。
助けてください...
コードは次のとおりです。
ErrorHandling.cs
GeneralServerFault.cs
IContractService.cs
ContractService.cs
クライアントとホストのコードを省略しました
c# - ClientBase を使用して wcf サービスを呼び出すときに endpointBehaviors 名を設定する方法
web.config ではなく、データベースにクライアント エンドポイントがあります。バインディング、アドレスなどを渡すことができる多数のコンストラクターを持ち、クライアント wcf サービスを呼び出すことができる ClientBase を使用しています。web.config で定義されたバインド構成と動作構成があります。ClientBase を使用するときに、これらの名前を渡すことができます。しかし、web.config で既に定義されている EndpointBehavior 名を渡すことができるそのクラスのプロパティまたはコンストラクターが見つかりません。IEndpointBehavior インスタンスを追加できることがわかりますが、それを使用したくなく、web.config で定義されている endpointbehavior 名だけを渡すことを好みます。
どんな助けでも大歓迎です。
ありがとう。
json - WCF json エラー ハンドラーで例外が発生する
エンドポイントで 2 つの動作を構成しています。
- 1 つは json シリアライゼーション用で、基本的にはここの例と非常によく似ています。そこで重要なのは次のことです。
- もう 1 つはエラー処理用です。そのため、例外がスローされると、json 形式のメッセージがクライアントに送信されます。コードはhereから取得されます(「上記の情報に基づく完全なソリューションは次のとおりです:」で始まる答え)。
動作 1 のみを使用すると、すべて正常に動作します。2 番目の動作を追加すると、次の例外が発生します。
{"ExceptionType":"System.InvalidOperationException","Message":"受信メッセージに予期しないメッセージ形式 'Raw' があります。操作で予期されるメッセージ形式は 'Xml'、'Json' です。これは、WebContentTypeMapper が原因である可能性がありますバインディングで構成されていません。詳細については、WebContentTypeMapper のドキュメントを参照してください。"}
私のweb.configは次のようになります。
何か案は?
json - BizTalk への WCF の動作拡張 WCF-WebHttp 送信ポートが日付の Http ヘッダーを設定しない
Json ドキュメントを外部ベンダーの RESTful API に送信する必要がある BizTalk 2013 アプリ (R2 ではない) があります。ベンダーは、次の 3 つの Http ヘッダーを必要とします。
コンテンツ タイプ: アプリケーション/json
日付: ISO8601 UTC 形式
承認:カスタム認証。HMACSHA1 ハッシュを介して実行される上記の Date 値を含む構築された文字列を使用する
BizTalk では、アウトバウンド (xml) メッセージが送信ポートに送信されます。JSON.Net を使用して Json に変換するカスタム パイプライン コンポーネントがあります。ここまでは順調ですね。メッセージごとに固有のヘッダーを追加するために、IClientInspector と IEndpointBehavior を実装する WCF Behavior 拡張機能を作成しました。BeforeSendRequest() で、リクエストの HttpRequestMessageProperty への参照を取得します。
Headers Collection に ContentType ヘッダーと Authorization ヘッダーを正常に追加できます。Date ヘッダーを追加できません。エラーはなく、Fiddler で調べたときにヘッダー値がありません。
Date は制限されたヘッダーであり、回避策として Reflection を使用して回避できることをどこかで読みました。例えば
それもうまくいきませんでした。私は本当に困惑しています: 1. リクエストに Date ヘッダーがまったくないのはなぜですか? 2. ある場合、それを「制限」する必要があるため、どのように操作できますか?
私は 2 つの異なるオプションを試しました: WCF 動作拡張:
および送信パイプラインのカスタム パイプライン コンポーネント
どちらの場合も、Content-Type、Authorization、およびテスト日 (テストするためだけに tweDate) を設定できますが、実際の Date ヘッダーを設定することはできません。