Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF服务(IIS 7)中无法解释的程序集加载_Wcf_Iis 7_Assembly Resolution - Fatal编程技术网

WCF服务(IIS 7)中无法解释的程序集加载

WCF服务(IIS 7)中无法解释的程序集加载,wcf,iis-7,assembly-resolution,Wcf,Iis 7,Assembly Resolution,我正在开发一个新的WCF web服务,该服务将托管在现有的ASP.NET web应用程序中。当我尝试运行服务的.svc文件时,我得到一个异常,它无法找到程序集的文件 无法加载文件或程序集“System.IdentityModel,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”或其依赖项之一。系统找不到指定的文件 问题是,此服务似乎没有在任何地方引用此(特定)程序集。有一个引用的项目加载System.Identity

我正在开发一个新的WCF web服务,该服务将托管在现有的ASP.NET web应用程序中。当我尝试运行服务的.svc文件时,我得到一个异常,它无法找到程序集的文件

无法加载文件或程序集“System.IdentityModel,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”或其依赖项之一。系统找不到指定的文件

问题是,此服务似乎没有在任何地方引用此(特定)程序集。有一个引用的项目加载System.IdentityModel,但它引用的是版本3.0.0.0。事实上,所有这些项目都以3.5运行时为目标,任何地方都没有对任何4.0程序集的引用

以下是Web应用程序的Web.config中的
标记:

<compilation debug="true">
  <assemblies>
    <clear/>
    <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
  </assemblies>
</compilation>

注意:
标记是后来作为故障排除尝试添加的。它似乎对行为没有任何影响。我添加它是因为IIS配置管理器的“.NET Compilation”选项卡向我提供了一个错误,即System.Data被添加了两次,但显然不在此文件中。添加
为我解决了问题,但我在Machine.config中找不到令人不快的重复项,并且没有基本网站Web.config,因此我想知道是否有我不想找的地方可能是问题的原因

服务器正在使用.NET 3.5 SP1运行server 2008。我在本地IIS安装上也遇到了同样的问题(虽然是使用
System.Configuration
而不是IdentityModel,但是…),它安装在带有.NET 4.0的Windows 7 x64上


是否有人知道它为什么尝试加载此程序集(仅引用版本3.0.0.0)以及我可以做些什么来更正它?我发现了这个问题,并认为它可能对其他可能遇到相同问题的人有所帮助

激活WCF服务时,部分流程使用
Type.GetType(string)
获取表示服务契约实现的类型。因为
Type.GetType(string)
要求目标类型为:

  • 在调用程序集中(在本例中,它永远不会被调用)
  • 在mscorlib中(同样,这永远不会发生)
  • 使用程序集限定名完全指定
除非使用其程序集限定名指定类型,否则它将失败

因此(为了使仅使用命名空间限定名更容易指定服务类型),激活器将扫描所有引用的程序集,并调用
Assembly.GetType(string)
(可以只使用命名空间限定名),直到找到兼容的类型

虽然我无法解释4.0引用的具体来源,但它一定在引用的程序集中。通过更改.svc文件中my service的
ServiceHost
标记以使用程序集限定名,WCF成功加载了该服务