IIS 内から 2 つの WCF サービスを実行しようとしています。1 つは Web サービスで、もう 1 つは Net TCP バインディング サービスです。
これが私のWeb.configのシムルクラムです(サービス名を匿名化しました):
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="ServerService">
<endpoint address="ServerService"
binding="netTcpBinding"
bindingConfiguration=""
name="NetTcpEndPoint"
contract="IServerService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8523/"/>
<add baseAddress="htt://localhost:8523/"/>
</baseAddresses>
</host>
</service>
<service name="MyWebService">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration=""
name="AACCWSEndPoint"
contract="IMyWebService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8523/IMyWebService"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
これを IDE で実行すると、ポート 51953 で実行されているページが開き、http://localhost:51953/WebService.svc?wsdlを参照して Web サービスの WSDL を取得できます(ポートが異なることに注意してください)。ポートを webconfig ファイル (8523) で指定したものに変更しても、WSDL を取得できないようです。
WcfTestClient アプリを "net.tcp://localhost:8523/ServerService" にポイントすると、メタ データにアクセスできないというエラーが表示されます。サービスのエンドポイント)。
ここで何が間違っていますか?
アップデート:
プロジェクト プロパティのポート番号を 8523 に変更しようとしましたが、うまくいかないようでした。また、mex エンドポイントのアドレスを "ServerService\mex" に変更しようとしましたが、テスト クライアントはチャーンに時間を費やしましたが、その後、次のエラーがスローされました。
エラー: net.tcp://localhost:8523/ServerService からメタデータを取得できません これがアクセス権のある Windows (R) Communication Foundation サービスである場合は、指定されたアドレスでのメタデータ公開が有効になっていることを確認してください。メタデータの公開を有効にする方法については、MSDN のドキュメント ( http://go.microsoft.com/fwlink/?LinkId=65455 ) を参照してください。WS-Metadata Exchange エラー URI: net.tcp://localhost:8523/ServerService Metadata contains解決できない参照: 「net.tcp://localhost:8523/ServerService」。.Net Framing をサポートしていないサービスへのチャネルを作成しようとしました。HTTP エンドポイントに遭遇している可能性があります。レコード タイプ 'PreambleAck' が予期されていましたが、'72' が見つかりました。
私は掘り続けるつもりですが、助けていただければ幸いです。
更新 2:
mex エンドポイントを mexTcpBinding に変更しました。サービス タグは次のとおりです。
<endpoint address="ServerServiceWS"
binding="wsHttpBinding"
bindingConfiguration=""
name="WSEndPoint"
contract="IServerService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8523/"/>
<add baseAddress="http://localhost:8523/"/>
</baseAddresses>
</host>
</service>
まだ運がありません。テスターに正しい URL を入力していることを確認するために、使用している URL は次のとおりです。
net.tcp://localhost:8523/ServerService
私も試しました:
net.tcp://localhost:8523/mex
と
net.tcp://localhost:8523/
これらすべてにより、次のエラーのバリエーションが得られます。
エラー: net.tcp://localhost:8523/ServerService からメタデータを取得できません これがアクセス権のある Windows (R) Communication Foundation サービスである場合は、指定されたアドレスでのメタデータ公開が有効になっていることを確認してください。メタデータの公開を有効にする方法については、MSDN のドキュメント ( http://go.microsoft.com/fwlink/?LinkId=65455 ) を参照してください。WS-Metadata Exchange エラー URI: net.tcp://localhost:8523/ServerService Metadata contains解決できない参照: 「net.tcp://localhost:8523/ServerService」。.Net Framing をサポートしていないサービスへのチャネルを作成しようとしました。HTTP エンドポイントに遭遇している可能性があります。レコード タイプ 'PreambleAck' が予期されていましたが、'72' が見つかりました。
更新 3
FWIW WEB.config にもっと大きな問題があると思います。現在の様子は次のとおりです。
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="ServerService">
<endpoint address=""
binding="netTcpBinding"
bindingConfiguration="DefaultBindingConfig"
name="NetTcpEndPoint"
contract="IServerService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
bindingConfiguration="mexBinding"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8523/"/>
</baseAddresses>
</host>
</service>
<service name="MyWebService">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration=""
name="MyWSEndPoint"
contract="IMyWebService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
bindingConfiguration="mexHttpBinding"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8523/MyWebService"/>
</baseAddresses>
</host>
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="DefaultBindingConfig"
maxConnections="5"
portSharingEnabled="true" >
</binding>
<binding name="mexBinding"
portSharingEnabled="true">
<security mode="None"></security>
</binding>
</netTcpBinding>
<mexTcpBinding>
<binding name="mexTcpBinding"/>
</mexTcpBinding>
<mexHttpBinding>
<binding name="mexHttpBinding"/>
</mexHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServerServiceBehaviour">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
<behavior name="MexBehaviour">
<serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Webservice を参照でき、?wsdl を使用して WSDL を取得できますが、アドレスhttp://localhost:8523/MyWebServiceを WCF テスターに入れると、エラーもスローされます。
エラー: http://localhost:8523/MyWebServiceからメタデータを取得できません。 アクセス権のある Windows (R) Communication Foundation サービスの場合は、指定されたアドレスでのメタデータ公開が有効になっていることを確認してください。メタデータの公開を有効にする方法については、MSDN のドキュメント ( http://go.microsoft.com/fwlink/?LinkId=65455 ) を参照してください。WS-Metadata Exchange エラー URI: http://localhost:8523/MyWebService メタデータに参照が含まれています解決できない: 'http://localhost:8523/MyWebService'. http://localhost:8523/MyWebServiceへの HTTP 応答の受信中にエラーが発生しました. これは、サービス エンドポイント バインディングが HTTP プロトコルを使用していないことが原因である可能性があります。これは、HTTP 要求コンテキストがサーバーによって中止されたことが原因である可能性もあります (サービスのシャットダウンが原因である可能性があります)。詳細については、サーバー ログを参照してください。基になる接続が閉じられました: 受信時に予期しないエラーが発生しました。トランスポート接続からデータを読み取ることができません: 既存の接続がリモート ホストによって強制的に閉じられました。既存の接続がリモート ホスト HTTP GET エラー URI によって強制的に閉じられました: http://localhost:8523/MyWebService 'http://localhost:8523/MyWebService' のダウンロード中にエラーが発生しました。リクエストは HTTP ステータス 404: Not Found で失敗しました。
この問題は、パスに関係があるか、テスト アプリケーションに間違った URL を入力しているだけだと思います。それか、まだメタデータを正しく構成していません。