将PHP与asp.net / asp.net-mvc集成的最佳方法

时间:2009-09-06 15:01:24

标签: php asp.net integration

巧合的是,这个问题在上周出现了两次。

客户拥有他们想要保留的现有PHP网站。他们还拥有或即将拥有一些他们希望以一种单一网站显示的方式整合到现有网站的ASP.net网页。

我们有以下可能性:

  • 使用IFrame
  • 将所有html /菜单复制到新网站并在网站之间进行链接,用户在网站之间移动但不注意,如果他不查看网址
  • 使用Web服务从asp.net网站读取信息,并在PHP网站上编写html。
  • 使用WSRP(Web服务远程Portlet)。已经测试过这个在Java站点上显示Sharepoint webparts,还没有用PHP测试过。

有没有人尝试过这些?有更好的建议吗?我们应该明确避免吗?

由于

西拉

3 个答案:

答案 0 :(得分:3)

这实际上取决于可接受的整合水平。您的原始建议存在许多可维护性问题,我不建议将它们用于面向公众的网站。

如果我有完全控制权,我可能会考虑将PHP站点迁移到IIS,并将ASP.NET页面与PHP文件一起部署到站点。这可能非常棘手,具体取决于PHP站点的构建方式。您可能遇到的问题包括:

  • 在PHP应用程序中使用mod_rewrite以及您是否在Windows上有合适的替代品。在撰写本文时,这种情况要好得多,但您可能需要调试现有配置。
  • 扩展。您需要在Windows上使用所有PHP库和扩展吗?
  • 性能。有些人报告说在Windows下PHP的性能令人无法接受。我确信通过正确的性能调整,您可以提供与旧网站相当的东西,如果这是一个问题。

根据您建议的选项

  • 使用IFrame 。这是可行的,但有点笨重,如果您需要代码库之间的SSL或JavaScript交互等事情,可能会出现问题。
  • 网站之间的链接。这是可行的,但如果SEO对您很重要,可能会出现问题。有时,除了您需要考虑的菜单之外,还有更多的链接。
  • 使用Web服务读取ASP.NET页面。如果你有非常简单的页面没有交互或回发,这才真正可行。如果您需要处理回发,查看状态等,您将遇到麻烦。使用ASP.NET MVC可以为您提供更多控制,并以这种方式集成更轻松的体验。我个人的意见是,这是非常hacky,只有我会为一个页面做的事情(如果它真的很重要)。
  • 使用WSRP(Web服务远程Portlet)。我不确定这是常规ASP.NET的一个选项,我一直认为这是SharePoint的附加功能。

答案 1 :(得分:3)

所有这些选项都完全落空了!

简单的解决方案是将解决方案单独托管,Apache& IIS分别。 并通过路由处理集成。可以使用“Cookie”

来处理身份验证

我们最近为没有问题的客户处理了这个问题

网络前端基于wordpress& mySQL和整个报告模块是基于SQL Server 2008 r2的MVC 3/4。

我们刚刚使用了子域名.i.e。 www.somecompany.com用于网站和reports.somecompany.com用于报告。

然后我们写了一个简单的wordpress扩展,用于存储包含相关信息的链接数据以创建报告。 即用户的Guid ID和报告类型等。

其实基本上只向用户显示了一个页面,其中包含可以运行的一些报告选项 - 超链接<a href="http://reports.somecompanyurl.com/bill/{some guid}>You Monthly Bill</a>

即。每月账单

这两个网站共享一个共同的主题,它确实带来了一些维护负担,但只不过是一个普通的网络项目。即...... MVC和PHP主题文件确实存在一些差异, 但一般来说CSS文件都是一样的。

我认为我们确实对Cookie进行了一些定制,但这并不是什么困难,因为这两种解决方案只使用了相同的Cookie名称和Cookie加密。

总的来说,这是一个相当轻松的集成项目,因为大多数通信是通过路由处理的。

我们已经运行了6个月没有任何问题。

答案 2 :(得分:1)

整个网站可以托管在运行IIS的Windows机器上吗?因为IIS can serve PHP pages以及asp.net。这样,您就可以无缝地将页面混合在一起。

另一个更“脏”的选择是使用PHP直接从远程asp.net页面“读取”HTML输出。每个对应的asp.net页面都有一个PHP文件,然后你可以使用PHP的file_get_contents方法通过HTTP“读取”它:

$content = file_get_contents('http://www.example.com/remotepage.aspx');

您可能希望在本地缓存结果以提高效率。