【问题标题】:How to host WCF service and TCP server on same socket?如何在同一个套接字上托管 WCF 服务和 TCP 服务器?
【发布时间】:2010-04-03 19:57:44
【问题描述】:

今天我使用 ServiceHost 来自托管 WCF 服务。

我想在我的 WCF 服务附近托管我自己的 TCP 程序以进行直接套接字操作(例如留置到某种广播 TCP 流)

我需要控制 URL 命名空间(这样我就可以让我的客户端使用一些不错的 URL,例如 example.com:port/myserver/stream?id=1 或 example.com 将 TCP 流直接发送到我的服务中: port/myserver/stream?id=anything ,这样我就不会被 1 个客户端用于 1 个套接字的想法所困扰,我真的想将我的 WCF 服务保持在与我自己的服务器相同的端口上,或者它是什么所以能够调用 www.example.com:port/myWCF/stream?id=222... 我希望它可以在任何端口上工作 - 不仅是 80)

任何人都可以帮我解决这个问题吗?

我现在只使用 WCF。而且我不喜欢它是如何工作的。这就是为什么我要开始迁移以清除 TCP=)

的众多原因之一

我不能使用 net-tcp 绑定或任何其他很酷的 WS-* 绑定(今天我使用最简单的绑定,以便我的客户(如 Flash、AJAX 等)轻松连接到我)。

我需要快速简单地实现连接协议,就像我使用套接字创建的用于实时大量数据传输的连接协议一样。

所以.. 有什么想法吗?请 - 我需要帮助。

【问题讨论】:

  • 您可以在 WCF 中编写自定义传输。看到这个问题 - stackoverflow.com/questions/381142/…
  • 我没有看到仅使用 WCF 有什么问题。它不能做什么你需要它做什么?
  • WCF 对于通过 TCP 套接字进行的无限实时高分辨率数据传输来说太慢和错误。
  • Jak:你是怎么测量的?

标签: c# wcf sockets tcp servicehost


【解决方案1】:

如果您打算使用纯套接字,您也可以让您的服务充当代理。让 WCF 服务在其他端口上侦听,并在所需端口上侦听您的应用程序。当您在应用程序中收到请求时,手动解析标头并检查它是否适用于您的服务或 WCF 服务。如果它是用于 WCF 服务的,打开一个到 WCF 服务的 TCP 连接并将接收到的数据传递给它,然后简单地将 WCF 的答案传回给客户端。..

另一方面,您可以通过编写自己的自定义绑定来大大加快 WCF。 WCF 在使用反射完成的序列化上花费了很多时间(这很慢),解决这个问题会大大提高您的速度。

【讨论】:

    【解决方案2】:

    如果您的 WCF 问题是性能问题,那么您应该尝试使用二进制网络 TCP 绑定来消除 XML 序列化以提高性能。

    一些高流量应用程序(例如实时游戏)使用 UDP 进行大部分通信,因为它会通过协议进行通信。使用 TCP,您可以获得内置的排序和可靠性,但这是以性能为代价的,因为它会隐式延迟数据包以等待乱序数据包,以便它可以以正确的顺序将它们交给应用程序,或者等待丢失的数据包被怨恨。相反,您可以使用 UDP 并实施自己的方案来验证比 TCP 不那么严格的数据。

    有可用于 WCF 的 UDP 选项,或者您可以实现自己的选项。 WCF 只不过是一个消息泵,你可以用任何你想要的替换不同的步骤。

    【讨论】:

    • 我不能使用 net-tcp 绑定,因为如果从 Flash 和其他东西连接起来非常困难。我迫切需要快速、更轻松地实现连接协议,就像我创建的用于实时大量数据传输的套接字一样。我对套接字连接的唯一问题是 - 我无法让它们与 WCF 良好配对(在同一个套接字上,以便我的 TCP 服务器可用,就像我调用我的 WCF 服务一样 - 通过简单但可读的地址)
    • 我根本不能使用 UDP,因为我的老板很伤心,我们真的需要确保所有数据都到达客户端
    • 但是为了确保数据来自客户端,UDP 有什么不同呢?是的,您可以非常确定 IP 地址是正确的。但是,如果它是一个公共站点,您将无法真正知道是哪个客户在拨打电话。
    • 理查德是对的。如果您需要某种真实性保证,那是加密身份验证方案的工作,而不是网络协议的工作。
    【解决方案3】:

    不确定这是否对您有帮助,但请尝试打开您的网络 TCP 共享服务。

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多