2

用于 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 项目/二进制文件”。请假设我也不想要那个答案。

4

1 回答 1

1

专注于WCF,此时我认为最接近的答案是使用并且有多个VS “WCF服务库”项目都参与一个VS“WCF服务应用程序”。

如果我在问题中概述的方法是“按原样”工作,我怀疑上述链接可能再次有答案。而不是这个...

<%@ ServiceHost Language="C#" Debug="true" Service="WcfWebService.Service1" 
    CodeBehind="Service1.svc.cs" %> 

我会用这样的东西......

<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary.Service1" %>
<%@ Assembly Name="WcfServiceLibrary" %>

我不再有时间或需要尝试这个,但似乎上述调整将处理我在问题中提出的最后一个问题。

于 2012-10-25T18:42:57.230 回答