在C#应用程序中使用FastCGI应用程序

时间:2011-01-21 15:06:30

标签: c# php fastcgi

我正在用C#开发一个小型网络服务器作为一个大项目的一部分(该项目的性质使我无法使用apache nginx,这将是我的首选)。

Web服务器需要PHP来处理它收到的一些请求。

目前我正在使用System.Diagnostics.Process运行php作为cgi并管道数据。这工作但很慢(可能是从PHP开始从头开始的开销,是主要问题)。所以我想尝试使用FastCGI。

我看过FastCGI规范,并开始实现一个基本的子集,但运气不好。 我见过的大多数示例都是用于开发FastCGI模块的库,而不是用于调用它们的库,所以我几乎没有用作参考。

有没有人在.NET下有过这方面的经验,或者可以为这类项目推荐任何有用的资源?

2 个答案:

答案 0 :(得分:2)

我还必须做类似的事情(在过渡期间)并使用MiniHttpd: an HTTP web server library。我不得不做的是略有不同,因为我不需要httpd而是从C#应用程序执行PHP的方法。

它基本上使用磁盘上的文件直接引用DLL中的非托管代码(请参阅PhpAppDirectory.cs)。

答案 1 :(得分:0)

我必须做同样的事情,这很容易做到,

如果你只是用cmd运行php-cgi exe和测试php文件,你会看到它输出

C:\Program Files (x86)\PHP>php-cgi c:/xampp/php/test.php
X-Powered-By: PHP/5.3.6
location test.php
Content-type: text/html

relocated

这是我的例子,你需要做的就是调用php-cgi并在响应中读取

第一个双重中断是你的标题停止并且输出发生的地方,所以如果你的控制台输出在变量EG public string phpOutput中,那么你只需要一个正则表达式将它拆分为\ n \ n但是设置计数为1,因此只在第一次出现时才会分割\ n \ n,

E.G

Regex.Split(phpOutput, "(\r\n){2,}|\n{2,}|\r{2,}", RegexOptions.ExplicitCapture);