首页 > 解决方案 > 找不到与具有绑定 NetTcpBinding 的终结点的方案 net.tcp 匹配的基地址。基地址方案是 [http]

问题描述

我的 WCF 服务具有此配置,该服务在 IIS Express 端口号 50187 上运行。该服务托管在 Visual Studio 2017 的 IIS Express 上:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="QCConsumerBinding" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="50000000" maxBufferPoolSize="5242880" maxReceivedMessageSize="50000000" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="QCWCFService.QCService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="QCConsumerBinding" contract="QCWCFService.IQCService" />
      </service>
      <service name="QCWCFService.QCFinalService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="QCConsumerBinding" contract="QCWCFService.IQCFinalService" />
      </service>

      <service name="QCWCFService.CalibrationService">
        <endpoint address="service" binding="netTcpBinding" contract="QCWCFService.ICalibrationService" />
        <endpoint address="" binding="wsDualHttpBinding" contract="QCWCFService.ICalibrationService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8080/CalibrationService" />
            <add baseAddress="http://localhost:8081/CalibrationService" />
          </baseAddresses>

        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>          
          <!-- To avoid disclosing metadata information, set the values below to false 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="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add scheme="http" binding="wsDualHttpBinding" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

但是当我尝试运行该服务时,它给出了这个异常:

System.InvalidOperationException: Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base address schemes are [http].

虽然我有另一个具有相同配置的双 Http 绑定应用程序,但它运行良好

标签: c#wcfwcf-binding

解决方案


默认情况下,IIS express 不支持Net.tcp协议。服务端点Nettcpbinding需要基于NetTcp协议的基地址。

<endpoint address="service" binding="netTcpBinding" contract="QCWCFService.ICalibrationService" />

尽管我们Nettcp使用 提供了基地址Host Section,但它不起作用。这是因为 IIS express 使用自配置来提供一个基地址来运行当前项目。IIS express 的配置通常位于当前解决方案的 .vs 文件夹中,称为 如果我们在具有此配置的控制台应用程序中运行此项目,它将起作用。因此,我们应该为 Nettcp 协议提供一个基地址。这可以在 IIS 中完成。 1. 启用协议的windows功能。 2.在网站上添加支持。 3. 添加协议。有关将协议添加到网站 的详细信息,请参阅以下内容。applicationhost.config
在此处输入图像描述

net.tcp
在此处输入图像描述
Net.tcp
在此处输入图像描述
net.tcpsite binding module
在此处输入图像描述
net.tcp
启用可靠会话时 WCF ContractFilter 不匹配
如果问题仍然存在,请随时告诉我。


推荐阅读