10

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

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

  1. 我应该在 MVC 应用程序中将 WCF 作为自托管主机吗?

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

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

4

3 回答 3

14

我终于找到了如何让它工作。

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

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

在您的路线配置 ---> 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 时,它失败了。

于 2013-10-14T23:04:40.640 回答
3

我们一直通过以下方式执行此操作:

  1. 创建 WCF 类库
  2. 在 ASP.NET MVC 4 Web 应用程序中引用 WCF 类库
  3. 在您的 ASP.NET Web 应用程序中创建一个 Svc 文件,从而使 WCF 端点可用
  4. 也许您需要对 web.config 文件中的设置进行一些尝试,该文件现在包括 ASP.NET 设置旁边的 WCF 服务端点设置。
于 2013-10-13T22:51:04.847 回答
0

由于您已经在构建 MVC4 应用程序,您不妨考虑使用 MVC4 + Web API,因为它们可以毫无问题地协同工作(Web API 以前称为 WCF REST)。

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

于 2013-10-14T21:16:20.853 回答