問題タブ [wcf-extensions]

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.

0 投票する
1 に答える
507 参照

wcf - WCF カスタム メッセージの実装

WCF プロジェクトのコンテキストでは、xml および非 xml メッセージ (標準 SOAP、WS-Attachments など) を同じ方法で処理する必要があります。WCF の通常のフローでは、Xml メッセージを処理できる Message オブジェクトを作成します。これはエンコーダによって行われるため、別のメッセージを処理したい場合は、別の種類のメッセージ処理を実装する必要があります...

私のニーズは、「受信メッセージ」の概念を表すメッセージ派生クラスを作成することですが、特別なデータ処理の形で「処理」されるのではなく、実際のデータ処理については、2 番目のステップで延期されます。

したがって、キャッチオール サービスではMessage messageObjectas パラメータを取得するため、サービスの署名は次のようになります。Message Accept(Message messageObject)

何か案が?前もって感謝します

0 投票する
1 に答える
524 参照

wcf - WCF によって生成された WSDL からスキーマ要素を削除する

私は、WCF サービスの一部であるいくつかの Datamembers を持つ Product Datacontract を持っています。また、DataContractSerializer を使用して、この Product Datacontract をシリアル化し、アプリに保存します。

ここで、サービス メタデータ (WSDL) が生成されたときに、Product Datacontract の Datamembers の一部を削除したいと考えています。ただし、アプリ内でオブジェクトをシリアル化するときに、Product Datacontract のすべての Datamembers を使用できるようにしたいと考えています。

実際、私がやりたいことはこれです: WSDL 生成プロセスをつかみ、生成された WSDL に注入される必要な Datamembers を削除します。

ありがとうモフォロ

0 投票する
1 に答える
1249 参照

.net - WCF 拡張機能の実行順序

同じ種類の WCF 拡張モジュール (パラメーター インスペクターなど) がほとんどない場合、それらが構成ファイルで定義した順序で実行されることを確認できますか?

私の観察だけでなく、より多くの保証が必要ですが、MSDN で確認を見つけることができません。

0 投票する
2 に答える
540 参照

wcf - IsOneWay = true の場合、WCF サービス コードは呼び出されませんでした。

私はメッセージバスを介してWCFトランスポートを拡張しています.request-replyモードはうまく機能します。入出力モードを実装しているときに問題が発生しました。状況は次のとおりです。

1、InputChannel と OutputChannel を作成し、TransportBindingElement がそれらを返すようにしました。

2、2 つのメソッドを持つコントラクト インターフェイスを作成しました。IsOneWay = true という属性があり、それが Method1 だとしましょう。もう 1 つは Method2 という名前ではありませんでした。

3. Method1 を呼び出すと、InputChannel と OutputChannel ではなく、RequestChannel と ReplyChannel が返されたことがわかります。また、応答チャネルは WCF メッセージを受信し、RequestContext を返すことができます。しかし、サービス コードは呼び出されませんでした。

4, Method1 で IsOneWay = false を設定すると、うまく機能します。

4, Method2 を呼び出すと、うまく動作します。

5、IsOneWay = true のメソッドが 1 つしかない別のサービス コントラクトを作成しました。このメソッドを呼び出すと、WCF は InputChannel と OutputChannel を提供し、うまく機能します (サービス コードが実行されました)。

私の質問は次のとおりです。1、 IsOneWay = true メソッドと IsOneWay = false メソッドを使用するサービスがある場合、WCF は要求応答チャネルを提供しますが、それは正しいですか?

2. メソッドは IsOneWay = true でしたが、同じサービス コントラクトに IsOneWay = false メソッドも含まれているサービス呼び出しを処理するにはどうすればよいですか?

ところで、IsOneWay = true メソッドへのリクエスト メッセージでは、MessageID が NULL であることに気付きました。リクエスト メッセージに新しい ID を設定しましたが、うまくいきませんでした。サービス コードはまだ呼び出されていません。

0 投票する
3 に答える
1133 参照

.net - 各メソッドのログを記録してアクションを実行するための WCF 拡張機能。IErrorHandler にはメソッドの概念がありませんか?

私はいくつかの方法で通常のWCFサービスを持っています。

メソッドの最初と最後にいくつかの情報をログに記録し、いくつかのアクションを実行したいと思います。

実装IParameterInspectorすることで、多くのロギングを簡単に行うことができます。メソッドBeforeCallAfterCall私が必要とするほとんどすべてを提供してくれます。

ただし、例外には機能しません。があり、例外IErrorHandlerが発生した場合に何らかの処理を実行できます。欠点は、どのメソッドからスローされたかわからないことです。すべては、操作自体ではなく、サービスの動作に関連付けられているためです。IErrorHandler

ただし、以下のコードを使用してメソッド名を取得できます。

これは私にとって良い考えのようには見えません。

質問: 皆さん、私の目標を達成するために使用できる WCF 拡張機能は他にありますか? 古い相棒の try-catch を使用することをお勧めしますか?それを適切な構文にラップして、最初と最後にアクションを実行できるようにしますか? 構文はどうなりますか?同様の目的で何を使用しますか?

ありがとうございます。

0 投票する
2 に答える
14957 参照

c# - WCF エラー: 拡張機能を読み込めませんでした

