2016-02-23 4 views
0

Все,AppDomain CreateInstanceAndUnwrap: Тип не помечен как сериализуемая

я получаю необъяснимые ошибки при вызове CreateInstanceAndUnwrap на новое AppDomain я создал. Полный текст ошибки:

Тип 'System.Net.Http.HttpRequestMessage' в сборке 'System.Net.Http, Version = 4.0.0.0, культура = нейтральной, PublicKeyToken = b03f5f7f11d50a3a' не отмечено как сериализуемый.

Детский appdomain создается в веб-приложении API и тип, который я пытаюсь создать прокси-сервер, полученный из MarshalByRefObject.

Узел, в котором этот тип определен, не имеет ссылки на System.Net.Http или System.Web - поэтому я не понимаю, почему сериализуемость HttpRequestMessage имеет какое-либо отношение.

Я предполагаю, что он пытается скопировать некоторые контекстные данные из родительского AppDomain в дочерний, но, возможно, кто-то здесь может пролить свет на то, что происходит?

Вот соответствующий код:

var appDomain = AppDomain.CreateDomain("AName", null, AppDomain.CurrentDomain.SetupInformation); 
SomeClient client = appDomain.CreateInstanceAndUnwrap(typeof(SomeClient).Assembly.FullName, typeof(SomeClient).FullName) as SomeClient; 

типа «SomeClient» и его родительский узел не имеет каких-либо ссылки на веб/system.net.http.

+0

Пожалуйста, покажите нам код строки или даже больше строк, которые трудно вычесть без более широкого контекста. – profesor79

+0

Код, который использует HttpRequestMessage, должен строго выполняться в AppDomain, вы не можете выставлять его в свой производный класс MBRO через аргумент public property или method , Должно быть довольно сложно в веб-приложении И дорого. –

+0

Спасибо - добавлен образец кода. Я не пытаюсь маршалировать HTTP-запрос в доменах приложений, на самом деле это то, чего я пытаюсь избежать. – booler

ответ

0

Я нашел ответ.

Проблема была в нашей собственной пользовательской структуре ведения журнала, которая подключена к приложению через обработчик делегирования.

В среде журналирования, другой разработчик манипулирует контекст вызова: https://msdn.microsoft.com/library/w61s16a1(v=vs.100).aspx

хранения всего запроса HTTP в нем. При запуске нового AppDomain он пытался передать этот контекст вызова, следовательно, ошибку сериализации.

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