如何在同一个套接字上托管WCF服务和TCP服务器?

时间:2010-04-03 19:57:45

标签: c# wcf sockets tcp servicehost

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

我想在我的WCF服务附近托管我自己的TCP程序,用于直接套接字操作(比如某种广播TCP流的留置权)

我需要控制URL命名空间(因此我可以让我的客户端使用一些很好的URL直接将TCP流发送到我的服务中,例如example.com:port/myserver/stream?id=1或example.com: port / myserver / stream?id = any,所以我不会在1个socket的1个客户端的想法中烦恼,我真的想把我的WCF服务放在和我自己的服务器相同的端口上,或者它是什么所以能够打电话给www.example.com:port/myWCF/stream?id=222 ...我希望它可以在任何端口上工作 - 不仅仅是80)

任何人都可以帮我这个吗?

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

的许多原因之一

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

我需要快速而简单地实现连接协议,就像我在套接字中创建的那样,实时用于数据传输。

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

3 个答案:

答案 0 :(得分:1)

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

另一方面,通过编写自己的自定义绑定,可以大大加快WCF的速度。很多时候WCF在使用反射(这很慢)完成的序列化时会失败,绕过这会大大提高你的速度。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

不确定这是否会对您有所帮助,但请尝试启用Net TCP共享服务。