SQL ошибок CLR после обновления за июль 2020 г. - PullRequest
1 голос
/ 06 августа 2020

У меня большая система, которая использует компонент SQL CLR для связи с сервером и получения XML обратно. До последнего обновления он был рок- solid. Теперь вместо того, чтобы получить XML, он выдает ошибку: инициализатор типа для 'Scope' выдал исключение. Если удалю обновление, нормально работает. Любая подсказка, что в этом большом сворачивании могло сломать SQL CLR с использованием WebClient, чтобы получить XML?

Вот фрагмент из тестовой программы, который в основном такой же, как и действительно большой модуль:

Try
    Dim values As New NameValueCollection
    Dim enc As Encoding = New UTF8Encoding(True, True)
    values.Add("Username", "xxx")
    values.Add("Password", "yyy")
    values.Add("App", "test")
    values.Add("InputData", Uri.EscapeDataString(strInputData))

    Dim strResponse As String = ""
    Dim strURL As String = server & "/service/amps_price.aspx"

    Using client As New WebClient()
    Dim responseBytes As Byte() = client.UploadValues(strURL, values)
    strResponse = (New System.Text.UTF8Encoding(False)).GetString(responseBytes)
    End Using

    Dim xmlResponse As New XmlDocument()
    xmlResponse.LoadXml(strResponse)
    Dim blnValidResponse As Boolean

    blnValidResponse = Integer.TryParse(xmlResponse.SelectSingleNode("Amps/ReturnCode").InnerText, intAmpsReturnCode)
    strAmpsReturnDesc = xmlResponse.SelectSingleNode("Amps/ReturnDesc").InnerText

    If (blnValidResponse) Then
    strApcPricerResults = strResponse
    End If

    intAmpsReturnCode = -99
    strAmpsReturnDesc = "ERROR"

Catch ex As WebException
    intAmpsReturnCode = ex.Status
    strAmpsReturnDesc = ex.Message
End Try

Редактировать: Добавить трассировку стека:

The type initializer for 'Scope' threw an exception. -    at System.Data.TypeLimiter.Scope.IsTypeUnconditionallyAllowed(Type type)
   at System.Data.TypeLimiter.Scope.IsAllowedType(Type type)
   at System.Data.TypeLimiter.EnsureTypeIsAllowed(Type type, TypeLimiter capturedLimiter)
   at System.Data.DataColumn.UpdateColumnType(Type type, StorageType typeCode)
   at System.Data.DataColumn..ctor(String columnName, Type dataType, String expr, MappingType type)
   at System.Data.XSDSchema.HandleElementColumn(XmlSchemaElement elem, DataTable table, Boolean isBase)
   at System.Data.XSDSchema.HandleParticle(XmlSchemaParticle pt, DataTable table, ArrayList tableChildren, Boolean isBase)
   at System.Data.XSDSchema.HandleComplexType(XmlSchemaComplexType ct, DataTable table, ArrayList tableChildren, Boolean isNillable)
   at System.Data.XSDSchema.InstantiateTable(XmlSchemaElement node, XmlSchemaComplexType typeNode, Boolean isRef)
   at System.Data.XSDSchema.HandleTable(XmlSchemaElement node)
   at System.Data.XSDSchema.LoadSchema(XmlSchemaSet schemaSet, DataSet ds)
   at System.Data.DataSet.InferSchema(XmlDocument xdoc, String[] excludedNamespaces, XmlReadMode mode)
   at System.Data.DataSet.ReadXml(XmlReader reader, XmlReadMode mode, Boolean denyResolving)
   at Amps.Pcm.clsOutptData.UpdateApc(SqlConnection conn, Int32 intClaimId, Decimal decPaymentPercent, String xmlResults)
   at Amps.Pcm.StoredProcedures.usp_adj_clr_api_outpatient_price(SqlInt32 claim_id, SqlInt32 contract_id, SqlString vch_server, SqlInt32 int_port)

1 Ответ

1 голос
/ 24 августа 2020

