簡體   English   中英

在HttpWebRequest.GetResponse()上生成的動態程序集

[英]Dynamic assembly generated on HttpWebRequest.GetResponse()

看來我們的應用程序存在程序集泄漏。 我注意到,在使用HttpWebRequest對象調用Web服務調用的所有調用上,都會在調用httpWebRequest.GetResponse()上加載動態程序集。

我可以看到程序集是通過調試器加載的(“ w3wp.exe”(托管):已加載“ 7-6jav6v”,未加載任何符號。)但我無法弄清楚為什么會發生這種情況。

之前有沒有其他人經歷過?

編輯:為這個問題添加說明。 在c#中,當您創建XmlSerializer時,將創建一個程序集以完成序列化。 除非您事先使用工具為您執行此操作,否則總是會發生這種情況。 如果使用(類型類型)或(類型類型,字符串“名稱空間”)的構造函數,則將僅生成1個程序集。 如果使用任何其他構造函數,則將為每個序列化生成一個新的程序集。

在上述問題中並非如此。

我們的代碼庫中有一個代碼塊,可以手動進行Soap調用並返回一個字符串(該字符串為xml,例如ex :)。 每次執行此代碼塊時,都會創建一個新程序集。 檢查這些程序集之一時,將其稱為“ 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() ; 

根據您在Sky Sanders回答下方的評論,生成的程序集用於XML序列化。 序列化程序集是動態生成的,除非您使用XML Serializer Generator Tool(Sgen.exe)預先生成它們。 如果這樣做,將使用現有的程序集,並且不會生成任何程序集

您調用的Web服務的xml架構是固定的還是動態的? 如果要調用任意Web服務,每個Web服務都將任意XML消息作為輸入並返回任意XML消息作為輸出……那么XmlSerializer將為每個模式創建一個新的程序集。 如果每個消息本質上都使用相同的架構,但是結構上有足夠的變化,即使它們可以使用一個通用的架構,XmlSerializer也只能如此……它將生成一個程序集來處理它標識的每個特定架構。

就像Thomas所說的那樣,如果您的模式是固定的,請使用XML Serializer Generator Tool預先生成序列化程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM