Базовый адрес службы WCF Http и netTcp

у меня есть два базовых адреса, определенных в моем файле конфигурации службы WCF:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>      
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
        propagateActivity="true">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="ServiceModelTraceListener">
            <filter type="" />
          </add>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="C:WCF Service Logsapp_tracelog.svclog"
        type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        name="ServiceModelTraceListener" traceOutputOptions="DateTime, Timestamp">
        <filter type="" />
      </add>
    </sharedListeners>
  </system.diagnostics>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="netTcp" maxBufferPoolSize="50000000" maxReceivedMessageSize="50000000">
          <readerQuotas maxDepth="500" maxStringContentLength="50000000" maxArrayLength="50000000" maxBytesPerRead="50000000" maxNameTableCharCount="50000000" />
          <security mode="None"></security>
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="ReportingComponentLibrary.TemplateServiceBehavior"
        name="ReportingComponentLibrary.TemplateReportService">
        <endpoint address="TemplateService" binding="netTcpBinding" bindingConfiguration="netTcp"
          contract="ReportingComponentLibrary.ITemplateService"></endpoint>
        <endpoint address="ReportService" binding="netTcpBinding" bindingConfiguration="netTcp"
          contract="ReportingComponentLibrary.IReportService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8001/TemplateReportService" />
            <add baseAddress="http://localhost:8181/TemplateReportService"  />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ReportingComponentLibrary.TemplateServiceBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

и хотя я установил привязку конечной точки как netTcpBinding,
Я могу получить доступ к моей службе WCF только с базовым адресом:

http://localhost:8181/TemplateReportService

, а не

net.tcp://localhost:8001/TemplateReportService

как я могу сделать свой доступ к службе с адресом netTcp?

2 ответов


вы определили сеть.Базовый адрес TCP:

net.tcp://localhost:8001/TemplateReportService

ваши конечные точки с Net TCP:

<endpoint address="TemplateService" 

и

<endpoint address="ReportService" 

таким образом, их полный адрес службы будет "nettcp базовый адрес" + " относительный адрес, как определено на <endpoint> элемент" - это дает:

net.tcp://localhost:8001/TemplateReportService/TemplateService

и

net.tcp://localhost:8001/TemplateReportService/ReportService

С уважением.

вы можете использовать их по этим адресам??

также-вы определили " mex "(metadata exchange) конечная точка для протокола HTTP-вот почему вы можете видеть что-то при переходе к HTTP-адресу. Но вы не указали конечную точку MEX для netTcp.


из-за того , что у меня не было достаточно четких ответов, я решил сам найти лучшее решение. Вот что вам нужно сделать, чтобы настроить конечную точку службы WCF NET TCP в IIS 7.0.

чтобы достичь этого, нам нужно два шага:

  1. настройте файл конфигурации для конечной точки WCF net tcp
  2. настройка IIS для net tcp

1. Настройте файл конфигурации для конечной точки WCF net tcp

ниже типичный файл конфигурации обратите внимание, что значение "адрес" в конечной точке службы пусто.

также обратите внимание, что внутри узла" хост " Im добавляет 2 базовых адреса, протоколы http и net tcp соответственно. Поскольку служба размещена в IIS, вам не нужно беспокоиться об абсолютном адресе в конечной точке, IIS вычисляет это на основе базового адреса, который мы определили внутри узла "хост".

    <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviorConfig">
          <!--your custom behavior here-->
        </behavior>
      </serviceBehaviors>
    </behaviors>
     <bindings>
      <basicHttpBinding>
        <binding name="basicHttpBindingConfig"/>
      </basicHttpBinding>
      <netTcpBinding>
        <!--our netTcpBinding binding-->
        <binding name="netTcpBindingConfig"/>   
      </netTcpBinding>
    </bindings>
    <services>
      <service name="MyNamespace.ServiceLayer.MyService" behaviorConfiguration="behaviorConfig">
        <!--Endpoint for basicHttpBinding-->
        <endpoint address="" binding="basicHttpBinding" contract="MyNamespace.ServiceLayer.IMyService" bindingConfiguration="basicHttpBindingConfig"/>
        <!--Endpoint for netTcpBindingConfig-->
        <endpoint address="" binding="netTcpBinding" contract="MyNamespace.ServiceLayer.IMyService" bindingConfiguration="netTcpBindingConfig">
        <identity>
            <dns value="localhost" />
        </identity>
    </endpoint>
    <!--Make sure you add a mexTcpBinding, without it you will receive an error when trying to resolve service's reference-->
    <endpoint address="mex" 
              binding="mexTcpBinding" 
              bindingConfiguration=""
              name="MyServiceMexTcpBidingEndpoint" 
              contract="IMetadataExchange" />
        <host>
            <!--This part is important for IIS to determine the base addresses for your endpoints-->
            <baseAddresses>            
                 <!--Notice that baseAddress for net tcp is preceded by net.tcp -->
                 <!--then ://localhost:{port} -->
                 <!--Also the same for http, so you can figure out how to define a baseAddress for https-->
               <add baseAddress="net.tcp://localhost:8090"/>
               <add baseAddress="http://localhost:8080"/>
            </baseAddresses>
        </host>
      </service>
    </services>    
  </system.serviceModel>

2. Настройка IIS для сети tcp

в IIS (после обновления службы с новой конфигурацией) включите сеть.протокол TCP. Вот эти шаги:

  • Откройте Диспетчер служб IIS.
  • в списке сайтов найдите свой" сайт", где размещен ваш wcf, затем щелкните его правой кнопкой мыши
  • затем выберите "Редактировать привязки",
  • появится список Привязок (убедитесь, что net.tcp там нет), затем добавьте свою сеть.конфигурация tcp,
  • нажмите кнопку "Добавить",
  • введите net.tcp (или выберите net.tcp из выпадающего списка, если он доступен)
  • в типе информации привязки: 8090:* (убедитесь, что это тот же порт, что и в host > base address, который вы добавили)
  • затем закройте окно и перезапустите службу.

после этого есть еще одна конфигурация:

  • Откройте Диспетчер служб IIS
  • в списке сайтов найдите свой" сайт", где размещен ваш wcf, затем щелкните его правой кнопкой мыши
  • Нажмите " Дополнительные Настройки"
  • Выберите Протоколы
  • задайте значение http, net.tcp (убедитесь,что между http, net нет пробелов.tcp)
  • перезапустите службу

кроме того, если вы все еще не можете получить доступ к службе, Вам может потребоваться запустить сеть.адаптер прослушивателя tcp на вашем сервере. Для этого выполните следующие действия:

  • перейдите в ServerManager - > конфигурация - > службы, остановите сеть.Адаптер прослушивателя Tcp и сеть.TCP-порт общая услуга. Затем начните их снова.

это все, что вам нужно сделать, чтобы включить конечную точку nettcp WCF в IIS.

надеюсь, что это помогает.

в отношении