【问题标题】:How to configure WCF with NO security, and most minimal bindings如何在没有安全性和最小绑定的情况下配置 WCF
【发布时间】:2009-11-01 23:00:51
【问题描述】:

我在使用 WCF 时遇到了重大问题,which are not amenable to any wisdom I can find。我尝试过 basicHttpBinding、wsHttpBinding、netTcpBinding(两台机器上都运行 Net.Tcp 服务)。该行为可以归结为:

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

我必须承认对绑定/安全/等的过多选项感到困惑。我还必须承认,我对作为 Windows 服务运行的限制一无所知,尽管我确信我在某处读到 SYSTEM 帐户没有网络凭据。我尝试在自己的凭据下运行该服务,结果相同。

我在几个小时后就要到最后期限了,目前我将不得不求助于作为独立进程运行,这非常尴尬。

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

【问题讨论】:

  • 我尝试这个答案好几个月了。血腥的服务只能在同一台机器上运行,更糟糕的是,我已经尝试了微软网站上的所有场景,甚至在服务器和客户端上都安装了证书,但没有成功。不应该是这样的。 stackoverflow.com/questions/3760057/…

标签: wcf windows-services


【解决方案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>

马克

【讨论】:

  • @Eduardo Xavier:WCF 中的 netNamedPipeBinding 仅在机器上 - 它不能用于机器之间的通信。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    2) 如果你有多个服务,让它们共享给定端口上的地址空间,如果它们使用 HTTP 比使用 net.tcp 更容易

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

    【讨论】:

      猜你喜欢
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2019-08-05
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      相关资源
      最近更新 更多