2011-05-24 80 views
3

我的WCF服务作为Windows托管服务托管,所以我不确定我是否仍然可以使用netTcpBinding。我试过在MSDN上遵循一些指南,但出于某种原因,我的服务总是无法启动,只要我从basicHttpBinding进行切换。也许还有其他步骤需要IIS以外的服务?我可以将netTcpBinding用于IIS以外托管的WCF服务吗?

+0

你应该完全能够做到这一点。你能分享相关的配置位吗? – 2011-05-24 02:05:01

+0

netTcpBinding可用于Windows服务托管端点。你可以给我们更多的上下文(错误消息,服务定义信息等) – dlev 2011-05-24 02:05:10

+0

@Terry @dlev:我使用installutil.exe来启动在VS2010之外运行的服务,所以我不确定如何获取异常消息。这里是我的app.config:http://pastebin.com/s3ibabxw – rafale 2011-05-24 02:09:52

回答

4

是的,你可以在IIS之外的netTcpBinding,Windows服务甚至控制台应用程序中托管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授权,如果测试与框之间的通信,则可能有权限问题。我建议先从安全模式None开始,然后在其他所有工作时调整安全性。
  • 你不需要指定httpGetEnabled服务行为
  • 如果你要使用的端口已在使用,您将无法启动服务
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个)

相关问题