2010-01-06 4 views
10

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

<?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 Logs\app_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?

ответ

15

Вы определили Net.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» (обмен метаданными) для протокола HTTP - вот почему вы можете что-то увидеть при навигации по HTTP-адресу. Но вы не указали конечную точку MEX для netTcp.

+0

Спасибо Марк, так это значит, что даже если я поставил NetTcpBinding для обеих конечных точек, но если у меня есть MetaData выставлены на HttpBinding, он выставит службу по адресу адрес. – iniki

+0

Он будет отображать метаданные для службы по адресу http, что означает, что вы можете перемещаться туда только в своем браузере. Конечные точки NetTcp являются активными и готовыми к использованию - вы просто не можете получить anythign в браузере, идя туда .... –

1

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

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

  1. настроить конфигурационный файл для WCF сети TCP конечной
  2. Настройка IIS для сети TCP

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

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

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

<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 (после обновила свой сервис с новой конфигурацией) включить протокол net.tcp. Это следующие этапы:

  • Открытый IIS.
  • В списке сайтов, найти свой «сайт», на котором находится ваш ФОС, а затем щелкните правой кнопкой мыши на нем
  • затем выберите «Изменить привязки»,
  • список привязок появится (убедитесь, что net.tcp не существует), а затем добавить net.tcp конфигурации,
  • нажмите «Добавить»,
  • Тип net.tcp (или выберите net.tcp из выпадающего списка, если он доступен)
  • в связывании типа информации : 8090: * (убедитесь, что это тот же порт, что и в базовом адресе хоста>, который вы добавили)
  • затем закрыть это окно и перезапустите службу.

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

  • Открыть IIS
  • В сайтах список, найти свой «сайт», на котором находится ваш ФОС, а затем щелкните правой кнопкой мыши на нем
  • Нажмите «Расширенные настройки»
  • Выберите Enabled Протоколы
  • Установите значение HTTP, net.tcp (убедитесь, что нет пробелов между HTTP, net.tcp)
  • Перезапустите службы

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

  • Перейти к ServerManager -> Конфигурация -> Службы, остановите Слушатель адаптер Net.Tcp и Sharing Service Net.Tcp Port. Затем запустите их снова.

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

Надеюсь, это поможет.

С уважением

+0

Не понял ваши изменения о моем ответе в http://stackoverflow.com/questions/18575496/can-not-find-a-base-address-that-matches-scheme-net-tcp-for-the-endpoint-with/18575819 # 18575819 Проверьте свои состояния перед их продвижением. IIS6 НЕ ПОДДЕРЖИВАЕТ NET.TCP !!! См. Http://msdn.microsoft.com/en-us/library/ms730158.aspx – Alex

Смежные вопросы