2010-06-19 8 views
5

Je suis en train de développer un petit serveur supposé s'interfacer via http. Comme je veux qu'il soit utilisable avec différents serveurs http matures, j'ai choisi FastCGI comme interface commune.Existe-t-il une bibliothèque .NET FastCGI?

Maintenant, je ne peux pas trouver une bibliothèque .NET (gratuite) qui implémente l'interface FCGI et fait tout le travail dur pour moi. En connaissez-vous un?

Répondre

2

Non pas que je suis au courant (je suis également)

L'une des difficultés réside dans le fait que FastCGI semble exiger que vous passez une poignée à une prise écouteur à un processus enfant à la place de le handle StdIn normal - quelque chose que les classes standard .Net (Processus, Socket etc ...) ne permettent pas. Cela signifie que l'implémentation d'une bibliothèque FastCGI dans .Net nécessite finalement de réimplémenter les classes Process et Socket en utilisant les appels P/Invoke aux fonctions Windows natives.

+0

Merci pour votre réponse. Je suis toujours à la recherche d'une telle bibliothèque. Je n'étais pas au courant de ces difficultés, alors peut-être qu'il serait plus facile de créer un wrapper natif autour de la bibliothèque c et de transmettre les requêtes à mon serveur géré? – Milan

+0

@ entity64 Cela semble être une bonne idée - l'alternative serait de le ré-implémenter dans un langage .Net. – Justin

+0

Je ne comprends pas votre deuxième point. D'après ce que je comprends, il y a le serveur web qui est client d'un processus fastcgi (serveur) pour transmettre les requêtes. Ce processus peut être lui-même client pour un autre processus de serveur. Dans ma compréhension, il n'est pas nécessaire de transférer la propriété de la socket qui gère l'interface webserver/fastcgi. – schoetbi

2

J'ai récemment mis en œuvre une telle bibliothèque en F #: SharpCGI

également complètement utilisable à partir de C#. Le problème décrit par Kragen est résolu avec un hackery Win32, exploitant les internes .NET. Cependant, vous n'avez pas besoin de l'utiliser si vous configurez votre serveur Web pour utiliser un port désigné pour FastCGI à la place.

+1

Est-ce que SharpCgi fonctionne sur Mono, et comment le problème décrit par Kragen affecte-t-il une configuration SharpCgi sur Mono? – ssn

1

Oui, il existe de nombreuses bibliothèques comme SharpCGI et FCGIDotNet, mais elles implémentent toutes le côté serveur du protocole. J'ai encore besoin de trouver du code pour parler à un serveur FastCGI existant, c'est juste le contraire de ce que font toutes ces bibliothèques (bien que le code soit à 90% identique).

+0

jeter un oeil à nginx;) –

+0

@Quandary Ce n'est pas écrit en C# – Muis

2

Je suis venu ici après tout ce temps pour dire que j'ai créé une bibliothèque FastCGI écrite en C# qui pourrait être utile aux futurs lecteurs. Ce n'est pas très documenté (FastCgi est une norme assez simple, donc je ne vois pas pourquoi ça serait) mais je pense que c'est assez bien documenté pour être utilisé par d'autres.
Actuellement, il expose une API à la fois pour les serveurs d'applications et pour les serveurs Web, bien que certaines fonctionnalités puissent encore manquer. Vous devriez toujours vérifier.
Je ne l'ai pas beaucoup touché ces derniers temps mais ça marche très bien pour moi (je l'utilise toujours). Vous pouvez le télécharger via NuGet ou sur mon GitHub. Il est appelé FastCgiNet.

2

Voir Mono.WebServer.FastCGI à
https://github.com/mono/xsp/tree/master/src

Il y a aussi un FastCGI CLIENT ici:
http://sourceforge.net/projects/fcgidotnet/

Et la spécification FastCGI est ici:
http://www.fastcgi.com/devkit/doc/fcgi-spec.html

Vous pouvez trouver une mise en œuvre conforme OWIN ici:
https://github.com/mzabani/Fos

De plus, ces bibliothèques sont également intéressantes:


HyperFastCGI:
https://github.com/xplicit/HyperFastCgi

ou
https://github.com/gigi81/sharpfastcgi

ou #cgi
https://github.com/wmeyer/SharpCGI

Si vous avez besoin d'autres exemples sur FastCGI CLIEN Ts, vous pouvez jeter un oeil à cette bibliothèque

aller

https://github.com/tomasen/fcgi_client