0

アプリケーションにアセンブリ リークがあるようです。HttpWebRequest オブジェクトを使用して Web サービス呼び出しが呼び出されるすべての呼び出しで、httpWebRequest.GetResponse() 呼び出しで動的アセンブリが読み込まれることに気付きました。

アセンブリがデバッガー ('w3wp.exe' (Managed): Loaded '7-6jav6v', No symbols loaded.) を介して読み込まれるのを確認できますが、なぜこれが発生するのかわかりません。

他の誰かがこれを経験したことがありますか?

編集:この質問に説明を追加するには。C# では、XmlSerializer を作成すると、シリアル化を完了するためにアセンブリが作成されます。ツールを使用して事前にこれを行う場合を除き、これは常に発生します。(Type type) または (Type type, string "namespace") のコンストラクターを使用すると、1 つのアセンブリのみが生成されます。他のコンストラクターを使用すると、シリアル化ごとに新しいアセンブリが生成されます。

これは、上記の問題には当てはまりません。

コードベースには、soap 呼び出しを手動で行い、文字列を返すコード ブロックがあります (文字列は xml、ex: です)。このコード ブロックが実行されるたびに、新しいアセンブリが作成されます。これらのアセンブリの 1 つを調べると、「XmlSerializationWriter1.Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.XmlSerializer1.ArrayOfObjectSerializer.ArrayOfObjectSerializer1.ArrayOfObjectSerializer2」が参照されます。

理解を深めるために、コード ブロックは以下のようになり、最後の行が実行されるとアセンブリが生成されます...このブロックが実行されるたびに 1 つの複数のアセンブリが生成されます。

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() ; 
4

2 に答える 2

1

Sky Sanders の回答の下のコメントによると、生成されたアセンブリは XML シリアル化用です。シリアル化アセンブリは、 XML シリアライザー ジェネレーター ツール (Sgen.exe)を使用して事前に生成しない限り、動的に生成されます。これを行うと、既存のアセンブリが使用され、アセンブリは生成されません

于 2010-03-02T01:47:12.197 に答える
0

呼び出す Web サービスの xml のスキーマは固定ですか、それとも動的ですか? それぞれ任意の XML メッセージを入力として受け取り、任意の XML メッセージを出力として返す任意の Web サービスを呼び出している場合、XmlSerializer はスキーマごとに新しいアセンブリを作成します。各メッセージが基本的に同じスキーマを使用するが、構造が十分に異なる場合、共通のスキーマを使用できる場合でも、XmlSerializer は非常に有能です.識別される特定のスキーマを処理するアセンブリを生成します。

Thomas が言ったように、スキーマが修正されている場合は、XML Serializer Generator Tool を使用してシリアル化アセンブリを事前に生成します。

于 2010-03-02T03:20:10.540 に答える