Net TCP绑定:无法识别URI前缀

时间:2013-07-26 16:02:34

标签: c# .net wcf wcf-binding nettcpbinding

这真让我困扰了几个小时。我使用TCP绑定创建了最简单的WCF服务。

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.config文件包含以下部分:

  <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中:

detailed settings

现在,在尝试从客户端应用程序添加对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.

net.tcp服务正在运行,我收到与WcfTestClient.exe相同的错误。我可以成功地运行http://localhost/WcfTcpService/TestTcpService.svc

我搜索了谷歌但没有出现。

谢谢!

修改

“默认网站”的绑定屏幕看起来像这样:btw:

bindings

2 个答案:

答案 0 :(得分:8)

当您创建使用netTcpBinding的服务并且您想在Visual Studio中添加服务引用时,您应该使用http地址(httpGetEnabled)而不是服务侦听的实际tcp地址。所以解决方案是在添加服务引用对话框中将localhost / WcfTcpService / TestTcpService.svc设置为url。

答案 1 :(得分:0)

我遇到了同样的问题,我更改了web.config,如下所示:

&#13;
&#13;
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
      <baseAddressPrefixFilters>
        <add prefix="net.tcp://YourBaseUrl"/>
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
&#13;
&#13;
&#13;