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

Posted

技术标签:

【中文标题】WCF 服务作为 MVC 应用程序的一部分【英文标题】:WCF service as a part of MVC application 【发布时间】:2013-10-21 11:28:41 【问题描述】:

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

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

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

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

    如何与 MVC 应用绑定在一起?

【问题讨论】:

【参考方案1】:

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

在您的 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 时失败了。

【讨论】:

旁注:目前,它看起来像是一个用于 Serviceroute 的库 SOAcollective,最后一次更新是在 2012 年,并且 SOAcollective 网站不存在。另一种方法是使用 SimpleInjector 来配置上述路由。【参考方案2】:

我们一直通过以下方式做到这一点:

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

【讨论】:

你能贴出教程的链接吗??【参考方案3】:

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

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

【讨论】:

“我不会将它与 MVC4 应用程序混合在同一个项目中”你能解释一下原因吗? 混合两个不是为一起工作而构建的管道。这真的是不标准的方法。 有什么潜在的问题吗? 在 Web 应用程序中托管 wcf 服务没有任何问题。事实上,这正是使用 IIS 托管 WCF 服务时发生的情况。 你能解释一下使用 MVC 中的 wcf 的自负 Aisadvantages/Advantages 吗?

以上是关于WCF 服务作为 MVC 应用程序的一部分的主要内容,如果未能解决你的问题,请参考以下文章

我无法在 VS2012 中将服务引用(WCF 库)添加到 MVC4

WCF => MVC 作为 ASP.NET WebServices => ASP.NET Web 应用

浅谈WCF

如何从 MVC 应用程序发出的 WCF 服务调用中获取域\用户名?

在 mvc 中使用 WCF 服务时出现问题

在 MVC Web 应用程序中托管 WCF 服务