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。

这对于在 SQL Server 进程内运行的代码尤其重要。

于 2012-04-30T14:45:13.003 回答
0

在为每个 IDisposable 接口放入 using 块后,我仍然遇到错误,但它让我意识到它是一个 32 位 SQL Server 安装,并且从我读到的内容来看,它处理 CLR 内存的方式与 64 位不同。使用 ;-g384 启动参数至少可以消除错误,直到我可以实施更强大的解决方案。谢谢您的帮助。

于 2012-05-01T12:22:28.860 回答