問題タブ [netnamedpipebinding]
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 - NetNamedPipeBinding がガベージ コレクションされない WCF 動的プロキシ
私の質問に対する適切な回答が数時間で見つからなかったので、ここに投稿します。
共有インターフェイス (IService) ライブラリと動的に作成されたプロキシ (CreateChannel で作成) を備えた WPF/WCF アプリケーションがあります。主な問題は、プロキシが閉じられていない/破棄されていないことであり、200 回目のサービス呼び出しでこの例外が発生しています。
システムは、スロットル 'MaxConcurrentSessions' に設定された制限に達しました。このスロットルの制限は 200 に設定されました。スロットル値は、serviceThrottle 要素の属性「maxConcurrentSessions」を変更するか、動作 ServiceThrottlingBehavior の「MaxConcurrentSessions」プロパティを変更することで変更できます。
興味深いことに、同じプロキシが BasicHttpBinding で正常に動作します!
NetNamedPipeBinding プロキシが閉じられず、自動的に破棄されないようです。クライアント側のコード スニペットを次に示します。
プロキシは IDisposable を実装していないため、"using" ステートメントを使用していないことがわかります。最初の質問は、どうすればよいかということです。クライアント側では、IService をプロキシ タイプとして使用しています。IService を IDisposable にしたい場合は、サービスが IService を実装しているため、サービス側で dispose メソッドを実装する必要があります。それは論理的ではないようです-サービスメソッドを呼び出してそのサービスを破棄する...
サービス呼び出しのすべてのコードを「使用中」に変更しない方がよいため、使用されなくなったときにプロキシを自動的に破棄する方法はありますか? それが自動的に行われないのはなぜですか?カスタム IExtensionBehavior を使用していることに注意してください - それが理由でしょうか?
どんな助けでも大歓迎です。ありがとうございました!
c# - NamedPipe を介して例外とサブクラスを渡す
NamedPipe を介して、タイプ Exception (またはそのサブクラスの 1 つ) のオブジェクトを渡そうとしています。
サービス契約:
次のように使用すると正常に動作します。
しかし、サブクラスを渡すとすぐに:
逆シリアル化に失敗したという例外が発生します。
KnownTypes 属性については既に読みましたが、自分で実装していないクラスに使用する方法がわかりません。
誰かがここでヒントをくれますか?
c# - WCF サービス タイムアウトの原因を診断するにはどうすればよいですか?
を使用して C# プログラムと通信する C# Windows サービスを作成していNetNamedPipeBinding
ます。サービスは次のように機能します。
- ユーザーは、サービスで「実行」コマンドを呼び出します。
- サービスは、データベース クエリを実行するスレッドを起動します。
- ユーザーがサービスで「GetStatus」を呼び出します (1 秒に 1 回程度)。
残念ながら、GetStatus は頻繁にタイムアウトします。これらのタイムアウトは、サービスの実行中に途中で発生します。これらのタイムアウトは、手順 2 のスレッドの実行が終了した後も続きます。5 ~ 10 分後、GetStatus の呼び出しがタイムアウトしなくなります。
これらのタイムアウトの原因を診断するにはどうすればよいですか?
私が試したこと:
- に追加
ServiceBehavior(UseSynchronizationContext = false)
しDataSenderService
ます。 - に追加
ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)
しDataSenderService
ます。 - デバッガーをサービスにアタッチします (タイムアウトの間、
GetStatus
呼び出しは入力されません)。 - タイムアウト中に
ServiceHost.State
が に設定されていることを確認します。CommunicationState.Opened
コード スニペットと例外データ:
-
-
-
c# - NetNamedPipe のセキュリティを正しく設定するには?
プロセス間通信用の NetNamedPipe を使用した WCF サービスがあり、それにセキュリティを追加したいと考えています。すべてがセキュリティなしでうまく機能しますが、トランスポート セキュリティを使用しようとすると、「InvalidCredentialException: サーバーがクライアントの資格情報を拒否しました」という例外が発生します。手伝ってくれませんか?
コードサンプル:
...
...
ありがとうございました
wcf - ASPX で実行されている WCF クライアントが、同じマシン上の別のサイトにある net.pipe 経由で SVC を呼び出すことは可能ですか?
私は 2 つの Web サイトを持っています。1 つは aspx ファイル、もう 1 つは 2 つのエンドポイントを持つ wcf サービス、もう 1 つは http ともう 1 つは名前付きパイプです。どちらも同じマシンで実行されるため、net.pipe バインディングを使用する候補のように見えました。
aspx ファイルはサービス クライアントを作成し、net.pipe の呼び出しを試みます。そして、私はこれを取得します:
「'/dev' アプリケーションでサーバー エラーが発生しました。エンドポイント アドレス 'net.pipe://localhost/netNamedPipeBinding' のサービスがアドレスのプロトコルで利用できないため、メッセージをディスパッチできませんでした。」
グーグルは、これがセキュリティ上の問題である可能性があることを示唆しています (権限エラーがないことは、リスナーエラーがないことと同じです)。
aspx を含むサイトはフォーム認証 (Windows 認証ではない) を使用しており、サービス Web サイトは匿名認証です。web.config の net.pipe セキュリティは ="None" に設定されています
ローカルでは、これは問題なく動作しますが、Visual Studio Dev Server は名前付きパイプを実行できないため、コンソール アプリで名前付きパイプ ホストを実行する必要があります。また、HTTP エンドポイントは IIS で正常に動作します。
.NET 4.0、IIS 7.5、Win2008 を実行しています。
IIS Config 私が知る限り、
- サービス Web サイトで net.pipe が有効になっており、構成情報は * です。
- WAS がインストールされ、有効になっている (Windows 機能経由)
- net.pipe リスナー Windows サービスが有効になっています。
- 各 Web サイトは匿名アクセスです (認証はサードパーティのシングル サインオン サーバーによって行われます)。
- 各 Web サイトには独自のアプリ プールがあります (おそらく関係ありません)。
- サービス サイトは Web ガーデン モードです (おそらく関係ありません)
Service Config (同じマシンの IIS で実行、異なる VDIR)
クライアント構成(ASP.NET Web サイト、同じマシン、サービスとは異なる VDIR)
(罪のない人を守るためにサービスと契約の名前が変更されました)
C# は特別なものではなく、Add-Service-Reference によって生成されたプロキシです。(そして、すべてのコードは wsHttp バインディングで正常に動作します
wpf - Citrix 環境での NetNamedPipeBinding
私の WPF アプリケーションは、スタンドアロン マシンで正常に動作しています。ただし、Citrix 環境にインストールして実行しようとすると、共有オブジェクトの問題が発生しました。
たとえば、user1 が Citrix サーバーにログインし、アクセスしてアプリケーションの新しいインスタンス**(彼のインスタンス)** を開始した場合、すべて問題ありません。しかし、user2 が自分のマシンにログインしてアプリケーションの新しいインスタンスを呼び出すと、user1 のデータを取得していました。
NetNamedPipeBinding のスコープがグローバルでマシン固有であることは知っていますが、この問題に対処する方法はありますか?
ありがとう。