問題タブ [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.
.net - カスタム WCF 動作拡張要素の型が見つからないのはなぜですか?
2 つのプロジェクトを含むソリューションがあります。1 つのプロジェクトは ASP.NET Web アプリケーション プロジェクトで、もう 1 つはクラス ライブラリです。Web アプリケーションには、クラス ライブラリへのプロジェクト参照があります。これらはどちらも厳密な名前ではありません。
「フレームワーク」と呼ぶクラス ライブラリには、エンドポイント動作 (IEndpointBehavior の実装) と構成要素 (BehaviorExtensionsElement から派生したクラス) があります。構成要素は、構成を介してエンドポイントの動作をサービスにアタッチできるようにするためのものです。
Web アプリケーションには、AJAX 対応の WCF サービスがあります。web.config では、カスタム動作を使用するように AJAX サービスを構成しています。構成の system.serviceModel セクションは非常に標準的で、次のようになります。
実行時には、これは完全に機能します。AJAX 対応の WCF サービスは、カスタム構成されたエンドポイントの動作を正しく使用します。
問題は、新しい AJAX WCF サービスを追加しようとしたときです。[追加] -> [新しい項目...] を選択して [AJAX 対応の WCF サービス] を選択すると、.svc ファイルと分離コードが追加されるのを見ることができますが、web.config ファイルを更新しようとすると、次のエラーが発生します。
構成ファイルは、WCF サービス ライブラリの有効な構成ファイルではありません。
拡張機能「customEndpointBehavior」に登録されたタイプ「Framework.MyBehaviorExtensionsElement、Framework、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null」をロードできませんでした。
明らかに、構成は実行時に完全に機能するため、完全に有効です。動作構成から要素を一時的に削除してから、AJAX 対応の WCF サービスを追加すると、すべて問題なく実行されます。
残念ながら、さまざまな構成の複数のサービスが存在する大規模なプロジェクトでは、すべてのカスタム動作を一時的に削除するとエラーが発生しやすくなります。ウィザードを使用せずにすべてを手動で行うことができることはわかっていますが、誰もができるわけではありません。ウィザードとすべてを使用することを意図したとおりに製品を使用できると便利です.
カスタム WCF 動作拡張要素の型が見つからないのはなぜですか?
更新/説明:
- 設計時ではなく、実行時に機能します。
- サービスを追加しようとすると、Framework アセンブリが Web プロジェクトの bin フォルダーにあります。
- サービスを手動で (「構成なしで」) 追加することはできますが、すぐに使用できる項目テンプレートが機能する必要があります。それが質問の全体的な目標です。
- この問題は、Visual Studio 2008 で見られます。VS 2010 では、これは解決されているようです。
この問題を Microsoft Connect に提出したところ、カスタム構成要素を GAC に配置するか、IDE フォルダーに配置する必要があることがわかりました。少なくとも今のところ、彼らはそれを修正しません。この質問に対する「回答」として提供された回避策を投稿しました。
wcf - WCF操作からのClientCredentialsの取得
Webサービスで操作を呼び出す各クライアントがデータベースに対応するユーザー名とパスワードを持っていることを確認したいので、WCFサービスはカスタムメッセージベースのセキュリティにカスタム資格情報検証ツールを使用します。
つまり、ユーザーが認証に合格したら、OperationContract実装でuserNameを使用して、コンテキストベースの呼び出しを行います。
呼び出し先の正直さを信頼して実際のuserNameを指定することはできないため、パスワードも渡さずに渡すことはできません。Webサービスへのすべての呼び出しでClientCredentialsを受け入れる必要がないようにしたかったのです。
ありがとう。
wcf - WCF ディスパッチ パイプライン メッセージ フローとは
私は、WCF のディスパッチ プロセス、特にさまざまな拡張ポイントへの影響と効果をよりよく理解しようとしています。下部にリストされている Web ページから、メッセージがチャネル スタックによってディスパッチャーに渡されると、WCF は次の順序で次の処理を実行するように見えます。
- メッセージインスペクター
- 操作セレクター
- メッセージのフォーマット
- パラメーター インスペクター
- オペレーション・インボーカー。
私が抱えている問題を解決するためのいくつかのオプションを見つけようとしています。私が考えている 1 つの方法は、Message Inspector、Operation Selector、Message Formatting、および Operation Invoker を組み合わせて使用することです。残念ながら、私の観察では、実行の順序は次のようになっているようです。
- 操作セレクター
- メッセージインスペクター
- 操作呼び出し元 (AllocateInputs())
- メッセージのフォーマット
- パラメーター インスペクター
- 操作呼び出し元 (Invoke())
Message Formatting セクションでは、特定のメッセージを一連のメソッド引数にデシリアライズして、適切な操作と呼び出し元の AllocateInputs( ) メソッドは、予想されるパラメーターの数を指定します。
私をスローする部分は、Message Inspector と Operation Selector の間のシーケンスの反転です。操作セレクターがメッセージの対象となるサービス操作を決定するのに対し、メッセージ インスペクターがメッセージに作用するときに最初に実行されるのは理にかなっているように思えます。
質問:
- これは、WCF のバージョンまたはリリースが異なるためですか?
- これは、WCF が拡張ポイントの実行順序を実際に指定していないためでしょうか。
参照ページ:
カスタム データ形式をサポートするための WCFの拡張- Zulfiqar のウェブログ
カスタム動作による WCFの拡張- MSDN サービス ステーション 2007 年 12 月
メッセージ フロー インターセプト ポイント- Nicholas Allen の Indigo ブログ
注: リンクを提供していないことをお詫びします。私はまだ初心者なので、リンクを複数持つことはできません。=)
wcf - WCF:メッセージフレーミングとカスタムチャネル
WCFを使用してメッセージフレーミングを実装する方法を理解しようとしています。目標は、Tcpを介して独自の形式を処理できるサーバーをWCFで作成することです。net.TcpバインディングはSOAP専用であるため、使用できません。
次の形式のメッセージを受信するカスタムチャネルを作成する必要があります。メッセージの例は「5abcde」です。特に、カスタムチャネルでフレーミングを行う方法がわかりません。
ここにいくつかのサンプルコードがあります
}
したがって、基本的に、EndTryReceiveを初めて使用すると、保留中の読み取りバッファ「5ab」からメッセージの一部を取得できます。次に、2回目は、残りのメッセージを取得できます。問題は、EndTryReceiveが最初に呼び出されたときに、Messageオブジェクトを作成することを余儀なくされることです。これは、チャネルスタックを上る部分的なMessageがあることを意味します。
私が本当にやりたいのは、バッファに完全なメッセージ「5 abcde」があることを確認することです。これにより、EndTryReceiveでメッセージを作成すると、完全なメッセージになります。
WCFでカスタムフレーミングを行っている例はありますか?
ありがとう、Vadim
.net - 拡張機能 '[extensionHere]' に登録されているタイプ [nameHere] をロードできませんでした
fx3.5 で WCF を使用して JSONP Web サービスを学習および構築してきました。.NET ASMX - Returning Pure JSON?で行った試行の一部を読むことができます。ようやくサンプルを実行できるようになりましたが、今はそれを自分のアプリに組み込んでいます。
- RivWorks.Web - Web サイト - http://dev.example.comにあります。
- RivWorks.Web.Service - 新しい JSONP サービス - http://dev.example.com/services/にあります -サービスの web.config はここにあります。
サービスの web.config:
次のエラーが表示されます。修正するために考えられるすべてのことを試しました。コード全体にいくつかのタイプミス (Service ではなく Service) が散らばっていることを発見しました。MSDNにあるサンプル コードを使用しています。エラーは次のとおりです。
他に何をチェックできるかについて誰かアイデアがありますか? RivWorks.Web.Service.dll という DLL があり、ビルドされ、Web サイトの bin ディレクトリにコピーされます。サービスの Web.config は、Web サイトの Services ディレクトリにコピーされています。Web サイトの web.config に競合するものはありません。すべてのスペルの問題を確認しました。
wcf - 要素 'behavior' には、wcf app.config 内の無効な子要素 'myFaultExtension' があります
Silverlight クライアント アプリケーションで WCF サービスからの通常の例外をキャッチしようとしています。そのために、この MSDN 記事 に示されているように、WCF サービスにそれぞれの変更を含めました。
しかし、動作拡張を構成してエンドポイント動作で同じものを使用すると、上記のエラーが発生し、このエラーが原因でサービスを実行できません。
ここに私の構成を入れています。どうすればこれを解決できますか?
c# - IDispatchMessageInspector: BeforeSendReply 機能の改善
私の WCF プロジェクトでは、応答でカスタム ヘッダーを使用する必要があるため、IDispatchMessageInspector を実装しました。正直なところ、すべて問題なく動作しますが、ちょっと気になる点が 1 つあります。
問題は、.svc をページとして開いたり、サービスを WCF テスト クライアントにロードしたりしても、BeforeSendReply と AfterReceiveRequest の両方が起動することです。
では、最初の質問: その行動は正常ですか? それを宣言的に処理する方法はありますか (おそらく web.config のトリック)?
現在、次のコードを使用しています:
だから今、私はそれを使ってサービス呼び出しではないすべての呼び出しを処理します:
しかし、その問題を処理するための他のより良い方法があると確信しています。だから私の主な質問:説明された状況を処理するためのより良い方法を提案してください。
前もって感謝します!
更新 1
私の system.serviceModel セクション
更新 2 (
受け入れられた解決策) 問題の原因を調査するのに時間を費やしましたが、最終的に解決策として受け入れられることがわかりました。
だから私が見つけたもの:
まず第一にMessage
、抽象クラスです。そのBeforeSendReply
ため、毎回さまざまな種類の具体的なメッセージを受け取ります。
1) - クライアントが svc をページとして開くことを意味します
。結果 = svc サービスに関する一般的な情報を含む、よく知られている HTML 形式のページ。このタイプは.
2) メタデータ リクエストを取得します。これは少しトリッキーな部分で、MEX を使用するかどうかによって異なります。したがって、MEX を使用すると、リクエストは .svc/mex エンドポイントに対して実行され、そのメッセージ タイプはと等しくなります。System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.MetadataOnHelpPageMessage
reply.Version.Envelope
EnvelopeVersion.None
System.ServiceModel.Dispatcher.OperationFormatter.OperationFormatterMessage
reply.Version.Envelope
EnvelopeVersion.Soap12
MEX を使用しない場合、クライアントは wsdl データを取得するためのリクエストをほとんど実行しません。メッセージの種類は になりますXMLSchemaMessage
。
3) Web メソッドリクエストを実行します。これは、私のタイプのリクエストにのみ役立ちます。でありSystem.ServiceModel.Dispatcher.OperationFormatter.OperationFormatterMessage
、reply.Version.Envelope
等しいEnvelopeVersion.Soap11
です。
私はbasicHttpBindingを使っているので、SOAPのバージョンは1.1です。したがって、私の最終的なコードは、返信に SOAP エンベロープが含まれていることを確認し、そのバージョンを確認するだけです。エンベロープが存在し、バージョンが 1.1 の場合、Web メソッド呼び出しがあり、カスタム ヘッダーが追加されている可能性があります。
wcf - null参照例外をスローするWCFサービス動作拡張
だから、私はルーティングサービスを書こうとしています。アイデアは、誰かがルーティング サービスを呼び出すたびに、エンドポイントが WCF 動作拡張によってランダムに選択されるというものです。それを実現するために、 DynamicReconfigurationと呼ばれる MSDN の例を少し変更して使用しました。私のweb.configの一部は次のようになります
動作と動作拡張の実装
問題は、UpdateRulesメソッドの最後の行がNullReferenceExceptionをスローしていることです。動作に添付しても、この拡張機能が見つかりません。MSDN の例では、ルーティング サービスはコンソール アプリケーションでホストされており、ここでは IIS でホストしようとしています。ここで何かが足りない...
.net - クライアントや他のサービスからのリクエストを区別する
3層のアプリケーションがあります-winformベースのシッククライアント、WindowsサービスとSQLでホストされるいくつかのWCFサービス。一部のWCFサービスは、クライアントのUIに固有の機能を提供しますが、データの読み込み、処理、キャッシュなどを実行するサービスがあります。したがって、これらのサービスはすべて相互に通信し、クライアントからの要求も処理します。
次に、実際の質問があります。要求がクライアントからのものか、別のサービスからのものかを理解する方法はありますか。私がメッセージインスペクターを書いていると仮定すると、要求がクライアント(ユーザー)または別のサービスから来ている場合、どういうわけか解釈できますか?
私が達成しようとしていること-これは、必要に応じて別のスレッドにあります。wcfサービスへのユーザー要求を停止します。ただし、簡単に言うと、サービスをユーザーアクセスからロックしたままにしようとしていますが、サービスは引き続き実行され、他のサービスとの間でアクセスできる必要があります。
wcf - IOperationInvoker 実装で MethodInfo にアクセスする
WCF 呼び出しをカスタマイズするために IOperationInvoker を実装しました。Invoke メソッドでは、OperationInvoker によって呼び出されるメソッドのカスタム属性にアクセスしたいと考えています。次のコードを書きました。ただし、そのメソッドで指定されているカスタム属性は提供していません。