プロジェクトでオーバーライドするクラスを定義し、IDispatchMessageInspector関連する構成を追加しましたが、機能しません

System.Configuration.ConfigurationErrorsException: 拡張機能 'customHeaders' に登録されたタイプ 'InMotionGIT_NT.Address.Service, CustomHeaders, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' を読み込めませんでした。(C:\Users\jmachado\Documents\Visual Studio 2010\Projects\InMotionGIT_NT\Address Service\InMotionGIT_NT.Address.Service\bin\Debug\InMotionGIT_NT.Address.Service.dll.config 行 67)

これが私のカスタム拡張機能の呼び出し方です

これが私のカスタム拡張機能の定義方法です

これが私が定義したクラスです。それは私のプロジェクトの中にあります

構成に何か欠けていますか?

0 投票する
1 に答える
56 参照

.net - 特定のクライアント バージョンへのサービス アクセスを許可する

以下のようなシナリオのアーキテクチャのアイデアを探しています。

環境: いくつかの機能を実行するサービス (Windows サービスでホストされている wcf) があります。このサービスにアクセスするための API を提供し、他のクライアント機能も備えたクライアント ライブラリ (.NET Windows DLL) を提供しています。

問題: ビジネス上の理由から、特定のバージョンのクライアントのみが特定の機能にアクセス (特定の API にアクセス) できるようにし、他のバージョンのクライアントにはアクセスを許可しないサービスのメカニズムを探す必要があります。基本的には、1 つの特定のクライアント バージョンからのすべての要求を信頼し、他のバージョンのクライアントを介した基本的な操作のみをサポートするようにサービスを教育することを検討しています。

注:特定のバージョンのソフトウェア クライアントのアクセスを許可または拒否するだけで、ユーザーとはまったく関係がないため、これにユーザー許可またはユーザー セキュリティ コンテキストを追加することはできません。

例:バージョン X クライアントから、すべての READ および SAVE 機能を許可する必要があります。しかし、他のバージョンからは、すべての読み取りのみを許可でき、保存は許可できません。

考えられる解決策: これまでのところ、バージョン番号を含む構成をクライアントに追加し、それをクライアントからのすべてのサービス要求に渡すことを考えてきました。サービスは、DB または Web 構成から完全に信頼するバージョンを知ることができます。このサービスでは、チャネルをインターセプトして、クライアント メッセージからこの特定の文字列があるかどうかを確認できるため、特定の API へのアクセスをサポートまたは拒否できます。

このシナリオに対するその他の洗練された解決策、または関連することを行った人がいる場合は、それも役立ちます。

ありがとう

0 投票する
0 に答える
103 参照

c# - wcf 拡張ポイントの各レベルで同じ要求を識別するにはどうすればよいですか?

主な目的: wcf 拡張ポイントの各レベルで計算された情報を相互に関連付けたいと考えています。

私のアプローチ:そのためには、拡張ポイントの各レベルで同じ要求を識別し、同じ要求に関連する情報をマージする必要があります。

質問: 異なる拡張ポイント間で同じ要求を識別する方法はありますか?

手伝ってくれてありがとう

0 投票する
2 に答える
1580 参照

.net - WCF IParameterInspector + IErrorHandler

両方がIParameterInspectorありIErrorHandler、サービスに接続されている場合IErrorHandler.HandleError()、呼び出された同じスレッドで呼び出されることを確認できIParameterInspector.BeforeCall()ますか?

これが必要なのは、スローされた障害IParameterInspector.AfterCall()が呼び出されず、(私の知る限り) で作成された相関状態オブジェクトを取得する方法がないためBeforeCall()です。したがって、インターフェイスの実装にフィールドを含めることで、これを克服したいと考えてThreadStaticいます:(

0 投票する
1 に答える
703 参照

c# - WCF:「キャンセル」操作要求メッセージ契約に依存する呼び出し

これが私の契約です:

OperationRequest1とOperationRequest2はどちらもBaseOperationRequestから継承します。これは、サービスに着信するすべての要求の資格情報を保持します。

OperationResponse1とOperationResponse2はどちらも基本クラスから継承します。

ErrorCodeは列挙型です。

リクエストでわかるように、2つのメッセージヘッダーと、SOAPメッセージの一部として逆シリアル化されない1つの内部オブジェクトがあります。これは、サービス実装で処理されるに、このオブジェクトをリクエストに挿入したいためです。すべての単一の操作の実装はこのオブジェクトを使用します。各操作でデータレイヤーを2回呼び出す必要はありません。

(属性を介して)WCF拡張性を使用して、次の2つのタスクを実行したいと思います。

  1. 要求しているユーザーを認証します。
  2. すべての操作で使用するために、着信要求クラスの「User」に複合/複合ビジネス・オブジェクトを移入します。

IOperationInvoker、IDispatchMessageFormatter、およびIDispatchMessageInspectorを調査しましたが、これらのいずれも十分に適しているとは言えません。

参考までに、これが私のサービスの基本的な実装例であり、WCFの拡張性(またはリポジトリ/データレイヤーの呼び出し)はありません。

IOperationInvokerが最も適切な拡張ポイントのようですが、操作を「キャンセル」してクライアントへの応答をオーバーライドする方法を完全に理解することはできません。これが私が到達した場所です: