C# 无法从GAC加载ServiceHost的自定义工厂

C# 无法从GAC加载ServiceHost的自定义工厂,c#,asp.net,iis,gac,fusion,C#,Asp.net,Iis,Gac,Fusion,我在IIS中托管了一个WCF服务,该服务运行良好。实际上,它正在按顺序使用以下Global.asax和OrderService.svc文件 <%@ Application Codebehind="Global.asax.cs" Inherits="MyCompany.MyOrderServices.Global" Language="C#" %> <%@ ServiceHost Language="C#" Debug="true" Service="MyCompany.Ser

我在IIS中托管了一个WCF服务,该服务运行良好。实际上,它正在按顺序使用以下Global.asax和OrderService.svc文件

<%@ Application Codebehind="Global.asax.cs" Inherits="MyCompany.MyOrderServices.Global" Language="C#" %>

<%@ ServiceHost Language="C#" Debug="true" Service="MyCompany.ServiceLibrary.OrderServiceImpl"   Factory="MyCompany.ServiceLibrary.GenericServiceHostFactoryImpl, MyCompany.ServiceLibrary"%>

我正在尝试创建一个\bin\'较少的WCF服务,并将其托管在IIS中。我将所有必要的组件放入GAC。当我向服务发出请求时,我得到以下错误:

分析器错误

描述:解析服务此请求所需的资源时出错。请查看以下特定的解析错误详细信息,并适当修改源文件

分析器错误消息:无法加载程序集“MyCompany.MyOrderServices”。在访问页面之前,请确保已对其进行编译

源文件:/global.asax行:1

我通过如下更改Global.asax文件修复了此错误:

<%@ Application Codebehind="Global.asax.cs" Inherits="MyCompany.MyOrderServices.Global, MyCompany.MyOrderServices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXX" Language="C#" %>

所以我明白了:我必须将简单的类型名更改为类型的程序集限定名。实际上,在我修复了Global.asax错误之后,我得到了以下错误

无法加载文件或程序集“MyCompany.ServiceLibrary”或其依赖项之一。系统找不到指定的文件

然后,我启用了Fusion日志记录,并获得以下信息:

==预绑定状态信息===

日志:DisplayName=MyCompany.ServiceLibrary

(部分)

警告:为程序集提供了部分绑定信息:

警告:程序集名称:MyCompany.servicebrary |域ID:4

警告:仅提供部分程序集显示名称时,会发生部分绑定

警告:这可能会导致活页夹加载不正确的组件

警告:建议为程序集提供完全指定的文本标识

警告:它由简单的名称、版本、区域性和公钥令牌组成

警告:有关此问题的更多信息和常见解决方案,请参阅白皮书

日志:Appbase=file:///C:/OrderServicePublish/

日志:初始PrivatePath=C:\OrderServicePublish\bin

正在调用程序集:(未知)

===

日志:此绑定在默认加载上下文中启动

日志:使用应用程序配置文件:C:\OrderServicePublish\web.config

日志:使用主机配置文件:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config

日志:使用C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config中的计算机配置文件

日志:此时未将策略应用于引用(私有、自定义、部分或基于位置的程序集绑定)

日志:正在尝试下载新URLfile:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET文件/root/98694738/2a3c07d8/MyCompany.MyServiceLibrary.DLL

日志:正在尝试下载新URLfile:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET文件/root/98694738/2a3c07d8/MyCompany.MyServiceLibrary/MyCompany.MyServiceLibrary.DLL

日志:正在尝试下载新URLfile:///C:/OrderServicePublish/bin/MyCompany.MyServiceLibrary.DLL.

日志:正在尝试下载新URLfile:///C:/OrderServicePublish/bin/MyCompany.MyServiceLibrary/MyCompany.MyServiceLibrary.DLL.

日志:正在尝试下载新URLfile:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET文件/root/98694738/2a3c07d8/MyCompany.MyServiceLibrary.EXE

日志:正在尝试下载新URLfile:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET文件/root/98694738/2a3c07d8/MyCompany.MyServiceLibrary/MyCompany.MyServiceLibrary.EXE

日志:正在尝试下载新URLfile:///C:/OrderServicePublish/bin/MyCompany.MyServiceLibrary.EXE.

日志:正在尝试下载新URLfile:///C:/OrderServicePublish/bin/MyCompany.MyServiceLibrary/MyCompany.MyServiceLibrary.EXE.

显然,GAC文件夹被省略了。然后我更改了.svc文件,如下所示:

<%@ ServiceHost Language="C#" Debug="true" Service="MyCompany.ServiceLibrary.OrderServiceImpl, MyCompany.ServiceLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXX"   Factory="MyCompany.ServiceLibrary.GenericServiceHostFactoryImpl, MyCompany.ServiceLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXX"%>

。。。但我也犯了同样的错误。ServiceHost指令有什么问题。为什么不能从GAC文件夹加载程序集

(注1:顺便说一句,我检查了以下链接,建议将简单类型名更改为程序集限定的类型名,但这对我不起作用

(一)

2) )哈哈

看起来我忘记编辑Web.config了:它还包含程序集名称

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="CORSEnablingModule" type="MyCompany.ServiceLibrary.Cors.CORSEnablingModule, MyCompany.ServiceLibrary" />
  </modules>
</system.webServer>

现在,我把它改成了完全限定名,一切都很好


无论如何,谢谢。

您是否在GAC中手动检查了具有名称、版本、强名称和区域性的程序集,因为如果不匹配,它将不会加载程序集Yes@mrinal kamboj我检查了程序集的GAC,它就在那里:)您是否可以使用控制台应用程序尝试相同的repo,它从GAC加载的所有内容都保持不变,我只是想把范围缩小到环境中的实际问题。请确保系统(路径)中没有其他副本可供加载。是的,但您对web.config的编辑有助于从GAC正确加载程序集,请更新。这就是为什么有人建议控制台没有Web.Config。