Я пытаюсь запустить две службы WCF из IIS, одна из них является веб-службой, а другая - службой привязки 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, и я могу получить WSDL для веб-службы, перейдя по адресу http://localhost:51953/WebService.svc?Wsdl (обратите внимание, что порт отличается). Кажется, я не могу получить WSDL, изменив порт на тот, который я указал в файле webconfig (8523).
Когда я указываю приложению 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 URI ошибки обмена: net.tcp: // localhost: 8523 / ServerService Метаданные содержат ссылку, которая не может быть разрешена: 'net.tcp: // локальный: 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 URI ошибки обмена: net.tcp: // localhost: 8523 / ServerService Метаданные содержат ссылку, которая не может быть разрешена: 'net.tcp: // локальный: 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>
Я могу перейти к веб-сервису, и это позволяет мне получить 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 URI ошибки обмена: http://localhost:8523/MyWebService Метаданные содержат ссылку, которую невозможно разрешить: 'http: // localhost: 8523 / MyWebService'. Ошибка при получении ответа HTTP на http://localhost:8523/MyWebService. Это может быть связано с тем, что привязка конечной точки службы не использует протокол HTTP. Это также может быть связано с прерыванием контекста HTTP-запроса сервером (возможно, из-за завершения работы службы). См. Журналы сервера для более подробной информации. Базовое соединение было закрыто: при получении произошла непредвиденная ошибка. Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным узлом. Существующее соединение было принудительно закрыто удаленным хостом. URI ошибки HTTP GET: http://localhost:8523/MyWebService Произошла ошибка при загрузке http: // localhost: 8523 / MyWebService. Запрос не выполнен с HTTP-статусом 404: не найден.
Я думаю, что проблема связана либо с путями, либо я просто вставляю неправильный URL-адрес в тестовое приложение. Либо так, либо я все еще неправильно настроил метаданные.
<add baseAddress="htt://localhost:8523/"/>
имеет опечатку в протоколе (HTTP) - person SliverNinja - MSFT   schedule 25.04.2012