問題タブ [operationcontext]
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 - HttpContext.Current.Request.RawUrlに相当するWCFは何ですか?
純粋な WCF コンテキストでいくつかの RESTful サービスを実行しています (つまり、ASP.NET 互換性が有効になっていないため、HttpContext.Current
使用できるオブジェクトがありません)。
サービスへの URL は、リクエストの開始時に を使用して書き換えられますIHttpModule
(その時点では があり、HttpContext
を使用して書き換えられます) 。これにより、URL から拡張子HttpContext.Current.RewritePath
などを取り除くことができます。.svc
ただし、WCF インフラストラクチャ内から要求された元の URL にアクセスする必要があります。またはクラスのどこかHttpContext.Current.Request.RawUrl
に同等のものはありますか?を使用すると、元の URL ではなく、書き換えられた URL が返されます。OperationContext
WebOperationContext
WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri
wcf - WCF 操作コンテキスト
私は WCF サービスを開発しています。エラーが発生した場合は、サービスで呼び出された元のメソッドから受信パラメーターをシリアル化したいと考えています。IErrorHandler を使用してすべての例外をキャッチしています。
私の最初の考えは、シリアル化されたパラメーターを OperationContext.IncomingMessageProperties に格納して、HandleError メソッドからアクセスできるようにすることでした。ただし、これは元のスレッドで実行されないため、OperationContext が null になると思われるため、ProvideFault メソッドからアクセスすることを検討しています。
これは実現可能だと思いますか?また、OneWay サービス コールで動作しますか?
wcf - WCF: OperationContext を使用して REST 要求と SOAP 要求を区別する
WCF セキュリティで、現在の OperationContext が与えられた場合、要求が SOAP 要求か REST 要求かを判断する最善の方法は何ですか?
wcf - WCF 4 REST サービスは StatusDescription を返すことができず、StatusCode のみを返すことができます
現在、WCF RESTful サービスを .NET 3.5 (スターター キット) から .NET 4 に移行しています。Visual Studio 2010 の WCF Rest サービス テンプレートを使用してプロジェクトを開始しました。 RequestInterceptor で行われます) ServiceAuthorizationManager を使用します。いくつかの作業と調査の後、私はそれを成し遂げました。しかし今、私は付随的な問題を抱えています。私のサービスは、HTTP ステータス コードと簡単な説明を使用して、処理エラーをクライアントにフィードバックしていました。サービスメソッドの多くのポイントで WebOperationContext を使用して、次のようにクライアントに問題を説明していました。
しかし、WCF 4 では、StatusCode のみが機能します - StatusDescription はサイレントに失敗します。理由がわかりません。私の唯一の推測は、この新しい WCF 4 シナリオでは WebOperationContext が機能しないということです。代わりに OperationContext を使用する必要がありますが、それも機能しません。次のメソッドは、ServiceAuthorizationManager を拡張するカスタム クラスで使用され、認証ダイジェストの形式が正しくないためにリクエストにアクセスできないことをクライアントに通知します。
ここで (WebOperationContext の代わりに) OperationContext を直接使用しても、StatusDescription は機能しません。
ここで何が欠けていますか?なぜこのような小さなことが .NET 3.5 から 4 に移行できるのでしょうか?
wcf - HttpContext を使用した WCF サービス
同じ asmx 拡張子を持つ wcf サービスに変換した Web サービスがありました。私のサービスはJava、perlなどのさまざまなクライアントと通信するため、basicHttpbindingがあります。
HttpContext.Current を含む検証がありました。しかし、これは wcf サービスでは機能しないことを知っています。RequestContext または OperationContext を使用しようとしていますが、使用できません。使ってみた
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
しかし、助けにはなりませんでした。テストのためにsoapUIからサービスを呼び出しています。
wcf - netPeerTCPBinding - OperationContext.Current.GetCallbackChannel はブロードキャストしますか?
互いに矛盾しているように見える 2 つの情報源を見つけました。
「サービスが呼び出しを受け取ると、OperationContext.Current.GetCallbackChannel はその呼び出し元だけにチャネルを返します。すべてのクライアントにブロードキャストするチャネルを返すわけではありません。」- 「OperationContext.Current.GetCallbackChannel」は実際に何をしますか?
「まず、メッシュに参加した後、新しく参加したノードは、共有状態レコードの一意のレコード識別子のリストを要求するワンホップ メッセージを送信します。1 ホップ離れたメッシュ内のすべてのノードがこのメッセージを受信します。これらのノードは、次に、コールバック コントラクトを使用してメッシュに直接返信します。」- http://msdn.microsoft.com/en-us/magazine/cc700336.aspx
さて、どちらが正しいでしょうか?また、ブロードキャストしている場合、ブロードキャストせずにメッシュ内の別のクライアントに直接応答するにはどうすればよいですか?
前もって感謝します、
ラース
wcf - WCF OperationContext を DI とテストでうまく機能させる
Windows サービスでホストされている WCF サービスを実行しています。WCF サービスの依存関係は Unity 経由で注入されますが、これはすべて良いことです。その結果、サービスの単体テストも簡単に作成できます。
最近、OperationContext を使用して着信メッセージを検査する機能をサービスに追加しました。残念なことに、Microsoft はシール クラスや静的クラスを好み、インターフェイスや仮想メソッドが不足しているため、サービスのテスト容易性はかなり損なわれています。
そこで私は、この状況で .NET のお気に入りのツールであるラッパー クラスに目を向けました。これは一般的な問題であるため、誰かがすでに私たちのために大変な作業を行っています。したがって、これにより、IOperationContext の実装である WCF サービスに新しい依存関係が追加されます。これは、単体テストでは問題ありませんでした。NSubstitute は、私が選択したモック フレームワークです (Moq のようですが、の呪いはありません.Object
)。
ただし、実際にサービスを起動しようとすると、次の問題があります。ラップされている OperationContext は、IoC コンテナーの登録が行われた時点で初期化されていません。私の初期化コード(ここでは Unity を使用)は次のとおりです。
しかし、この時点でOperationContext.Current
はnull
であるため、Unity はすぐに例外をスローし、40 歳になる前に引退するという私の夢は煙に包まれました。
問題は、WCF で DI とラップされた をうまく処理するにはどうすればよいかということOperationContext
です。
wcf - OperationContextを介してReaderQuotas設定を検査します
カスタムバインディング/readerQuotas設定を指定したWCFサービスがあります。ただし、サービスは引き続き次のメッセージで失敗します。
文字列コンテンツの最大長クォータ(...)を超えました」
ServiceHostFactory
サービスはカスタム(アクセス権がない)を介してインスタンス化されるため、readerQuotas設定が適用されない可能性があると思われます。
を使用してサービスの現在のreaderQuotas設定を検査する方法はありますOperationContext
か?
asp.net - WCFサービスで生の要求をログに記録する方法
いくつかの方法でWCFサービスを利用しています。送信方法に関係なく、クライアントからの生のリクエストをログに記録したいと思います。1つのメソッドは、データをクエリ文字列として受け入れます(厳密にはレガシーサポート用)。これを使用してログに記録できます。
そのシナリオではこれで十分ですが、他のメソッドを使用すると、クライアントはsvcutil.exeによって生成されたプロキシクラスを使用してデータをXMLとして送信できます。このシナリオでは、次のs:Bodyで必要なデータを見つけました。
残念ながら、何を試しても、メッセージを読み取る前に、バッファリングされたメッセージのコピーを作成することはできません。次に例を示します。
ただし、SendCustomerの最初の行で、次のエラーが発生します。
このメッセージは読み取られているため、操作をサポートできません。
これが私がバッファリングされたコピーを作成するポイントですよね?私はここで要素的に間違ったことをしていると思います。
編集:
さて、メソッドは次のようになりました。
私の問題は、CustomerとClientKeyを別々のエンティティとして送信する方法がわからないことです。clientKeyをCustomerのプロパティにすることもできます(または、データを渡すために特別に作成し、CustomerとClientKeyを属性として含むカスタムオブジェクトを作成することもできます)が、これはレガシーシステムのアップグレードであるため、可能であれば避けたいと思います。すでにこのように機能します。
また、svcUtil.exeを使用してプロキシクラスを作成するのに問題があります-上記のメソッドシグネチャがあると、サービスがリクエストを送信するための正しいシグネチャをアドバタイズしなくなると思いますか?それが十分に明確であるかどうかはわかりません-私の唯一の入力メソッドがMessageオブジェクトを受け入れる場合、クライアントはどのようにしてCustomerとClientKeyを送信することを知っていますか?