如何使用NO安全性和大多数最小绑定配置WCF

时间:2009-11-01 23:00:51

标签: wcf windows-services

我一直遇到WCF的主要问题,which are not amenable to any wisdom I can find。我尝试过basicHttpBinding,wsHttpBinding,netTcpBinding(在两台机器上运行Net.Tcp服务)。这种行为可归结为:

  • 在同一台机器上工作,在调试器中运行,独立(非服务)进程,Windows服务
  • 无法从其他计算机访问,除非我在调试器中运行该服务

我必须承认被绑定/安全/等的多种选择感到困惑。我还必须承认不知道作为Windows服务运行的限制,虽然我确定我已经读过SYSTEM帐户没有网络凭据的地方。我尝试使用自己的凭据运行服务,结果相同。

我会在几个小时内完成最后期限,而且此刻我将不得不采取独立的流程来运行,这非常令人尴尬。

我确信在我的理解中我犯了一些简单却至关重要的错误,并且很乐意受到启发。但是现在我很高兴如果有人知道在同一个Windows网络上的两台机器之间运行WCF而又没有任何安全性的快速而肮脏的方式,其中一个是Windows服务,另一个是Windows GUI应用程序。

3 个答案:

答案 0 :(得分:1)

这需要 NetNamedPipe 绑定(在线通信)!

您的配置必须类似于:

  <system.serviceModel>
    <bindings>
      <netNamedPipeBinding>
        <binding name="NoSecurityIPC">
          <security mode="None" />
        </binding>
      </netNamedPipeBinding>
    </bindings>
    <client>
      <endpoint name="internal"
                address="channel1"
                binding="netNamedPipeBinding"
                bindingConfiguration="NoSecurityIPC"
                contract="IYourService" />
    </client>
    <services>
      <service name="Namespace.YourService">
        <host>
          <baseAddresses>
            <add baseAddress="net.pipe://localhost/" />
          </baseAddresses>
        </host>
        <endpoint
            address="channel1"
            binding="netNamedPipeBinding" 
            bindingConfiguration="NoSecurityIPC"
            contract="IYourService" />
      </service>
    </services>
  </system.serviceModel>

马克

答案 1 :(得分:1)

是Windows防火墙问题吗? BasicHttpBinding默认为安全模式“none”,在netTcp上为客户端和服务设置它就像在客户端和服务器配置中的根绑定元素下放置一个security mode =“none”元素一样简单。如果安全模式设置为none,服务器上的防火墙似乎是唯一阻止您连接的东西。

答案 2 :(得分:1)

1)除了打开防火墙之外,您几乎肯定需要通过HTTP.SYS上的API明确允许绑定服务端口。这可以通过Vista或更高版本中的内置netsh http add命令,通过早期系统上的可下载httpcfg工具,或通过管理权限直接对HTTP API进行P /调用作为设置步骤来完成。

2)如果你有多个服务,如果他们说HTTP而不是net.tcp,那么让他们分享给定端口上的地址空间要容易得多

3)默认情况下,通过网络进行通信的服务应该使用网络服务标识运行,理想情况下是服务特定的SID:即使数据不敏感,也会在网络上暴露像System这样的高权限用户不是好习惯。