Frage

Ich suche einen kleinen Web-Service zu schreiben, auf einer kleine Linux-Box läuft. Ich bevorzuge Code in C #, so dass ich bin auf der Suche Mono zu verwenden.

Ich will nicht den Aufwand für einen vollständigen Web-Server oder Mono-Version von ASP.NET ausgeführt wird. Ich denke, mit jeder Client-Verbindung einen einzigen Prozess mit einem Gewinde Umgang zu haben. Shared Memory zwischen Threads statt einer Datenbank.

Ich habe ein wenig auf dem Microsoft-Version von Httplistener lesen und wie es funktioniert mit den Http.sys-Treiber. Ach, Dokumentation des Mono auf dieser Klasse ist nur die automatische Klassenschnittstelle ohne Diskussion darüber, wie es funktioniert unter der Haube. (Linux hat nicht Http.sys, so stelle ich mir es wesentlich anders implementiert ist.)

Könnte jemand Punkt mich auf einige Ressourcen dieses Modul diskutieren bitte?

Vielen Dank, Bill, billpg.com

(Ein wenig Hintergrund auf meine Frage für die interessiert.)

Vor einiger Zeit, ich habe diese Frage , interessiert ein langes Gespräch offen mit viel Hin und her zu halten. Ich niedergelassen hatte mein eigenes Ad-hoc-Protokoll auf der Gestaltung, sondern Menschen, die ich sprach wollten wirklich eine REST-Schnittstelle, auch auf Kosten des „Okay, Ihren Befehl senden jetzt“ -Signal aus.

So fragte ich mich über ASP.NET läuft auf einem Linux / Mono-Server, sondern eher zufällig auf Httplistener. Dies schien ideal, da jedes „Gespräch“ in einem separaten Thread ausführen könnte. Der Faden, dass Anrufe Httplistener in einer Schleife, für den Faden aussehen können jede Verbindung für incomming ist und die Bezugnahme auf diesen Faden übergeben.

Die Alternative für einen ASP.NET angetrieben Service, wäre der ASPX Code zu haben, den Zustand aus einer Datenbank holen, und schreiben Sie den neuen Zustand zurück, wenn es fertig ist. Ja, es würde funktionieren, aber das ist eine Menge Aufwand.

War es hilfreich?

Lösung

Grüße, Die Httplistener Klasse in Mono funktioniert ohne viel von einem Problem. Ich denke, dass der bedeutendste Unterschied zwischen seiner Verwendung in einer MS-Umgebung und eine Linux-Umgebung ist, dass Port 80 nicht auf ohne root / su / sudo Sicherheit gebunden sein. Andere Ports haben diese Einschränkung nicht. Wenn Sie das Präfix zum Beispiel angeben: http://localhost:1234/ die Httplistener funktioniert wie erwartet. Allerdings, wenn Sie das Präfix http://localhost/ hinzufügen, die Sie auf Port 80, es nicht leise hören erwarten würden. Wenn Sie ausdrücklich zu binden Port versuchen, 80 ( http: // localhost: 80 / ), dann werfen Sie eine Ausnahme. Wenn Sie invoke Ihre Anwendung als Superuser oder root können Sie explizit binden an Port 80 ( http: // localhost: 80 / ).
Ich habe noch nicht den Rest der Httplistener Mitglieder detailliert genug erforscht, um alle nützlichen Anmerkungen zu machen, wie gut es in einer Linux-Umgebung arbeitet. Wenn es jedoch Interesse ist, werde ich weiterhin meine Beobachtungen veröffentlichen.

chickenSandwich

Andere Tipps

Ich bin nicht sicher, warum Sie so tief in die Haube zu suchen. Auch auf Microsoft Seite, die Dokumente über http.sys können Sie nicht wirklich wertvolle Informationen, wenn Sie das .NET Framework verwenden.

Um zu wissen, ob etwas funktioniert auf Mono gut genug ist, werden Sie immer soll seine VMware oder VPC Image herunterzuladen und testen Sie Ihre Anwendungen auf sie.

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

Obwohl Mono ist viel reifer mehr als vor ein paar Jahren, können wir nicht sagen, dass es von genügend realen Anwendungen wie Microsoft.NET getestet wurde. So Test bitte Sie Ihre Anwendungen und legt Fragen Sie Mono-Team finden.

Aufgrund meiner Erfahrung, kleinere Probleme behoben innerhalb von nur wenigen Tagen, während für die großen Probleme es eine längere Zeit in Anspruch nimmt. Aber mit Mono-Quellcode verfügbar sind, können Sie auf eigene Faust beheben oder gute Abhilfen die meisten der Zeit erfahren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top