3

多くのWCFサービスがあり、あるサービスを別のサービスから呼び出す必要があります。私はnetNamedPipeBindingこの目的のために使用することにしました。

私のweb.configファイルは次のようになります。(私はここに無関係なものをコピーしていません。)

 <services>
          <service             name="Services.AuthorizationService"    >
            <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" >
            <endpoint
              name="AuthorizationService"
              address=""
              binding="basicHttpBinding"               contract="ServiceContracts.IAuthorizationService" />
            <endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
                   binding="netNamedPipeBinding"                   contract="ServiceContracts.IAuthorizationService"
                   name="AuthorizationNamedPipeEndpoint"/>           
          </service>
</Services>

web.configファイルのclientセクションは次のようになります。

<client>
      <endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
       binding="netNamedPipeBinding"            contract="ServiceContracts.IAuthorizationService" name="AuthorizationServiceNamedPipe" />
    </client>

私はOperationContract次のようにs(GetDetails)の1つを呼び出そうとしています:

  using (ChannelFactory<IAuthorizationService> authorizationChannel = new ChannelFactory<IAuthorizationService>("AuthorizationServiceNamedPipe"))
                        {
                            IAuthorizationService authorizationService = authorizationChannel.CreateChannel();
                            var response = authorizationService.GetDetails(new GetDetailsRequestMessage());
                        }

このコードを実行すると、OperationContractGetDetailsを呼び出した行で例外が発生します。

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

正確な問題を見つけることができません。InnerExceptionもありません。私はWindows7マシンを使用しており、IISのバージョンはIIS7.5です。Winformアプリケーションから問題なくこのサービスを呼び出すことができることに注意してください。net.pipeバインディングは、IISのWebサイトバインディングに追加されます。

net.pipeトランスポートを使用してサービスが正しく機能していることを確認するにはどうすればよいですか?HTTPの場合、IEで参照して確認できます。

4

2 に答える 2

9

この問題はWindows Communication Foundation Non-HTTP Activation、からコンポーネントをアクティブ化した後に解決されましたControl Panel —&gt; Programs and Features, and then click "Turn Windows Components On or Off" in the left pane. Expand the Microsoft .NET Framework 3.5

これがアクティブ化され、HTTP以外のバインディングを使用すると、WASが自動的に使用されます。

私は非常に基本的でばかげた間違いをしましたが、それは私が多くのことを学ぶのを助けました。次の記事は私を大いに助けました:

WASを使用してHTTPを超えてWCFサービスを拡張する

WindowsActivationServiceでのWCFサービスのホスティング

コンシューマーが仮想マシンでホストされているWCFサービス呼び出しを呼び出そうとすると、WCFはアクセスを拒否されます

最後のリンクは、サーバー証明書関連の構成が問題を引き起こしている可能性があることを示しています。そして、私はサービスの動作(質問には表示されていません)を追加していました。その動作はサーバー証明書を使用していました。

于 2011-08-08T12:49:50.927 に答える
0

SharePoint 2013でも同じ問題が発生していました。インストール中に問題が発生し、アクティベーション設定がオンになりませんでした。それがアプリケーションサーバーの機能の問題なのか、それとも他の問題なのかはわかりません。

投稿ありがとうございます!SP2013の問題も修正できました。これは、それに遭遇する可能性のある人にも見られた例外です。

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

System.IO.PipeException:パイプエンドポイント'net.pipe://localhost/SecurityTokenServiceApplication/appsts.svc'がローカルマシンで見つかりませんでした。

于 2013-12-17T17:11:28.680 に答える