Я новичок в мире 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;
}
Чтобы проверить - когда вы говорите «CLR», вы имеете в виду хранимую процедуру CLR в SQL-сервере? – Paddy
Не дали ли инструкции, которые он дал? * Эта квота может быть увеличена путем изменения свойства MaxStringContentLength объекта XmlDictionaryReaderQuotas, который используется при создании XML-считывателя. * –
Не знаете, что вы подразумеваете под «использованием CLR». Для меня это означает * Common Language Runtime *, который, как я предполагаю, использует любой автор C#. – Jacob