C# 无法从GAC加载ServiceHost的自定义工厂
我在IIS中托管了一个WCF服务,该服务运行良好。实际上,它正在按顺序使用以下Global.asax和OrderService.svc文件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
<%@ 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。