Динамическая сборка, сгенерированная на HttpWebRequest.GetResponse () - PullRequest
0 голосов
/ 02 марта 2010

Похоже, наше приложение имеет утечку сборки. Я заметил, что при любых вызовах, когда вызов веб-службы вызывается с использованием объекта HttpWebRequest, динамическая сборка загружается при вызове httpWebRequest.GetResponse ()

Я вижу, как сборка загружается через отладчик ('w3wp.exe' (Управляемый): загружен '7-6jav6v', символы не загружены.), Но я не могу понять, почему это произойдет.

Кто-нибудь еще испытывал это раньше?

Edit: Добавить пояснения к этому вопросу. В c # при создании XmlSerializer создается сборка для завершения сериализации. Это всегда будет происходить, если вы не используете инструмент, чтобы сделать это для вас заранее. Если вы используете конструктор (Type type) или (Type type, строка «namespace»), то будет сгенерирована только 1 сборка. Если вы используете любой другой конструктор, то для каждой сериализации будет создаваться новая сборка.

Это не относится к описанной выше проблеме.

В нашей кодовой базе есть блок кода, который вручную выполняет мыльный вызов и возвращает строку (строка xml, например:). Каждый раз, когда этот блок кода выполняется, создается новая сборка. При проверке одной из этих сборок на нее ссылаются "XmlSerializationWriter1.Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.XmlSerializer1.ArrayOfObjectSerializer.ArrayOfObjectSerializer1.ArrayOfObjectSerializer2"

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

HttpWebRequest oHttpWebRequest =(HttpWebRequest)WebRequest.Create("URL TO WEBSERVICE"); 
oHttpWebRequest.Timeout =((1000*60)*30);
oHttpWebRequest.Method ="POST" ; 
oHttpWebRequest.ContentType ="text/xml" ; 
oHttpWebRequest.Headers.Add("SOAPAction: http://www.tempuri.com/"+WebMethodName); 
StreamWriter oStreamWriter = new StreamWriter(oHttpWebRequest.GetRequestStream()) ; 

string SoapRequest=@"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""><soap:Body>";
SoapRequest=SoapRequest + HttpUtility.HtmlDecode(XmlHttpRequestData);
SoapRequest=SoapRequest + @"</soap:Body></soap:Envelope>";
oStreamWriter.Write(SoapRequest); 
oStreamWriter.Close();

oHttpWebRequest.ProtocolVersion.Build;

WebResponse oWebResponse = oHttpWebRequest.GetResponse() ; 

Ответы [ 2 ]

1 голос
/ 02 марта 2010

Согласно вашему комментарию под ответом Sky Sanders, сгенерированные сборки предназначены для сериализации XML. Сборки сериализации генерируются динамически, если вы предварительно не сгенерировали их с помощью XML Serializer Generator Tool (Sgen.exe) . Если вы это сделаете, будут использованы существующие сборки, и сборка не будет создана

0 голосов
/ 02 марта 2010

Является ли схема xml для веб-сервисов, которые вы называете, фиксированной или динамической? Если вы вызываете произвольные веб-службы, каждая из которых принимает произвольные XML-сообщения в качестве входных данных и возвращает произвольные XML-сообщения в качестве выходных данных ... XmlSerializer собирается создать новую сборку для каждой схемы. Если каждое сообщение по существу использует одну и ту же схему, но достаточно различается по структуре, даже если они могут использовать общую схему, XmlSerializer способен только на это ... он собирается сгенерировать сборку для обработки каждой конкретной схемы, которую он идентифицирует.

Как сказал Томас, если ваша схема исправлена, используйте инструмент XML Serializer Generator Tool для предварительной генерации ваших сериализационных сборок.

...