6
votes

Programmation de socket dans ASP.NET?

Pouvons-nous faire une programmation de socket dans ASP.NET/WCF? Comme le service écoute sur un port pour les demandes entrantes. Tous les clients de l'extérieur du réseau publient également / écoutent sur cette adresse IP: port

Chaque fois que le service écrit quelque chose sur le port, tous les clients obtiennent cette chose sans interrogation.

est quelque chose comme ça possible avec asp.net/wcf?

merci


3 commentaires

Curieux, pourquoi voudriez-vous faire une programmation de socket sur un site Web?


La chose est que j'ai développé un serveur dektop basé sur C # qui écoute les demandes entrantes sur mon serveur Cloud. Ceci se lie au port de la propriété intellectuelle locale. Mon fournisseur d'infrastructure de nuage refuse de transférer des demandes de transfert sur Public-IP: Port_no à local-IP: port_no où le serveur est tenu d'écouter. Et je ne peux même pas lier mon application de serveur à écouter sur une IP publi-IP!


@Charlesboyung, pour ce que ça vaut la peine, nous devons communiquer avec un service coréen appelé Macco pour le commerce électronique. Leur interface est basée sur la prise. Stuff bizarre et sauvage.


4 Réponses :


0
votes

Vous n'avez pas besoin de wcf ou d'asp.net pour cela. Vous pouvez rechercher la programmation de la prise UDP avec .NET.


1 commentaires

La chose est que j'ai développé un serveur dektop basé sur C # qui écoute les demandes entrantes sur mon serveur Cloud. Ceci se lie au port de la propriété intellectuelle locale. Mon fournisseur d'infrastructure de nuage refuse de transférer des demandes de transfert sur Public-IP: Port_no à local-IP: port_no où le serveur est tenu d'écouter. Et je ne peux même pas lier mon application de serveur à écouter sur une IP publi-IP!



1
votes

Si vous parlez de wcf / asp.net, ces deux sont beaucoup "plus élevés" au-dessus du niveau de la prise. Répondre à vous question - Oui, vous pouvez faire une programmation de socket avec .NET Framework.

http://msdn.microsoft.com/fr- US / Bibliothèque / System.Net.Sockets.aspx

Modifier

BTW, je sens quelque chose qui ne va pas alors entendre des "prises .. nuage", vous êtes probablement manqué quelque chose. Prenant en compte Techlologices d'Avaliables pour la programmation distribuée / réseautage faisant de la programmation de socket De nos jours, semble illogique.


1 commentaires

Je conviens que beaucoup de choses utilisées pour nécessiter une programmation de socket ne devaient plus être codées à la main, mais je suis en désaccord que la programmation de la prise est complètement illogique.



1
votes

Ce que vous essayez de faire ne fonctionnerait pas même si vous pouviez vraiment faire une programmation de socket dans ASP.NET. ASP.NET n'est pas continuellement "en cours d'exécution" comme un service. Il s'éteint après une période d'inactivité (aucune demande Web faite) et redémarre à nouveau avec de nouvelles demandes Web. Votre code de prise ne fonctionnerait que lorsqu'une demande Web effectuée jusqu'à ce que le délai d'inactivité se produise.


0 commentaires

2
votes

Comme Alexanderb lié, il y a en effet la prise en charge de la prise .NET dans l'espace de noms System.net.Sockets. Comme je viens de terminer, avec un collègue, un service Web de la WCF qui communique avec un service à socket en Corée. Nous envoyons simplement des informations et obtenons des informations, rapides, bien rangés. Voici un exemple de code SOCKETY:

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();


3 commentaires

Notez le getcoding (949), c'est-à-dire pour les caractères coréens et vous utiliseriez plus probablement quelque chose comme "encoding.utf8.getstring (...)"


Modifié votre message: le support de socket est en .NET, pas ASP.NET.


Vous avez raison, une différence subtile mais importante, merci pour la pointe.