WAS回收应用程序池后,使用Unity解析实例会失败

发布于 2025-01-08 16:58:05 字数 243 浏览 1 评论 0原文

我使用 Unity 来解析我的实例。包括 WCF 服务。

但我发现了一个技巧问题。 我将 WCF 程序部署到 IIS (WAS),并且可以正常运行我的 Web 服务。

IIS(WAS)回收应用程序池后,我确定我的注册代码已被执行。 但现在 Web 服务抛出异常,比如说

“异常发生时:解析时。”

然后我从IIS服务记录信息,据说我没有注册这种类型。

I use Unity to resolve my instance. Include WCF service.

But I found a trick problem.
I deploy my WCF program to IIS (WAS), and it's ok for running my web service.

After IIS(WAS) recycle application pool, and I'm sure my register code has been executed.
But now web service throw a exception, say

"Exception occurred while: while resolving."

Then I log information from IIS service, it's say I don't register this type.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乱了心跳 2025-01-15 16:58:05

我自己解决了这个问题。

当应用程序池回收并创建启动新的应用程序池时,所有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);
}

然后问题解决了。

I has resolved this problem by myself.

When application pool recycle and create start a new application pool, all DLL will copy to a new Asp.Net Template Folder.

When I force to load all "bin" DLLs to AppDomain, I register a type in bin's assembly. Not in Asp.net Temp Folder assembly. So Unity thought it's difference type.

Now I change the way to load assembly to current domain

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);
}

Then problem fixed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文