CLR存储过程线程异常

时间:2012-04-30 14:32:51

标签: .net sql-server clr clrstoredprocedure threadabortexception

我有一个在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)

2 个答案:

答案 0 :(得分:0)

您创建的每个实现IDisposable接口的对象都需要位于Using块中。这可确保即时清理对象,无论例外情况如何。这包括两个流,WebResponse和StreamReader。

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

答案 1 :(得分:0)

在为每个IDisposable接口添加一个使用块后,我仍然收到一个错误,但它让我意识到它是一个32位的SQL Server安装,从我读到的它处理CLR内存不同于64-位。使用; -g384启动参数至少可以对错误进行绑定,直到我可以实现更强大的解决方案。谢谢你的帮助。