2012-10-30 116 views
3

我想从IDesign使用ServiceModelEx库。当我尝试呼叫时:InProcProxyFactory.CreateInstance从WCF服务调用

InProcFactory.CreateInstance();

从与WCF服务(基本上是从调用WCF服务WCF服务B),我收到以下错误:

找不到动态组装

发生故障的代码是:

internal static Assembly[] GetWebAssemblies() 
    { 
    Debug.Assert(IsWebProcess()); 
    List<Assembly> assemblies = new List<Assembly>(); 

    if(Assembly.GetEntryAssembly() != null) 
    { 
     throw new InvalidOperationException("Can only call in a web assembly"); 
    } 
    foreach(ProcessModule module in Process.GetCurrentProcess().Modules) 
    { 
     assemblies.Add(Assembly.LoadFrom(module.FileName)); 
     if (module.ModuleName.StartsWith("App_Code.") && module.ModuleName.EndsWith(".dll")) 
     { 
      assemblies.Add(Assembly.LoadFrom(module.FileName)); 
     } 
     if (module.ModuleName.StartsWith("App_Web_") && module.ModuleName.EndsWith(".dll")) 
     { 
      assemblies.Add(Assembly.LoadFrom(module.FileName)); 
     } 
    } 
    if (assemblies.Count == 0) 
    { 
     throw new InvalidOperationException("Could not find dynamic assembly"); 
    } 
    return assemblies.ToArray(); 
    } 

程序集不是用App_Web或App_Code预先固定的,因为这不是一个网站或一个Web应用程序(它是一个WCF服务)。但是,如果我从网站,Web应用程序或EXE调用该代码,代码确实可行。这是通过设计?

回答

1

也许您期望的模块在此方案中未加载。

+0

不,如果我看Process.GetCurrentProcess()模块,我可以看到我要找的DLL。 – user472292

+0

开头的断言是否失败? – Peter

0

这是通用的解析器摔倒。它试图做到这一点,最好的发现,可能有数据合约所有这些组件,但它是一个军备竞赛的不同的托管环境(特别是IIS变种)弹出的东西。动态代码的引入也使得生活更加困难。

如果您使用最新的ServiceModelEx(SME),它已修复以解决此问题。只要确保你在下载使用最新的.NET版本(4.6.1目前),因为中小企业的较旧的.NET版本的下载(例如4.0和更早的版本)将不会有这些修补程序。如果需要,您可以降级.NET版本(在限制范围内)。例如。我把4.6.1版本降到了4.5.2。

注意:如果你通过通用解析器使用数据契约继承这个时候才需要。如果你不需要这个功能,并且它引起你的问题,你可以注释掉违规的代码。