我正在尝试使用来自IDesign的ServiceModelEx库。当我尝试呼叫时:
InProcFactory.CreateInstance();
在WCF服务中(基本上是从WCF服务A调用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();
}由于这不是网站或web应用程序(它是App_Web服务),因此程序集不是使用WCF或App_Code作为前缀的。但是,如果我从网站、web应用程序或EXE调用代码,它确实可以工作。这是deisgn做的吗?
发布于 2012-11-08 22:43:04
也许您期望的模块在此场景中根本没有加载。
发布于 2017-06-26 14:37:38
这是通用解析器倒下了。它试图发现所有可能包含数据契约的程序集,但随着不同的托管环境(特别是IIS变体)的出现,这有点像是一场军备竞赛。动态代码的引入也使生活变得更加困难。
如果您使用最新的ServiceModelEx (SME),它会修复此问题。只需确保您在下载中使用最新的.NET版本(当前为4.6.1),因为下载的SME的旧.NET版本(例如4.0及更早版本)不会有这些修复。如果需要,您可以(在限制范围内)对.NET版本进行降级。例如,我把4.6.1版本降到了4.5.2。
注意:只有在通过泛型解析器使用数据协定继承时,才需要这样做。如果你不需要这个特性,并且它给你带来了问题,你可以注释掉有问题的代码。
https://stackoverflow.com/questions/13146273
复制相似问题