Не удалось найти базовый адрес, который соответствует схеме net .tcp для конечной точки с привязкой NetTcpBinding. Схемы базовых адресов: [http] - PullRequest
1 голос
/ 18 февраля 2020

У меня есть эта конфигурация для моей службы WCF, которая работает на IIS Express номер порта 50187. Служба размещается на IIS Express Visual Studio 2017:

<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].

В то время как у меня есть другое приложение с той же конфигурацией для Dual Http Binding, которое прекрасно работает

1 Ответ

1 голос
/ 19 февраля 2020

По умолчанию IIS express не поддерживает протокол Net.tcp. Конечной точке службы с Nettcpbinding требуется базовый адрес на основе протокола NetTcp.

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

Хотя мы предоставляем базовый адрес Nettcp с помощью Host Section, он не будет работать. Это связано с тем, что IIS express использует самоконфигурирование для предоставления базового адреса для запуска текущего проекта. Конфигурация IIS express обычно находится в папке .vs текущего решения и называется applicationhost.config
enter image description here
Если мы запустим этот проект в консольном приложении с этой конфигурацией , это будет работать. Таким образом, мы должны предоставить один базовый адрес с протоколом Nettcp. Это можно выполнить в IIS.
1. Включить функцию windows для протокола net.tcp.
enter image description here
2. Добавить поддержку Net.tcp на веб-сайте.
enter image description here
3. Добавьте net.tcp протокол в site binding module.
enter image description here
Подробную информацию о добавлении см. Ниже. net.tcp протокол к веб-сайту.
WCF ContractFilter Несоответствие при включении надежного сеанса
Не стесняйтесь сообщить мне, если проблема все еще существует.

...