WCF KnownTypes奇怪的行为

时间:2014-10-16 15:09:47

标签: c# wcf

我们正在尝试为我们的WCF服务动态加载KnownTypes列表,当以这种方式加载类型列表时(它不起作用):

Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory, "*.*", SearchOption.AllDirectories)
  .Where(s => s.EndsWith(".dll") || s.EndsWith(".exe"))
  .ToList()
  .ForEach(d =>
  {
      try
      {
         Assembly assembly = Assembly.LoadFile(d);
         assembly.GetTypes().Where(f => f.IsDefined(typeof(System.Runtime.Serialization.DataContractAttribute), true))
        .Where(f => f.IsGenericType == false)
        .Where(f => f.FullName.StartsWith("AES."))
        .ToList()
        .ForEach(t => copy.Add(t));
       }
       catch (Exception e)
       {
          exceptions.Add(d, e);
       }
  });

我们知道类型列表是通过日志记录生成的,但是会得到一个模糊的WCF端点错误。

如果我们以这种方式加载类型,它确实有效:

AppDomain.CurrentDomain.GetAssemblies().SelectMany(f => f.GetTypes())
                             .Where(f => f.IsDefined(typeof(System.Runtime.Serialization.DataContractAttribute), true))
                             .Where(f => f.IsGenericType == false)
                             .Where(f => f.FullName.StartsWith("AES."))
                             .ToList()
                             .ForEach(t => copy.Add(t));

这种方式没有问题,唯一的区别是使用AppDomain清单的程序集来探测是不同的。

我们得到相同的列表,唯一的区别(我们知道)是一种方式有效而另一种方式没有。

有什么见解?

0 个答案:

没有答案