0

exeで動作し、CLRの小さなxmlファイルでも動作する次のコードがありますが、10MBを超えるとスレッド中止エラーが発生します。SQL Server で構成する必要があるものはありますか?

Try

    sStream = HttpRequest.GetRequestStream()
    sStream.Write(baByteArray, 0, baByteArray.Length)
    sStream.Close()
    wrWebResponse = HttpRequest.GetResponse()
    sStream = wrWebResponse.GetResponseStream()
    Dim readStream As New StreamReader(sStream, System.Text.Encoding.UTF8)
    strXmlResponse = readStream.ReadToEnd() ' Errors out here
    strXmlResponseDoc.LoadXml(strXmlResponse)
    wrWebResponse.Close()
    sStream.Close()
    readStream.Close()

Catch ex As Exception

    SqlContext.Pipe.Send(ex.ToString())
    clsE.LogError(ex.ToString())

End Try

エラーメッセージ:

System.Threading.ThreadAbortException: Thread was being aborted.
 at System.Threading.Thread.AbortInternal()
 at System.Threading.Thread.Abort(Object stateInfo)
 at   System.Data.SqlServer.Internal.ClrLevelContext.CheckSqlAccessReturnCode(SqlAccessApiReturnCode eRc)
 at System.Data.SqlServer.Internal.ClrLevelContext.SendMessageToPipe(String message, SmiEventSink eventSink)
 at Microsoft.SqlServer.Server.SqlPipe.Send(String message)
 at MacCLR.MacClass.RequestXml(String strXmlToSend)
 at MacCLR.StoredProcedures.ProcessShippingXML_1(String iOrderNumb, String iXmlFilePath, String iXmlFileName, SqlInt32& iResult, SqlString& iResult_String)
4

2 に答える 2

0

インターフェイスを実装する作成するすべてのオブジェクトIDisposableは、ブロック内にある必要がありUsingます。これにより、例外に関係なく、オブジェクトが迅速にクリーンアップされます。これには、WebResponse と StreamReader の 2 つのストリームが含まれます。

これは、SQL Server プロセス内で実行されているコードにとって特に重要です。

于 2012-04-30T14:45:13.003 に答える
0

IDisposable インターフェイスごとに using ブロックを配置した後もエラーが発生していましたが、それが 32 ビットの SQL Server インストールであり、読んだ内容から、CLR メモリの処理が 64 ビットとは異なることに気付きました。;-g384 起動パラメーターを使用すると、より堅牢なソリューションを実装できるようになるまで、少なくともエラーが緩和されました。助けてくれてありがとう。

于 2012-05-01T12:22:28.860 に答える