2014-01-13 2 views
-1

Я новичок в мире C#, просто даю хедз-ап, потому что знаю ... Я, вероятно, собираюсь начать с новичков, поэтому извиняюсь заранее. Вот моя проблема:CLR длина ошибка квоты

У меня есть CLR, которая вызывает веб-службу. Данные, возвращаемые из веб-службы становится слишком большой для CLR для обработки и генерирует следующее сообщение об ошибке:

Msg 6522, Level 16, State 1, Line 1 
A .NET Framework error occurred during execution of user-defined routine or  
aggregate "fnGetReportData": 
System.Web.Services.Protocols.SoapException:The formatter threw an exception 
while trying to deserialize the message: There was an error while trying to  
deserialize parameter http://tempuri.org/:xmlTags. 
The InnerException message was 'There was an error deserializing the object of type 
System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089]]. The maximum string content 
length quota (8192) has been exceeded while reading XML data. This quota may be 
increased by changing the MaxStringContentLength property on the 
XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 
9474.'. Please see InnerException for more details. 
System.Web.Services.Protocols.SoapException: 
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage 
message, WebResponse response, Stream responseStream, Boolean asyncCall) at 
System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, 
object[] parameters) at myService.RequestReport(String reportName, String[] xmlTags, 
String encryptedUserName, String encryptedPassword) 
at myReportClr.UserDefinedFunctions.fnGetReportData(SqlString reportName, 
SqlString project, SqlXml reportTags, SqlString userName, SqlString password) 

Я посмотрел через некоторые другие должности с аналогичными ошибками длина квот, но большинство предложений предполагают изменение конфигурацию приложения. Поскольку я использую CLR, у меня нет конфигурации приложения, и я не уверен, могу ли я добавить конфигурацию приложения. Я попробовал добавить один, используя инструкции, найденные на LINK, но это для проекта, отличного от CLR.

Справка любезно оценена. Заранее спасибо.

Вот фрагмент кода в дополнение к ошибке.

Исключение приходит в стороне SQL Server в следующем вызове функции:

SELECT @reportData = (dbo.fnGetReportData 
      ('DataCompare' 
      ,@projectName 
      ,@harnessXmlTags 
      ,@user 
      ,@password) 
     ); 

Код ниже от C#. XML вернулся слишком велик и приводит к исключению в верхней части этого поста:

public static SqlXml fnGetReportData(
     SqlString reportName 
     , SqlString project 
     , SqlXml reportTags 
     , SqlString userName 
     , SqlString password 
    ) 
    { 
     String xmlResponse = " "; 
     SqlXml reportData = SqlXml.Null; 

     List<String> xmlTags = new List<String>(); 
     xmlTags.Add(CreateTag("Project", project.ToString())); 
     xmlTags.Add(CreateTag("Configuration", "any")); 
     xmlTags.Add(reportTags.Value); 




     using (myService client = new myService()) 
     { 
      xmlResponse = 
       client.RequestReport(reportName.ToString() 
        , xmlTags.ToArray() 
        , userName.ToString() 
        , password.ToString() 
      ); 
     } 

     if (xmlResponse != null || !xmlResponse.Equals("")) 
     { 
      reportData = convertStringtoSqlXml(removeSoapHeader(xmlResponse, reportName.ToString())); 
     } 
     else 
     { 
      reportData = convertStringtoSqlXml(
       String.Format("{0} xmlns:xsi=\"www.myReport.com/myData\" xmlns:ns=\"uri\"", reportName) 
      ); 
     } 

     return reportData; 
    } 
+1

Чтобы проверить - когда вы говорите «CLR», вы имеете в виду хранимую процедуру CLR в SQL-сервере? – Paddy

+0

Не дали ли инструкции, которые он дал? * Эта квота может быть увеличена путем изменения свойства MaxStringContentLength объекта XmlDictionaryReaderQuotas, который используется при создании XML-считывателя. * –

+1

Не знаете, что вы подразумеваете под «использованием CLR». Для меня это означает * Common Language Runtime *, который, как я предполагаю, использует любой автор C#. – Jacob

ответ

-1

Существует параметр в вашем web.config или app.config называется MaxStringContentLength, который должен быть увеличен. Если его там нет, он использует настройки по умолчанию, и вам нужно добавить его. MSDN имеет хорошую документацию о том, где в файле конфигурации добавить его.

Смежные вопросы