2012-10-30 33 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。

注意:如果你通過通用解析器使用數據契約繼承這個時候才需要。如果你不需要這個功能,並且它引起你的問題,你可以註釋掉違規的代碼。