问题描述
|
我的WCF服务作为Windows托管服务托管,因此我不确定我是否仍然可以使用netTcpBinding。我尝试遵循MSDN上的一些指南,但是由于某种原因,无论何时我执行从basicHttpBinding的切换,我的服务始终无法启动。也许还有其他步骤需要IIS外部的服务执行?
解决方法
是的,如果需要,您可以在IIS之外,Windows服务甚至控制台应用程序中托管带有netTcpBinding的WCF服务。
这是配置文件示例:
<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授权,如果测试各框之间的通信,则可能存在权限问题。我建议从安全模式“无”开始,然后在其他一切正常时调整安全性。
您无需为服务行为指定httpGetEnabled
如果要使用的端口已在使用中,则将无法启动服务
,您绝对可以,而且我会说您应该这样做。
这是您的问题:
<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\" ...
“ 2”地址必须带有“ 3”前缀,而不是“ 4”前缀。
我通常不使用baseAddress
,因此无法提供建议。我将删除baseAddress,而是使用
<endpoint address=\"net.tcp://localhost:8001/Test/file\" ..
(请注意,我还将选择另一个端口超过8000)