Question

Je cherche à écrire un petit service Web pour fonctionner sur une petite boîte Linux. Je préfère le code en C #, donc je suis à la recherche d'utiliser Mono.

Je ne veux pas avoir à exécuter un serveur web complet ou la version Mono de ASP.NET. Je pense d'avoir un seul processus avec un fil traitant à chaque connexion client. Mémoire partagée entre les fils à la place d'une base de données.

J'ai lu un peu sur la version de Microsoft HttpListener et comment il fonctionne avec le pilote Http.sys. Hélas, la documentation de Mono sur cette classe est juste l'interface de classe automatisée sans discussion sur la façon dont il fonctionne sous le capot. (Linux n'a pas http.sys, donc j'imagine qu'il est mis en œuvre essentiellement différente.)

pourrait-point quelqu'un me vers des ressources discuter ce module s'il vous plaît?

Merci beaucoup, Bill, billpg.com

(Un peu de fond à ma question pour l'intéressé.)

Il y a quelque temps, j'ai demandé cette question , intéressé à garder une longue conversation ouverte avec beaucoup de va-et-vient. J'étais installé sur la conception de mon propre protocole ad hoc, mais les gens que je parlais vraiment voulu une interface REST, même au prix de la « Ok, envoyez votre commande maintenant » le signal.

Alors, je me suis demandé sur l'exécution d'ASP.NET sur un serveur Linux / Mono, mais trébuché sur HttpListener. Cet idéal semblait, chaque « conversation » pourrait fonctionner dans un thread séparé. Le thread qui appelle HttpListener dans une boucle peuvent regarder pour lesquels chaque connexion fil incomming est et passer la référence à ce fil.

L'alternative pour un service axée sur ASP.NET, serait d'avoir le code ASPX ramasser l'état d'une base de données et écrire de nouveau le nouvel état quand il se termine. Oui, cela fonctionnerait, mais c'est beaucoup de frais généraux.

Était-ce utile?

La solution

Bonjour,    La classe HttpListener Mono fonctionne sans trop de problème. Je pense que la plus grande différence entre son utilisation dans un environnement MS et un environnement Linux est que le port 80 ne peut pas être lié à sans racine / su / sécurité sudo. D'autres ports ne sont pas cette restriction. Par exemple, si vous spécifiez le préfixe: http://localhost:1234/ le HttpListener fonctionne comme prévu. Toutefois, si vous ajoutez le préfixe http://localhost/, ce que vous attendez d'écouter sur le port 80, il échoue silencieusement. Si vous essayez explicitement de se lier au port 80 ( http: // localhost: 80 / ) puis vous jetez une exception. Si vous appelez votre application en tant que super-utilisateur ou root, vous pouvez lier explicitement le port 80 ( http: // localhost: 80 / ).
   Je ne l'ai pas encore exploré le reste des membres de HttpListener suffisamment détaillée pour faire des commentaires utiles sur la façon dont il fonctionne dans un environnement Linux. Cependant, s'il y a intérêt, je continuerai à poster mes observations.

chickenSandwich

Autres conseils

Je ne sais pas pourquoi vous voulez regarder si profondément dans le capot. Même sur le côté Microsoft, les documents sur http.sys ne peut pas vous fournir des informations vraiment utiles si vous utilisez le .NET Framework.

Pour savoir si quelque chose fonctionne sur Mono assez de bon, vous êtes toujours censé télécharger son image VMware ou VPC et tester vos applications sur elle.

http://www.go-mono.com/mono-downloads /download.html

Bien que Mono est beaucoup plus mature qu'il ya quelques années, nous ne pouvons pas dire qu'il a été testé par des applications assez réelles comme Microsoft.NET. Alors, testez vos applications et soumettre les problèmes que vous trouverez à l'équipe Mono.

D'après mon expérience, des problèmes mineurs sont fixés en seulement quelques jours, alors que pour les grandes questions qu'il faut un temps plus long. Mais avec le code source Mono disponible, vous pouvez fixer vous-même ou trouver de bonnes solutions de contournement la plupart du temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top