После того, как WAS перезапустит пул приложений, использовать Unity для разрешения экземпляра не удастся - PullRequest
2 голосов
/ 22 февраля 2012

Я использую Unity для разрешения своего экземпляра.Включите службу WCF.

Но я обнаружил хитрость.Я разверну свою программу WCF в IIS (WAS), и это нормально для запуска моего веб-сервиса.

После того, как IIS (WAS) перезапустил пул приложений, и я уверен, что мой код регистрации был выполнен.Но теперь веб-служба выдает исключение, скажем

«Исключение произошло во время разрешения».

Затем я записываю информацию из службы IIS, она говорит, что нетзарегистрируйте этот тип.

1 Ответ

3 голосов
/ 23 февраля 2012

Я решил эту проблему самостоятельно.

Когда пул приложений перезапускается и создается новый пул приложений, все библиотеки DLL копируются в новую папку шаблонов Asp.Net.

Когда я заставляю загружать все библиотеки DLL «bin» в AppDomain, я регистрирую тип в сборке bin. Не в Asp.net Temp Папка сборки. Так что 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);
}

Тогда проблема исправлена.

...