Привязка Net TCP: префикс URI не распознается
это действительно беспокоит меня в течение нескольких часов. Я создал простейшую службу WCF, используя привязку TCP.
namespace WcfTcpService
{
public class TestTcpService : ITestTcpService
{
public string Hello(string name)
{
return "Hello, " + name + "!";
}
}
}
namespace WcfTcpService
{
[ServiceContract]
public interface ITestTcpService
{
[OperationContract]
string Hello(string name);
}
}
Web.конфигурационный файл имеет следующий раздел:
<system.serviceModel>
<services>
<service name="WcfTcpService.TestTcpService" behaviorConfiguration="TestServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:808/WcfTcpService.TestTcpService" />
</baseAddresses>
</host>
<endpoint address="" binding="netTcpBinding" bindingConfiguration="tcpBinding" contract="WcfTcpService.ITestTcpService"></endpoint>
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"></endpoint>
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="tcpBinding" portSharingEnabled="true">
<security mode="None"></security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="TestServiceBehavior">
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="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>
<!--<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
<add binding="netTcpBinding" scheme="net.tcp" />
</protocolMapping>-->
<!--<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />-->
</system.serviceModel>
эта служба размещается в IIS:
теперь, при попытке добавить ссылку на net.tcp://localhost:808/WcfTcpService.TestTcpService
из клиентского приложения, я продолжаю получать ошибки:
The URI prefix is not recognized.
Metadata contains a reference that cannot be resolved: 'net.tcp://localhost/WcfTcpService.TestTcpService'.
The message could not be dispatched because the service at the endpoint address 'net.tcp://localhost/WcfTcpService.TestTcpService' is unavailable for the protocol of the address.
If the service is defined in the current solution, try building the solution and adding the service reference again.
сеть.служба tcp запущена, я получаю ту же ошибку с WcfTestClient.исполняемый. и я могу успешно работать http://localhost/WcfTcpService/TestTcpService.svc
.
Я искал google, но ничего не придумал.
спасибо!
EDIT:
экран Привязок "веб-сайта по умолчанию" выглядит так:
2 ответов
при создании Службы, использующей netTcpBinding, и вы хотите добавить ссылку на службу в Visual Studio, вы должны использовать http-адрес (httpGetEnabled), а не фактический tcp-адрес, который прослушивает служба. Поэтому решением было установить localhost/WcfTcpService / TestTcpService.SVC как URL в диалога добавление ссылки на службу.
У меня была такая же проблема и я изменил веб.config, как показано ниже:
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
<baseAddressPrefixFilters>
<add prefix="net.tcp://YourBaseUrl"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>