我在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:顺便说一句;我检查了以下链接,建议将简单类型名称更改为程序集限定类型名称,但它对我没用。
答案 0 :(得分:0)
哈!
看起来我忘了编辑Web.config:它还包含程序集名称。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="CORSEnablingModule" type="MyCompany.ServiceLibrary.Cors.CORSEnablingModule, MyCompany.ServiceLibrary" />
</modules>
</system.webServer>
现在,我已将其更改为完全限定名称,一切都很好。
非常感谢。