Базовый адрес службы 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.
чтобы достичь этого, нам нужно два шага:
- настройте файл конфигурации для конечной точки WCF net tcp
- настройка 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.
надеюсь, что это помогает.
в отношении