无法从GAC

时间:2016-08-22 08:32:21

标签: 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.ServiceLibrary.OrderServiceImpl"   Factory="MyCompany.ServiceLibrary.GenericServiceHostFactoryImpl, MyCompany.ServiceLibrary"%>

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

  

分析器错误

     

描述:解析为此请求提供服务所需的资源时发生错误。请查看以下特定的解析错误详细信息并相应地修改源文件。

     

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

     

源文件:/global.asax Line: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.ServiceLibrary |域名ID:4

     

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

     

警告:这可能导致活页夹加载错误的程序集。

     

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

     

WRN:由简单的名称,版本,文化和公钥令牌组成。

     

警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270

     

日志: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中的计算机配置文件。

     

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

     

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

     

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

     

日志:尝试下载新的URL文件:/// C:/OrderServicePublish/bin/MyCompany.MyServiceLibrary.DLL。

     

日志:尝试下载新的URL文件:/// C:/OrderServicePublish/bin/MyCompany.MyServiceLibrary/MyCompany.MyServiceLibrary.DLL。

     

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

     

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

     

日志:尝试下载新的URL文件:/// C:/OrderServicePublish/bin/MyCompany.MyServiceLibrary.EXE。

     

日志:尝试下载新的URL文件:/// 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:顺便说一句;我检查了以下链接,建议将简单类型名称更改为程序集限定类型名称,但它对我没用。

1)https://social.msdn.microsoft.com/Forums/vstudio/en-US/3c61739c-b1fe-46bd-b8eb-8e9485f8891b/wcf-service-without-bin-folder?forum=wcf

2)http://answers.flyppdevportal.com/categories/sharepoint2010/sharepoint2010programming.aspx?ID=7b968dc5-4522-4896-8684-34064f0baaf5

1 个答案:

答案 0 :(得分:0)

哈!

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

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

现在,我已将其更改为完全限定名称,一切都很好。

非常感谢。

相关问题