Domanda

Sto cercando di scrivere un piccolo servizio web per funzionare su una piccola scatola di Linux. Io preferisco il codice in C #, quindi sto cercando di usare Mono.

Non voglio che il sovraccarico di esecuzione di un server web completo o la versione di Mono di ASP.NET. Sto pensando di avere un unico processo con un filo di negoziazione con ogni connessione client. Memoria condivisa tra i thread, invece di un database.

Ho letto un po 'nella versione di Microsoft di HttpListener e come funziona con il driver Http.sys. Ahimè, la documentazione di Mono su questa classe è solo l'interfaccia di classe automatizzata senza discussione di come funziona sotto il cofano. (Linux non ha Http.sys, quindi immagino è implementato sostanzialmente diverso.)

Si poteva punto verso alcune risorse parlano di questo modulo me per favore?

Molte grazie, Bill, billpg.com

(Un po 'di fondo alla mia domanda per gli interessati.)

Qualche tempo fa, ho chiesto questa domanda , interessati a mantenere una lunga conversazione aperta con un sacco di avanti e indietro. Avevo optato per progettare il mio protocollo ad hoc, ma la gente con cui ho parlato ha voluto davvero un'interfaccia REST, anche a costo del segnale "Okay, invia il tuo ordine ora".

Quindi, mi sono chiesto sull'esecuzione di ASP.NET su un server Linux / Mono, ma incappato in HttpListener. Questo ideale sembrava, come ogni "conversazione" potrebbe funzionare in un thread separato. Il filo che le chiamate HttpListener in un loop possono cercare quale thread ogni connessione in entrata è per e passano il riferimento a quel filo.

L'alternativa per un servizio guidato ASP.NET, sarebbe quella di avere il codice ASPX raccogliere lo stato da un database e scrivere di nuovo il nuovo stato quando finisce. Sì, che avrebbe funzionato, ma questo è un sacco di spese generali.

È stato utile?

Soluzione

Saluti,    La classe HttpListener in Mono funziona senza un gran problema. Credo che la differenza più significativa tra il suo utilizzo in un ambiente MS e un ambiente Linux è che la porta 80, non può essere associato a senza un / su / sicurezza di root sudo. Altre porte non hanno questa limitazione. Per esempio se si specifica il prefisso: http://localhost:1234/ la HttpListener funziona come previsto. Tuttavia, se si aggiunge il http://localhost/ prefisso, che ci si aspetterebbe di ascolto sulla porta 80, non riesce in silenzio. Se si tenta esplicitamente a collegarsi alla porta 80 ( http: // localhost: 80 / ), allora si un'eccezione. Se si richiama l'applicazione come superutente o root, è possibile associare in modo esplicito alla porta 80 ( http: // localhost: 80 / ).
   Non ho ancora esplorato il resto dei membri HttpListener in dettaglio sufficiente per fare qualsiasi commento utili su come ben si opera in un ambiente Linux. Tuttavia, se v'è interesse, io continuerò a pubblicare le mie osservazioni.

chickenSandwich

Altri suggerimenti

Non sono sicuro che il motivo per cui si vuole guardare così in profondità nel cofano. Anche sul lato Microsoft, i documenti su http.sys potrebbero non fornire un servizio di informazione veramente utile se si utilizza il .NET Framework.

Per sapere se qualcosa funziona su Mono abbastanza buono, si sono sempre tenuti a scaricare la sua immagine VMware o VPC, e testare le applicazioni su di esso.

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

Anche se Mono è molto più maturo rispetto a qualche anno fa, non si può dire che è stato testato da numero sufficiente di applicazioni reali come Microsoft.NET. Quindi, per favore prova le vostre applicazioni e presentare problemi che si trovano al team di Mono.

In base alla mia esperienza, problemi minori sono fissi nel giro di pochi giorni, mentre per i grandi problemi ci vuole un tempo più lungo. Ma con Mono codice sorgente disponibile, è possibile risolvere da soli o scoprire buone soluzioni maggior parte delle volte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top