У меня есть следующая конфигурация для службы, которую я развернул в IIS. Я могу добавить ссылку на службу для службы, используя URL-адрес для конечной точки wsHttpBinding, но не могу добавить ее, используя URL-адрес для конечной точки mexHttpBinding (и я хочу переключить клиент для использования netTcpBinding)
Я получаю ошибку:
Произошла ошибка при загрузке http://ServerName:98/MyService.svc/mex'.
Запрос не выполнен с состоянием HTTP 400: неверный запрос.
Метаданные содержат ссылку, которая не может быть разрешена: 'http://ServerName:98/MyService.svc/mex'.
Метаданные содержат ссылку, которая не может быть разрешена: 'http://ServerName:98/MyService.svc/mex'.
<system.web>
<compilation debug="true"
targetFramework="4.0" />
<customErrors mode="Off"/>
</system.web>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="netTcpBinding_MyService" />
</netTcpBinding>
<wsHttpBinding>
<binding name="wsHttpBinding_MyService"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647" />
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehaviour"
name="MyService.MyService">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="wsHttpBinding_MyService"
name="MyServiceEndpoint"
contract="MyService.IMyService" />
<endpoint address="net.tcp://ServerName:198/MyService.svc"
binding="netTcpBinding"
bindingConfiguration="netTcpBinding_MyService"
name="MyServiceNetTcpEndpoint"
contract="MyService.IMyService" />
<endpoint address="http://ServerName:98/MyService.svc/mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://ServerName:98/" />
<add baseAddress="net.tcp://ServerName:198/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceMetadata httpGetEnabled="true"
policyVersion="Policy15" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceCredentials>
<windowsAuthentication includeWindowsGroups="true"
allowAnonymousLogons="false" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
Самое странное, что эта конфигурация почти дословно скопирована из другой службы, которую я настроил и развернул, и мне удалось успешно добавить ссылку на службу к клиенту с помощью конечной точки mexHttpBinding. Конфигурация для оригинального сервиса выглядит следующим образом:
<system.web>
<compilation debug="true"
targetFramework="4.0" />
<customErrors mode="Off"/>
</system.web>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="netTcpBinding_MyOtherService" />
</netTcpBinding>
<wsHttpBinding>
<binding name="wsHttpBinding_MyOtherService"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647" />
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehaviour"
name="MyOtherService.MyOtherService">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="wsHttpBinding_MyOtherService"
name="MyOtherServiceEndpoint"
contract="MyOtherService.IMyOtherService" />
<endpoint address=""
binding="netTcpBinding"
bindingConfiguration="netTcpBinding_MyOtherService"
name="MyOtherServiceNetTcpEndpoint"
contract="MyOtherService.IMyOtherService" />
<endpoint address="mex"
binding="mexHttpBinding"
bindingConfiguration=""
name="MyOtherServiceMexHttpBindingEndpoint"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://ServerName:97/" />
<add baseAddress="net.tcp://ServerName:970/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceMetadata httpGetEnabled="true"
policyVersion="Policy15" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<windowsAuthentication includeWindowsGroups="true"
allowAnonymousLogons="false" />
</serviceCredentials>
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
Как вы заметите, единственные существенные различия в конфигурациях - это адреса для конечной точки netTcpBinding и конечной точки mexHttpBinding. Первоначально я начал с того, что они оба пусты, но, пытаясь заставить его работать, я добавил явные адреса.
Кроме того, обе службы настроены одинаково в IIS, то есть привязки net.tcp включены и настроены на соответствующих портах. Каждый из них также запускает отдельные сайты и отдельные пулы приложений на одном сервере (и оба пула приложений работают под одним и тем же именем).
Буду признателен за любую помощь, спасибо.