Причиной проблемы для меня была установка KB4565635 И / ИЛИ KB4565588. Удаление этого патча позволило моей подпрограмме SQLCLR работать правильно. Я буду вносить изменения в код для постоянного адреса. Я добавлю более подробную информацию после окончательного исправления. Опять же, никогда не рекомендуется исключать исправление KB навсегда, поэтому это краткосрочное исправление для меня.

EDIT: Я обнаружил, что были затронуты все функции SQLCLR или хранимые процедуры, содержащие XML. Мне удалось исправить это, добавив следующую строку в качестве первой строки в каждом объекте SQLCLR, который содержал XML функциональность ...

AppContext.SetSwitch ("Switch.System.Data.AllowArbitraryDataSetTypeInstantiation", true);

Например ... [SqlFunction (Name = "Event", FillRowMethodName = "EventFill", TableDefinition = "OccurredTime datetime, AckTime datetime, ClosedTime datetime, Категория smallint, State smallint, Priority smallint, Type smallint, EventDescription nvarchar (256), EventDetail xml ", DataAccess = DataAccessKind.Read)] * ​​1007 *

publi c stati c IEnumerable EventInit (SqlInt32 sourceDeviceId, SqlDateTime startDate, SqlDateConate (Время окончания) (endDtext) "Switch.System.Data.AllowArbitraryDataSetTypeInstantiation", true);

Сообщение об ошибке, которое появляется при появлении этой проблемы, выглядит следующим образом ...

Error on SourceDeviceAttributeId : 4
Msg 50000, Level 16, State 1, Procedure RefreshWarehouse, Line 223

Message: SDAID 4: Error 6522, Level 16, State 1, Procedure RefreshAggregateData, Line 216, A .NET Framework error occurred during execution of user-defined routine or aggregate "Trend": 
System.TypeInitializationException: The type initializer for 'Scope' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
System.IO.FileNotFoundException: 
   at System.Data.TypeLimiter.Scope..cctor()
System.TypeInitializationException: 
   at Eaton.FRSCoreDB.Database.UserDefinedFunctions.TrendInit(SqlInt32 sourceDeviceAttributeId, SqlDateTime startDate, SqlDateTime endDate, SqlInt32 maxRows)

OR ....

Инициализатор типа для 'Scope' выдал исключение. - в System.Data.TypeLimiter.Scope.IsTypeUnconditionalAllowed (тип типа) в System.Data.TypeLimiter.Scope.IsAllowedType (тип типа) в System.Data.TypeLimiter.EnsureTypeIsAllowed (тип типа, TypeLimiter захвачены. .UpdateColumnType (тип типа, StorageType typeCode) в System.Data.DataColumn..ctor (String columnName, Type dataType, String expr, MappingType type) в System.Data.XSDSchema.HandleElementColumn (элемент XmlSchemaElement is, таблица DataTable) System.Data.XSDSchema.HandleParticle (XmlSchemaParticle pt, таблица DataTable, таблица ArrayList tableChildren, логическое значение isBase) в System.Data.XSDSchema.HandleComplexType (XmlSchemaComplexType ct, таблица DataTable, ArrayListModel.TableChildren (таблица). Узел XmlSchemaElement, XmlSchemaComplexType typeNode, Boolean isRef) в System.Data.XSDSchema.HandleTable (узел XmlSchemaElement) в System.Data.XSDSchema.LoadSchema (XmlSchemaSet schemaSet, DataSet ds) a.DataSet.InferSchema (XmlDocument xdo c, String [] excludedNamespaces, режим XmlReadMode) в System.Data.DataSet.Read Xml (средство чтения XmlReader, режим XmlReadMode, логическое denyResolving) в * Amps.Pcm.clsOutdateData. 1024 * (SqlConnection conn, Int32 intClaimId, Decimal decPaymentPercent, String xmlResults) в Amps.Pcm.StoredProcedures.usp_adj_clr_api_outpatient_price (SqlInt32claim_id, SqlInt32 contract_id, SqlInt32 contract_id, Sql16String)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...