База данных службы 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 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?
Ответы
Ответ 1
Вы определили базовый адрес 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.
Ответ 2
Из-за отсутствия ответов достаточно ясно, я решил самому найти лучшее решение. Вот что вам нужно сделать, чтобы настроить конечную точку службы WCF NET TCP в IIS 7.0.
Для этого нам нужно выполнить два шага:
- Настроить конфигурационный файл для конечной точки net tcp WCF
- Настройка IIS для net tcp
1. Настроить конфигурационный файл для конечной точки net tcp WCF
Ниже приведен типичный файл конфигурации, обратите внимание, что значение "адрес" в конечной точке обслуживания пуст.
Также обратите внимание, что внутри хоста node "Im добавляет 2 базовых адреса, HTTP и net tcp протоколы. Поскольку служба размещена в IIS, вам не нужно беспокоиться об абсолютном адресе в конечной точке, IIS показывает это на основе базового адреса, который мы определили внутри хоста node.
<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 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 для net tcp
В IIS (после обновления вашей службы с новой конфигурацией) включите протокол net.tcp. Это следующие шаги:
- Откройте IIS.
- В списке сайтов найдите свой "сайт", на котором размещен ваш wcf, затем щелкните его правой кнопкой мыши.
- затем выберите "Изменить привязки",
- появляется список привязок (убедитесь, что net.tcp там нет), затем добавьте конфигурацию net.tcp,
- нажмите "Добавить",
- Введите net.tcp(или выберите net.tcp из раскрывающегося списка, если он доступен)
- in binding Тип информации: 8090: * (убедитесь, что он тот же порт, что и в базовом адресе хостa > , который вы добавили)
- затем закройте это окно и перезапустите службу.
После этого есть еще одна конфигурация:
- Открыть IIS
- В списке сайтов найдите свой "сайт", на котором размещен ваш wcf, затем щелкните его правой кнопкой мыши.
- Нажмите "Дополнительные настройки"
- Выберите Включенные протоколы
- Задайте значение http, net.tcp(убедитесь, что между http, net.tcp нет пробелов)
- Перезапустите службу
Кроме того, если вы по-прежнему не можете получить доступ к сервису, вам может потребоваться запустить ваш адаптер прослушивателя Net.tcp на вашем сервере. Для этого выполните следующие действия:
- Перейдите в ServerManager → Configuration → Services, остановите адаптер прослушивателя Net.Tcp и службу обмена портами Net.Tcp. Затем запустите их снова.
Это все, что вам нужно сделать, чтобы включить конечную точку WCF nettcp в IIS.
Надеюсь, что это поможет.
Привет