問題タブ [instancecontextmode]
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 InstanceContextMode
Webアプリケーションがプロキシを使用して、AS400からデータを返すWCFサービスの操作を呼び出しています。たとえば、会社に関連付けられているさまざまな販売地域、現場にあるさまざまな店舗などです。これらの販売地域と店舗頻繁に変更しないでください。店舗は年に2回しか追加されず、地域は2、3年同じです。
私の混乱はInstanceContextModeにあると思います。プロキシクライアントがGetRegions()またはGetStoresForRegion(int regionNumber)を呼び出すと、「Regions」と「Stores」のリストが返されます。
InstanceContextModeをsingleに設定し、サービス操作呼び出しの前にリージョンとストアを初期化してデータを設定した場合、これは何らかの形で役立ちますか?基本的に今のところ、すべての呼び出しでDBルックアップを実行しているので、必要はないと思います。
したがって、ユーザーはWebアプリにログオンします->Webアプリページ->リージョンのドロップダウンをロードする必要があります->Web開発者はリージョンを取得するためにプロキシを呼び出します...しかし、これはすべてのユーザーがWebアプリを使用するときに発生するため、基本的に毎回ユーザーがWebアプリにアクセスすると、プロキシがDBを呼び出します。これは愚かであり、サービスオペレーションの設定方法に誤りがあると思いますか、それとも何かを完全に誤解しましたか?
更新-サービスはIISでホストされているため、この質問全体は議論の余地があるかもしれません
.net - InstanceContextMode.Single WCFサービスが複数のエンドポイントを公開する場合、インスタンスはいくつ存在しますか?
エンドポイントの数に関係なく、設定は単一のインスタンスをServiceBehavior
設定しますか?InstanceContextMode.Single
linq-to-sql - DataContextFactory を使用して WCF サービスで Linq to SQL Datacontext を管理する
ASP.Net アプリケーションによって消費されるデータ層で、Rick Strahl の DataContextFactory コード ( Linq to SQL DataContext Lifetime Management ) を使用してきました。現在の datacontext が HttpContext.Items コレクションに格納されているため、うまく機能します。Web リクエストごとに同じデータ コンテキストを再利用していることはわかっています。
ただし、WCF サービスでファクトリを正常に使用できませんでした。非 HttpContext アプリでは、ファクトリは datacontext をスレッド データ スロットに格納します。
問題は、サービスで ConcurrencyMode と InstanceContextMode をどのように設定しても、呼び出しごとにスレッドが再利用され、同じ dataContext が再利用されることです。私はこれをしたくありません。サービスメソッド呼び出しごとに単一のデータコンテキストのみが存在するようにします。ファクトリを使用してこれを実現する方法はありますか? データコンテキストの識別子として使用する各クライアント呼び出しに関する一意の情報を見つけることができないため、同じクライアントであるかどうかに関係なく、他の要求で再利用されません。
ビジネス レイヤーを使用し、データ レイヤーに直接アクセスしたくないのですが、WCF サービスで独自の作業単位とデータ コンテキストを指定する必要があるのではないかと心配しています。WCF サービスのデータコンテキストにある種のファクトリを使用して運が良かった人はいますか? 工場がWCFサービスによって消費されているかどうかを知り、データコンテキストの保存を一意に処理する方法があることを望んでいました
そして、私が望むものを達成するためにここで何ができるでしょうか?
wcf - web.confg での WCF InstanceContextMode (呼び出しごと、単一) の設定
かなりのグーグルでこれに出くわしていません。
クラス名を次のように装飾することでインスタンスを設定できることはわかっています。
しかし、これをweb.config
ファイルで指定できますか?
web.config
/でスロットリング (最大同時ユーザー数など) を指定できること、app.config
およびここでの数値にはインスタンス モードに応じたコンテキストがあることはわかっていますが、モードを指定する方法 (ほとんどの場合、app.config
/の動作セクションweb.config
)?
当初は、Windows サービスを使用する予定でした。現在は WAS を使用しています。WASは何か違いがありますか?各「呼び出しごと」のリクエストは、パイプライン操作として独自の「サーバー」を取得しますか?
ありがとう
wcf - ワークフロー4サービスアプリケーションとInstanceContextMode&ConcurrencyMode
質問は非常に単純です。WF4WCFワークフローサービスアプリケーションでInstanceContextModeとConcurrencyModeをどのように設定しますか?
wcf - PerCall インスタンス コンテキストで実行するように WCF サービスを構成するにはどうすればよいですか?
背景情報はこちら。私はそのように構成されたWCFサービスを持っています
ここで、このコンテキスト モードがどのように機能するかを正確に理解するための助けが必要です。
これが私が扱っている問題です。議論のために、実行してサーバーから戻るのに 10 秒かかる呼び出しがあるとします。(Ajax リクエストを使用して) 2 つの呼び出しを同時に行うと、最初のリクエストは 10 秒後に返されます。しかし、2 番目のリクエストは 20 秒後に返されます。
私は、このコンテキスト モードが両方の要求を互いに独立して処理し、両方を同時に返すことを期待していました。サービスを適切に構成しましたか?
wcf - WCF での AppDomain の有効期間はどれくらいですか?
WCF での AppDomain の有効期間はどれくらいですか?
InstanceContextMode、ConcurrencyMode、および/または AspNetCompatibilityRequirements RequirementsMode に関連していますか?
静的変数がどれくらいの期間存続し、どのくらいの頻度で再作成する必要があるかを知りたいと思っています。
json - WCF wsHttpBinding、webHttpBinding、RESTのInstanceContextMode.Single
私は最近、JSON形式の結果を返す比較的単純なWCFRESTサービスの開発を開始しました。最初はすべてがうまく機能し、サービスはすぐに稼働しました。
このサービスの主な機能は、データベースから抽出された大量のデータを返すことです。このデータはめったに変更されないので、処理を高速化するためにキャッシュメカニズムを設定してみることにしました。これを行うために、InstanceContextMode.SingleとConcurrencyMode.Multipleを設定し、いくつかのスレッドロックを使用して、静的にキャッシュされた結果を安全に返すことを計画しました。5分ごと、またはIISがすべてをクリアすることを決定したときはいつでも、データはデータベースから再フェッチされます。
私の問題はInstanceContextMode.Singleが期待どおりに動作しないことです。私の理解では、WCFサービスクラスの単一のインスタンスを作成して維持する必要があります。ただし、私が持っている動作は、呼び出しごとに作成されるクラスの完全に新しいインスタンスです。これには、すべての静的変数の再初期化が含まれます。
WebサービスをwebHttpBinding(RESTに使用)からwsHttpBindingに変更し、サービスをSOAP構成として使用しようとしましたが、これはまったく同じ動作になります。
私は何が間違っているのですか!!! これを理解しようとしてあまりにも長い時間を費やしてきました。
どんな助けでも素晴らしいでしょう!
wcf - セッションごとのWCFインスタンス化モードが期待どおりに機能しない
データのセットを生成し、クライアントがそれらを作成し、それらをナビゲートし、それらからデータを取得できるようにする WCF アプリケーションを作成しています。データは、サービス クラスの静的変数に格納されます。特に、GUID 文字列をキーとして使用して、辞書に格納されます。
サービス クラスのインスタンス化モードを PerSession に設定していますが、これは私の知る限りうまくいくはずです。クライアントは CreateRecordSet という関数を呼び出します。この関数はエントリを辞書に追加し、キー文字列を返します。次に、クライアントは First() という関数を呼び出します。この関数は、データ セットの最初のレコードを取得する必要があります。ただし、これを試みると、ディクショナリにはエントリが含まれなくなります。
不思議なことに、インスタンス化モードを Single に設定すると、問題なく動作します。しかし、PerSession に設定すると、2 つの呼び出しの間で辞書が失われるように見えます。これは、PerCall に設定した場合に予想されることです。
インターフェイス定義は次のとおりです。
サービスクラスのコードは次のとおりです。
クライアントコードは次のとおりです。
ご覧のとおり、ディクショナリのステータスを表示するために、ホストのコンソールにいくつかのデバッグ メッセージを追加します。ホストの出力は次のとおりです。
そしてもちろん、RecordSets[setkey] を参照しようとすると、First() の次のコード行で例外が発生します。これは、RecordSets が空であるためです。
動作を次のように変更した場合:
...その後、期待どおりに動作します。ホスト出力は次のようになります。
...そして、クライアントはエラーなしで期待どおりに顧客名を出力します。
それで、私は何が欠けていますか?私の理解では、サーバーの InstanceContextMode が PerSession に設定されている場合、両方の呼び出しに同じ ServiceReference (MyService) を使用している限り、サーバー上で同じ静的変数を共有する必要があります。私は間違っていますか?
-ジョー
wcf - InstanceContextMode.Single サービスがクローズ時にシングルトンを破棄するのはなぜですか?
InstanceContextMode.Single として装飾された WCF (4.0) サービスがあり、サービスを実装するクラスはシングルトン パターンに従います。
まず、Instance 属性を使用して、サービス実装のシングルトン インスタンスを作成します。次に、 typeof() 引数でコンストラクターを使用するのではなく、この単一のインスタンスを ServiceHost のコンストラクターに渡します。
サービスで Open() を実行でき、次に Close() を実行でき、すべて問題ありません。しかし、明らかに Close() では、同じ ServiceHost で Open() を再試行すると ObjectDisposedException がスローされるため、どうにかしてシングルトン (???) を破棄します。
私のサービスは、Windows フォーム アプリケーションで NetTcpBInding を使用してホストされています。