WCF服务作为MVC应用程序的一部分

时间:2013-10-13 22:33:10

标签: c# .net asp.net-mvc wcf asp.net-mvc-4

我在MVC4中有一个Web应用程序。我将主持共享主机提供商。我想用WCF服务扩展它以上传文件。 (WPF桌面应用程序将允许用户直接从他们的PC上传文件。)

我宁愿以某种方式“一起”托管它以避免存储目录的读/写访问问题,但我不知道如何做到这一点。

  1. 我应该在MVC应用中托管WCF作为自托管吗?

  2. 我应该将WCF服务作为应用程序还是类库?

  3. 如何将它与MVC应用程序结合在一起?

3 个答案:

答案 0 :(得分:14)

我终于找到了如何使它发挥作用。

在你的MVC应用程序Web.config中添加:

<system.serviceModel>
    <serviceHostingEnvironment  aspNetCompatibilityEnabled="true"/>
</system.serviceModel>

在你的路线中配置---&gt; Global.asax或App_Start / RoutesConfig(取决于MVC版本)添加:

public static void RegisterRoutes(RouteCollection routes)
{
    ...
    routes.Add(new ServiceRoute("hello", new ServiceHostFactory(), typeof(YourServiceClass)));
    ...
}

就是这样。现在,您的服务显示在localhost / hello下或您部署应用程序的任何位置。

默认使用BasicHttpBinging。如果您需要其他,则必须实现自己的ServiceHostFactory。根据我的观察,此方法仅适用于HTTP绑定。当我尝试添加NetTcpBinding时,它失败了。

答案 1 :(得分:3)

我们始终以下列方式执行此操作:

  1. 创建WCF类库
  2. 在ASP.NET MVC 4 Web应用程序中引用WCF类库
  3. 在ASP.NET Web应用程序中创建一个Svc文件,使WCF端点可用
  4. 也许您需要使用web.config文件中的设置,现在包括ASP.NET设置旁边的WCF服务端点设置。

答案 2 :(得分:0)

由于您已经在构建MVC4应用程序,因此您可以考虑使用MVC4 + Web API,因为它们可以一起工作而没有任何问题(Web API以前称为WCF REST)。

如果您仍然决定坚持使用WCF,我不会将它与MVC4应用程序混合在同一个项目中,而是将其作为附加的IIS应用程序与MVC4并排放置。