2010-03-04 4 views
0

Я пытаюсь разработать веб-приложение, которое отправляет (Dispatcher) в несколько версий другого webapp по запросу. С этой целью я использую ApplicationManager.CreateObject для создания новых приложений AppDomains, которые запускают веб-приложение, но новые домены приложений, похоже, не загружают DLL Диспетчера (и я копирую DLL в каталог bin в веб-приложении , поэтому я уверен, что он там).ApplicationManager.CreateObject не загружает сборку в новом AppDomain

var version = "version"; 
var path = @"C:\code\devel\webapp"; 

// Copy host assembly to target webapp so that 'Host' is available 
var assembly = Assembly.GetExecutingAssembly().Location; 
var target = path + "\\bin\\" + Path.GetFileName(assembly); 
File.Copy(assembly, target, true); 

var manager = ApplicationManager.GetApplicationManager(); 
var obj = manager.CreateObject(version, typeof(Host), "/", path, true, true); 

Вот журнал слияния:

Assembly manager loaded from: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 
Running under executable C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\9.0\WebDev.WebServer.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: User = FOOBAR\aaron 
LOG: DisplayName = Dispatcher, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
(Fully-specified) 
LOG: Appbase = file:///C:/Program Files (x86)/Common Files/Microsoft Shared/DevServer/9.0/ 
LOG: Initial PrivatePath = NULL 
Calling assembly : (Unknown). 
=== 
LOG: This bind starts in default load context. 
LOG: No application configuration file found. 
LOG: Using machine configuration file from c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). 
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Common Files/Microsoft Shared/DevServer/9.0/Dispatcher.DLL. 
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Common Files/Microsoft Shared/DevServer/9.0/Dispatcher/Dispatcher.DLL. 
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Common Files/Microsoft Shared/DevServer/9.0/Dispatcher.EXE. 
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Common Files/Microsoft Shared/DevServer/9.0/Dispatcher/Dispatcher.EXE. 

Appbase, кажется, указывает на корневой каталог сервера развития, а не путь, передаваемым в ApplicationManager.CreateObject и, кажется, только для поиска каталоги под сервером разработки, которые кажутся странными. Любые идеи о том, как сделать новый поиск в AppDomain для DLL в корне веб-приложения, а не под сервером разработки?

ответ

2

Похоже (по крайней мере, в нашей ситуации), это неправильный путь: использование обратного прокси-сервера является правильным способом.

обратного прокси имеют то преимущество, что они являются «шаблон» в HTTP-архитектуре и они спасают нас от того, чтобы убедиться, что среда выполнения ASP.NET является действительно правильно настроен в AppDomains работает фактический веб-приложение.

В настоящее время мы просматриваем ProxyMachine, который является высоко настраиваемым обратным прокси-сервером TCP, который GitHub seems to have had some success with.

Смежные вопросы