4

Web サイトで WCF 名前付きパイプを使用しようとしていますが、次のエラーで失敗します。

メッセージを受け入れることができる net.pipe://localhost/mypipename でリッスンしているエンドポイントはありませんでした。これは、多くの場合、アドレスまたは SOAP アクションが正しくないことが原因です。詳細については、InnerException (存在する場合) を参照してください。

および InnerException:

The pipe name could not be obtained for net.pipe://localhost/mypipename.

メッセージを与える別の内部例外がありaccess deniedます。

私の Web サイトはなりすましを使用しており、インターネットを見回すと、これは関連しているように見えますが、修正方法がわかりません。

誰にもアイデアはありますか?

ありがとうマット

4

3 に答える 3

7

標準の WCF NetNamedPipesBinding は、サービスの起動時にランダムに生成されたパイプ名を作成し、WCF クライアント側チャネル スタックがパイプの名前を見つけるために参照する必要があるカーネル共有メモリ オブジェクトも作成します。

Web サイトで偽装を使用するということは、WCF サービスが呼び出されるセキュリティ コンテキストに、NETWORK USERS グループのメンバーシップを含むログオン トークン (偽装トークン) があることを意味します。

サービス リスナーが起動すると、WCF バインドによって、名前付きパイプ自体と、パイプ名が公開されている共有メモリ オブジェクトの両方にアクセス制御リスト (ACL) が作成されます。これらの ACL は両方とも、NETWORK USERS グループへのアクセスを拒否します。したがって、リモート ユーザーになりすました Web サイトは、パイプ名を検出する前に、共有メモリ オブジェクトへのアクセスを拒否されます。他の方法でパイプ名を見つけたとしても、パイプへのアクセスは拒否されます。

偽装を削除すると、すべてが機能します。これは、ログオン トークンが NETWORK USERS グループのメンバーシップを持たない Web アプリケーション ワーカー プロセスのセキュリティ コンテキストでサービスが呼び出されるためです。これはローカル ログオンです。

興味があれば、 http://blogs.charteris.com/blogs/chrisdiで詳細を確認してください。ACL を調整する方法を示します。原則として、このアプローチを使用してリモート ユーザーにアクセス権を付与できますが、これはお勧めしません。

于 2010-11-15T16:50:14.873 に答える
0

この問題を回避するには、最終的にネット パイプを呼び出すことになった IIS エンドポイントを匿名ユーザーが利用できるようにしました。つまり、なりすましはありませんでした。

于 2010-08-19T21:42:10.827 に答える
0

この特定の例外が発生した場合は、通常、サービスが実行されていないことを意味します。localhostURLで使用されていることがわかります。ホストとサービスが同じマシンで実行されていることを確認したいだけです。WCF は、このバインディングを使用したマシン間の通信を許可しません。

このメッセージが表示されると、通常、サービスを開始するのを忘れていることを確認して確認します。そのため、リッスンしているエンドポイントはありません。サービスが実際にまだ実行中であり、例外がスローされた時点でクラッシュしていないことを確認してください。それでも問題が解決しない場合は、進捗状況を投稿してください。さらに提案を行うことができます。

于 2010-07-30T15:36:26.670 に答える