我的WCF服务作为Windows托管服务托管,所以我不确定我是否仍然可以使用netTcpBinding。我曾尝试在MSDN上关注几个指南,但由于某些原因,每当我从basicHttpBinding进行切换时,我的服务总是无法启动。也许还需要在IIS之外的服务进行额外的步骤吗?
答案 0 :(得分:4)
是的,如果您愿意,可以在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>
<强> [编辑] 强>
配置文件出现问题:
答案 1 :(得分:2)
你绝对可以,而且我甚至可以说你应该这样做。
这是你的问题:
<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以上的其他端口)