Asp.net mvc 创建asp.net MVC和WCF服务应用程序的建议方法

Asp.net mvc 创建asp.net MVC和WCF服务应用程序的建议方法,asp.net-mvc,ajax,wcf,Asp.net Mvc,Ajax,Wcf,我正在开发一个web服务,它既有一个本地WPF客户端,也有一个基于Javascript的web界面 在我处理该服务和WPF客户机时,WCF服务本身就是一个IIS托管的WCF服务项目,并且工作得很好。现在,我开始认真研究web界面,我想知道将WCF服务分开是否是一个好的选择 围绕这个主题阅读,似乎有很多选择;例如,我可以: 将这两个项目分开 创建asp.net MVC网站,并向项目中添加支持Ajax的WCF服务 创建asp.net MVC网站并向项目中添加WCF服务 创建一个WCF服务库项目,并

我正在开发一个web服务,它既有一个本地WPF客户端,也有一个基于Javascript的web界面

在我处理该服务和WPF客户机时,WCF服务本身就是一个IIS托管的WCF服务项目,并且工作得很好。现在,我开始认真研究web界面,我想知道将WCF服务分开是否是一个好的选择

围绕这个主题阅读,似乎有很多选择;例如,我可以:

  • 将这两个项目分开
  • 创建asp.net MVC网站,并向项目中添加支持Ajax的WCF服务
  • 创建asp.net MVC网站并向项目中添加WCF服务
  • 创建一个WCF服务库项目,并将其托管在MVC应用程序中(对此不完全确定,但这似乎是可能的)
我觉得可能还有更多

你建议我做什么?我的目标是:

  • 使用服务引用从WCF客户端访问服务,就像我到目前为止所做的那样
  • 通过web界面上的Javascript访问服务
  • 从Javascript和WCF客户端使用端口80访问服务(以避免防火墙问题)
  • 在同一域下拥有网站和服务
  • 能够使用共享主机(Gearhost)运行该东西,而无需多个IIS虚拟目录/应用程序起点

建议:我建议将项目尽可能分开。如果您的应用程序启动,并且您需要分离到不同的服务器/应用程序池/等等,它允许在如何托管所有内容方面具有更大的灵活性。此外,关注点分离是面向服务的体系结构(SOA)原则之一。这将迫使您以一种足够“通用”的方式编写服务代码,这可能会促进可重用性。请原谅,如果这是在你下面,但我需要说:在VisualStudio中,你可以创建一个空的解决方案,并添加到你的每个项目中,这样你就可以在一个VisualStudio实例中工作

然后,在IIS实例中,您将有如下内容:

/ = root app
/servicelayer/ = virtual application
但是…您的目标是“能够使用共享主机(Gearhost)运行该程序,而无需多个IIS虚拟目录/应用程序起点”。如果不将asp.net应用程序标记为虚拟应用程序,则无法在默认IIS目录中单独托管它们。这意味着您不能仅将servicelayer应用程序文件夹粘贴到根应用程序文件夹中


由于这一要求,您唯一的选择就是将服务代码添加到asp.net mvc应用程序中。我将创建一个名为“/services/”的文件夹,其中包含您的所有端点,以便稍微分开。然后向该文件夹添加一个支持Ajax的WCF服务

最后,我决定创建三个项目:服务接口,一个保存服务和数据契约的dll,引用接口的服务库本身,以及网站,一个承载创建的服务库的MVC应用程序。MVC代码与服务交互,就好像它托管在另一个系统上一样,使用客户机代理(在本例中,客户机代理连接到自身,很有趣)。这应该允许我在一个虚拟目录中托管整个内容,同时如果需要的话,还可以提供不太痛苦的解耦。为了保持整洁,我在代码中通过引用接口dll手动创建服务代理,而不是使用“添加服务引用”函数