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 应用