Моя служба WCF размещается как управляемая служба Windows, поэтому я не уверен, могу ли я по-прежнему использовать netTcpBinding. Я пытался следовать нескольким руководствам в MSDN, но по какой-то причине моя служба всегда не запускается всякий раз, когда я переключаюсь с basicHttpBinding. Возможно, есть дополнительные шаги, которые должны пройти службы за пределами IIS?
Могу ли я использовать netTcpBinding для служб WCF, размещенных за пределами IIS?
comment
Вы должны быть в состоянии сделать это. Можете ли вы поделиться соответствующими битами конфигурации?
- person Tad Donaghe   schedule 24.05.2011
comment
netTcpBinding доступен для конечных точек службы Windows. Можете ли вы дать нам больше контекста (сообщения об ошибках, информацию об определении службы и т. д.)
- person dlev   schedule 24.05.2011
comment
@Terry @dlev: я использую installutil.exe для запуска службы, которая работает за пределами VS2010, поэтому я не уверен, как получить сообщение об исключении. Вот мой app.config: pastebin.com/s3ibabxw
- person rafale   schedule 24.05.2011
comment
в вашей конфигурации есть некоторые ошибки, например, baseAddress — это http, и вы включаете httpGetEnabled для метаданных, а вашей конечной точкой является HTTP. Пожалуйста, возьмите пример из моего ответа.
- person Alex Aza   schedule 24.05.2011
Ответы (2)
Да, вы можете разместить службу WCF с помощью netTcpBinding вне IIS, в службе Windows или даже в консольном приложении, если хотите.
Вот пример файла конфигурации:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceBehavior"
name="XX.XX.Service">
<endpoint address=""
binding="netTcpBinding"
bindingConfiguration="BindingConfiguration"
contract="XX.XX..IService" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8731/XXService" />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<netTcpBinding>
<binding
name="BindingConfiguration">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
[Изменить]
Проблемы с файлом конфигурации:
- базовый адрес http вместо net.tcp
- конечной точкой метаданных является mexHttpBinding вместо metTcpBinding
- безопасность - по умолчанию будет использоваться авторизация Windows, если проверить связь между ящиками, у вас могут возникнуть проблемы с разрешением. Я предлагаю начать с режима безопасности None, а затем настроить безопасность, когда все остальное заработает.
- вам не нужно указывать httpGetEnabled для поведения службы
- если порт, который вы собираетесь использовать, уже используется, вы не сможете запустить службу
person
Alex Aza
schedule
24.05.2011
Вы абсолютно можете, и я бы сказал, что вы должны.
Вот ваша проблема:
<services>
<service name="Server.FileService" ...
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/Test/file"/>
</baseAddresses>
</host>
<endpoint address="" binding="netTcpBinding" contract="Server.IFile" />
<endpoint address="mex" binding="mexHttpBinding" ...
Адрес net.tcp
должен иметь префикс net.tcp://
, а не префикс http://
.
Я обычно не использую baseAddress
, поэтому не могу дать совет по этому поводу. Я бы удалил baseAddress и вместо этого использовал
<endpoint address="net.tcp://localhost:8001/Test/file" ..
(обратите внимание, что я бы также выбрал другой порт вместо 8000)
person
Kirk Broadhurst
schedule
24.05.2011