我使用 Unity 来解析我的实例。包括 WCF 服务。
但是我发现了一个技巧问题。我将我的 WCF 程序部署到 IIS (WAS),并且可以运行我的 Web 服务。
在 IIS(WAS) 回收应用程序池之后,我确定我的注册码已经被执行。但是现在网络服务抛出一个异常,比如说
“异常发生时:解决时。”
然后我从 IIS 服务记录信息,也就是说我没有注册这种类型。
我使用 Unity 来解析我的实例。包括 WCF 服务。
但是我发现了一个技巧问题。我将我的 WCF 程序部署到 IIS (WAS),并且可以运行我的 Web 服务。
在 IIS(WAS) 回收应用程序池之后,我确定我的注册码已经被执行。但是现在网络服务抛出一个异常,比如说
“异常发生时:解决时。”
然后我从 IIS 服务记录信息,也就是说我没有注册这种类型。
我已经自己解决了这个问题。
当应用程序池回收并创建启动一个新的应用程序池时,所有的 DLL 将复制到一个新的 Asp.Net 模板文件夹中。
当我强制将所有“bin”DLL 加载到 AppDomain 时,我在 bin 的程序集中注册了一个类型。不在 Asp.net 临时文件夹程序集中。所以 Unity 认为这是差异类型。
现在我改变了将程序集加载到当前域的方式
string binPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin");
foreach (string dll in Directory.GetFiles(binPath, "*.dll", SearchOption.AllDirectories))
{
var assemblyFromCurrentDomain = Assembly.Load(Assembly.LoadFile(dll).FullName);
Debug.Print("Add Assembly : {0}, {1}", assemblyFromCurrentDomain.FullName, assemblyFromCurrentDomain.Location);
}
然后问题解决了。