ASP.NET中的Socket编程?

6
我们能在ASP.NET/WCF中进行套接字编程吗?就像服务侦听一个端口以等待传入请求。来自网络外部的所有客户端也会发布/侦听该ip:port。
每当服务在端口上写入任何内容时,所有客户端都会收到该内容而无需轮询。
ASP.NET/WCF是否支持这样的功能?
谢谢。

好奇,你为什么想在网站中进行套接字编程? - Charles Boyung
事实是,我开发了一个基于C#的桌面服务器,它在我的云服务器上侦听传入请求。这将绑定到本地IP上的端口。我的云基础设施提供商拒绝将公共IP:端口号上收到的请求转移到本地IP:端口号,而服务器绑定侦听的位置。我甚至无法将我的服务器应用程序绑定到公共IP上进行侦听! - Jayesh
1
@CharlesBoyung,就目前而言,我们必须与一个名为MACCO的韩国电子商务服务进行通信。他们的界面是基于套接字的。非常奇怪、狂野的事情。 - MrBoJangles
4个回答

2

正如alexanderb提到的,System.Net.Sockets命名空间中确实有.NET套接字支持。我刚和同事一起完成了一个WCF Web服务,该服务与韩国基于套接字的服务进行通信。我们只是发送一些信息并快速整理返回一些信息。以下是一些套接字代码示例:

const string ipAddressString = "xxx.xxx.xxx.xxx";// replace with correct IP address
IPAddress ipAddress = IPAddress.Parse(ipAddressString);
const int portNum = 1234;// replace with correct port
IPEndPoint remoteEndPoint = new IPEndPoint(ipAddress, portNum);

Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Connect(remoteEndPoint);
string sendString = "some stuff you want to send";
byte[] bytes = Encoding.UTF8.GetBytes(sendString.ToString());
client.Send(bytes);
byte[] receiveBuffer = new byte[128];
client.Receive(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None);
string bufferString = Encoding.GetEncoding(949).GetString(receiveBufferSize);
client.Shutdown(SocketShutdown.Both);
client.Close();

为了保持简单和专注于套接字,本文省略了try-catch等内容。关键要点在于Socket的构造、Connect()Send()Receive()。还有Shutdown()Close()。请注意,在三天前之前,我认为Socket是墙上插东西的那个东西,所以这应该是相当基础的。但是,它确实可以工作!


请注意 GetEncoding(949),这是针对韩文字符的,您更可能使用类似于 "Encoding.UTF8.GetString(...)" 的东西。 - MrBoJangles
1
修改了您的帖子:套接字支持在.NET中,而不是ASP.NET中。 - John Saunders
你说得对,这是微妙但重要的区别,感谢您的提示。 - MrBoJangles

1

如果你在谈论WCF/ASP.NET,那么这两个比套接字层次高得多。 回答你的问题 - 是的,你可以使用.NET框架进行套接字编程。

http://msdn.microsoft.com/en-us/library/system.net.sockets.aspx

编辑

顺便说一下,当我听到“套接字……云”时,我感觉有些不对劲,你可能遗漏了某些东西。考虑到当前可用的分布式/网络编程技术,现在进行套接字编程似乎是不合逻辑的。


3
我同意许多曾经需要使用套接字编程的事情现在不再需要手动编码,但我不同意套接字编程完全是不合逻辑的。 - pqsk

1

即使您真的可以在Asp.Net中进行套接字编程,您试图做的事情也不会起作用。 Asp.Net不像服务一样持续“运行”。它在一段时间内(没有Web请求)之后关闭,并在新的Web请求时重新启动。您的套接字代码只会在Web请求发生时运行,直到发生不活动超时为止。


0

你不需要WCF或ASP.NET来做那件事。你可以查找使用.NET的UDP套接字编程。


问题是我开发了一个基于C#的桌面服务器,它在我的云服务器上侦听传入请求。这将绑定到本地IP上的端口。我的云基础设施提供商拒绝将公共IP:端口号上收到的请求转移到绑定服务器侦听的本地IP:端口号。而且我甚至无法将我的服务器应用程序绑定到公共IP以进行侦听! - Jayesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接