我有以下代码,可以在 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)
创建的实现IDisposable
接口的每个对象都需要位于Using
块中。这可确保及时清理对象,无论异常如何。这包括两个流,WebResponse 和 StreamReader。
这对于在 SQL Server 进程内运行的代码尤其重要。
在每个 IDisposable 接口放入一个 using 块后,我仍然收到一个错误,但它让我意识到它是一个 32 位 SQL Server 安装,从我读到的内容来看,它处理 CLR 内存的方式与 64 位不同。使用 ;-g384 启动参数至少可以阻止错误,直到我能够实现更强大的解决方案。感谢您的帮助。