用于 ASP.NET 或 WCF 的 Visual Studio 项目通常与 IIS 应用程序一对一地分配。但是,例如,如果我希望将两个 WCF 项目托管在 IIS 的同一个 appdomain 中,该怎么办?这意味着我将有两个 Visual Studio WCF 项目分配给一个 IIS 应用程序。
我开始尝试这个,并遇到了第一条错误消息。我已经看到建议如何“不要这样做”的评论。但就我而言,我实际上想这样做。我不介意这是否意味着 IIS 应用程序具有三个 Web 配置(一个位于 IIS 应用程序的根目录,另外两个位于它包含的“项目”文件夹中),或者这是否意味着 IIS 应用程序只有一个 Web 配置.
因此,对于我的两个 Visual Studio WCF 项目,我以多种方式调整了 web.config 内容:
- 一个 IIS 应用程序,指向找到我的 Visual Studio 解决方案文件的物理目录。这两个 WCF 项目分别位于两个子文件夹中
- 一个 IIS 应用程序,指向任意物理位置,包含两个虚拟目录,分别指向两个 WCF 项目物理目录。我在这里有三个 Web 配置文件:一个用于 IIS 应用程序根目录,另外两个在虚拟目录中。
上面第二个选项的变体几乎奏效了。我收到的最后一条错误消息是:
找不到类型“Sample.ServiceGroupAlpha.ServiceAlpha”,作为 ServiceHost 指令中的服务属性值提供,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供。
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidOperationException:类型“Sample.ServiceGroupAlpha.ServiceAlpha”,作为 ServiceHost 指令中的服务属性值提供,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供。
这促使我查看 ServiceHost 指令,并(狡猾地)修改它:
<%@ ServiceHost Language="C#" Debug="true" Service="Sample.ServiceGroupAlpha.ServiceAlpha" CodeBehind="AlphaServices/ServiceAlpha.svc.cs" %>
...注意该CodeBehind
属性有一个我添加的相对路径(虚拟目录的名称)。好吧,这没有用,但我不禁认为我已经接近完成这项工作。我想知道是否有人有修复,或者可以传递“正确”的方式来完成这整个事情。
最终的答案可能是,在同一个 IIS 应用程序中没有两个单独的 Web/WCF 项目。如果是这样的话,我会感到惊讶。另一个答案可能是“将两个 WCF 项目组合成一个 Visual Studio 项目/二进制文件”。请假设我也不想要那个答案。