我在 MVC4 中有一个 Web 应用程序。我将托管在共享托管服务提供商上。我想用 WCF 服务来扩展它来上传文件。(会有一个 WPF 桌面应用程序允许用户直接从他们的 PC 上传文件。)
我宁愿以某种方式“一起”托管它,以避免对存储目录的读/写访问出现问题,但我不知道如何做到这一点。
我应该在 MVC 应用程序中将 WCF 作为自托管主机吗?
我应该使 WCF 服务成为应用程序还是类库?
如何将它与 MVC 应用程序绑定在一起?
我在 MVC4 中有一个 Web 应用程序。我将托管在共享托管服务提供商上。我想用 WCF 服务来扩展它来上传文件。(会有一个 WPF 桌面应用程序允许用户直接从他们的 PC 上传文件。)
我宁愿以某种方式“一起”托管它,以避免对存储目录的读/写访问出现问题,但我不知道如何做到这一点。
我应该在 MVC 应用程序中将 WCF 作为自托管主机吗?
我应该使 WCF 服务成为应用程序还是类库?
如何将它与 MVC 应用程序绑定在一起?
我终于找到了如何让它工作。
在您的 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 时,它失败了。
我们一直通过以下方式执行此操作:
由于您已经在构建 MVC4 应用程序,您不妨考虑使用 MVC4 + Web API,因为它们可以毫无问题地协同工作(Web API 以前称为 WCF REST)。
如果您仍然决定坚持使用 WCF,我不会将它与 MVC4 应用程序混合在同一个项目中,而是将它作为附加的 IIS 应用程序与 MVC4 并排托管。