【问题标题】:How to host WCF through TCP ports?如何通过 TCP 端口托管 WCF?
【发布时间】:2009-06-29 07:19:06
【问题描述】:

如何通过 TCP 端口托管 WCF 服务,如何通过这些 TCP 端口监听和使用服务?

也就是说,除了 net.tcp 绑定之外,还有什么方法可以使用 TCP 端口来托管和消费吗?

【问题讨论】:

  • 所以基本上,在 windows xp 托管 n 消费可以通过 3 种方式完成 1.self-hosting 2.IIS 3.作为 Windows 服务,因此打开 TCP 端口并使用它,属于 self-托管还是托管 n 消耗 wcf 服务的另一种方式,还是有任何其他方式,即在 TCP 下?

标签: tcp wcf wcf-binding net.tcp


【解决方案1】:

在 WCF 中,您可以自己托管任何服务,方法是创建 ServiceHost 类的实例,使用正确的端点和您希望公开的服务实现对其进行配置,然后在其上调用 Open。这称为自托管,因为您在自己的应用程序中托管服务(及其端口侦听器)。

或者,您可以在 IIS 中托管您的服务,但您应该注意,虽然您可以在 IIS 6 中托管 WCF,但它只允许您托管 HTTP 和 HTTPS 端点。如果您想在 IIS 中托管 TCP 端点(这是个好主意),您将需要 IIS 7。

阅读更多here

【讨论】:

  • 所以基本上,在 windows xp 托管 n 消费可以通过 3 种方式完成 1.self-hosting 2.IIS 3.作为 Windows 服务,因此打开 TCP 端口并使用它,属于 self-托管还是托管 n 消耗 wcf 服务的另一种方式,还是有任何其他方式,即在 TCP 下?
  • Windows XP 不运行 IIS 7,因此您无法在 XP 下的 IIS 上托管 TCP 端点。您可以让 Windows 服务托管 WCF 服务,但这只是自托管的另一个示例。
【解决方案2】:

您可以使用任何端口(前提是您获得了许可)来托管您的 wcf 服务。当使用 IIS 托管 wcf 服务时,情况有些不同,但在自托管环境中,只需将端口号添加到您的基地址即可。 (当使用 Vista 或 Server 2008 时,您必须在不以管理员权限运行时(例如使用 netsh)授予对端口的访问权限)

使用例如用于 http 服务(或 net.tcp)的端口 1337 只需将“:1337/”添加到您的基地址,剩下的就为您完成了。

【讨论】:

  • 所以基本上,在 windows xp 托管 n 消费可以通过 3 种方式完成 1.self-hosting 2.IIS 3.作为 Windows 服务,因此打开 TCP 端口并使用它,属于 self-托管还是托管 n 消费 wcf 服务的另一种方式,还是有其他方式?
  • 更多关于使用 netsh 打开端口的信息:msdn.microsoft.com/en-us/library/ms733768.aspx
【解决方案3】:

可能是这个帮助

<services>
  <service behaviorConfiguration="configname"
    name="servicename">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="MyServiceBinding"
      name="NetTcpBindingEndpoint" bindingName="MyServiceBinding"
      contract="Interface">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>

    <endpoint address="mex" binding="customBinding" bindingConfiguration="myMexTcpBinding"
      name="MexTcpBindingEndpoint" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:prot/TestService" />
      </baseAddresses>
    </host>
  </service>
</services>

【讨论】:

    【解决方案4】:

    所有 HTTP 绑定都与 TCP 一起用于传输层。因此,您可以使用 HTTP 绑定和 IIS.6 来托管在特定 TCP 端口上运行的 WCF 服务。

    这里有一个关于如何实现这一点的演练:

    • 从配置文件(或代码)配置服务以在所需端口上运行:

      <service name="WCFService" behaviorConfiguration="DefaultBehaviour">
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8000/WCFService" />
        </baseAddresses>
      </host>
      <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="WCFService_mexEndpoint" contract="IMetadataExchange" />
      <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultBinding" name="WCFService_Endpoint" contract="WCFService.IService1" />
      

    • 在 IIS 中创建一个网站(或虚拟目录)并将其绑定配置为在您在 baseAddress 服务配置中选择的端口上运行(以上示例为 8000)。

    上述步骤的结果是一个 WCF 服务,它运行在 TCP 端口 8000 上作为传输层,使用 HTTP 作为传输协议。

    编辑:我相信你在这里有点困惑。如果您要实现的是二进制传输包,那么目前唯一的解决方案是 net.tcp 绑定,它与 IIS.6 不兼容。如果您只是希望能够选择连接的 TCP 端口,那么任何 HTTP 绑定都可以按照上面的示例执行此操作,并且可以在 IIS.6 中使用。

    【讨论】:

    • 所以基本上,在 windows xp 托管 n 消费可以通过 3 种方式完成 1.self-hosting 2.IIS 3.作为 Windows 服务,因此打开 TCP 端口并使用它,属于 self-托管还是托管 n 消耗 wcf 服务的另一种方式,还是有任何其他方式,即在 TCP 下?
    • 我认为您可以在 IIS 7 中使用 WAS 托管 TCP。
    • HTTP 是一种应用协议,而不是传输协议。
    【解决方案5】:

    我知道有点晚了。但是,我想你可以使用 Visual Studio 附带的“WCF 服务主机”应用程序。

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多