質問:
他のエンドポイントの詳細を取得せずに一方のエンドポイントにアクセスする方法はありますか? それは、サービスのすべてのエンドポイントから詳細を取得せずに、構成されたサービスの 1 つのエンドポイントに接続することですか?
同じクラスを使用して、2 つの異なるインターフェースと 2 つの異なるバインディングを持つ 2 つのエンドポイントを構成しました。
Web サービスは、Windows 7 テスト マシンの IIS 7.5 でホストされています。
web.config
ファイルからの抜粋:
<bindings>
<basicHttpBinding>
<binding name="ServerUIBinding"
maxReceivedMessageSize="2097152" maxBufferSize="2097152"
sendTimeout="00:01:00" receiveTimeout="00:01:00">
</binding>
<binding name="ServerLinkBinding"
maxReceivedMessageSize="2097152" maxBufferSize="2097152"
sendTimeout="00:02:00" receiveTimeout="00:02:00">
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="APOServiceLibrary.ServerUI"
behaviorConfiguration="DefaultMetaDataBehaviour">
<endpoint name="ServerUIEndPoint"
address="/ServerUI"
binding="basicHttpBinding"
bindingConfiguration="ServerUIBinding"
contract="APOServiceLibrary.IServerUI">
</endpoint>
<endpoint name="ServerLinkEndPoint"
address="/ServerLink"
binding="basicHttpBinding"
bindingConfiguration="ServerLinkBinding"
contract="APOServiceLibrary.IServerLink">
</endpoint>
<endpoint address="mexServer"
binding="mexHttpBinding"
contract="IMetadataExchange">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultMetaDataBehaviour">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False"/>
</behavior>
</serviceBehaviors>
</behaviors>
ServerUI.svc
ファイルで次のようにサービスを構成しました。
<%@ ServiceHost Language="C#" Debug="true" Service="APOServiceLibrary.ServerUI" %>
このツールを使用して、ホストされているサイトに接続すると (私が設定した方法では、次の URL を使用して接続できますhttp://localhost/test/serverui.svc
) WcfTestClient.exe
、2 つのエンドポイントの内訳を正しく確認でき、参照すると wsdl 定義も同様に確認できます。にhttp://localhost/test/ServerUI.svc?wsdl
ここstackoverflowで、エンドポイントのアドレスフィールド(例:address="/ServerLink")はIIS構成のWebサイトに関連しており、これを使用してエンドポイントの1つだけに接続できるはずであることを読んでいますパスのタイプ:
http://localhost/test/ServerUI.svc/ServerLink
ただし、それはツールでは機能しないようWcfTestClient.exe
です。つまりhttp://localhost/test/ServerUI.svc/ServerLink
、ツールで接続できません。Web ブラウザーでそのサイトを参照することもできません。追加 新しい C# アプリを作成し、そのアドレスを使用して Web サービスに接続しようとしましたが、機能しません。私がこれを試みるたびに、常にこのタイプのエラーが生成されるようです
エラー: メタデータを取得できません メタデータを取得できません
http://localhost/test/ServerUI.svc/ServerLink
これが Windows (R) Communication Foundation サービスにアクセスできる場合は、指定されたアドレスでのメタデータ公開が有効になっていることを確認してください。
それで、私の質問に戻りますが、これを行う方法はありますか? それは、エンド ポイントの 1 つだけに接続し、その定義を取得することですか? MetadataExchange
各エンドポイントのデータを個別に生成するために何か別のことをしなければなりませんか? .svc
そのように構成できるファイルに何かありますか?
私がそうしたい理由は、他のチームの一部に、より少ないメソッドで「よりクリーンな」インターフェースを提供し、大きなデータセットのタイムアウト (ServerLink の余分な分タイムアウト) の影響を受けにくいようにするためです。
私が検討した解決策は、ラッパー クラスを作成し、それを使用して別の svc ファイルを作成し、完全に別の URL が使用されるようにすることですが、それは不十分な解決策のようです。