У меня есть приложение ASP.NET 4.0.
Веб-служба размещается с использованием файла .svc
, связывающего источник (реализация службы).Файл веб-службы .svc
расположен в каталоге WebServs
в корневом каталоге приложения: MyApp/WebServs/mysvc.svc
.
Веб-служба настроена с использованием Web.config
(в корневом каталоге).
<!-- Service model -->
<system.serviceModel>
<services>
<service name="DataAccessService">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="basicHttpBinding_ISRV"
contract="MyNamespace.ISRV">
</endpoint>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="basicHttpBinding_ISRV" maxReceivedMessageSize="2147483647">
<readerQuotas maxStringContentLength="1310720"
maxArrayLength="16384"
maxBytesPerRead="24096"
maxDepth="10000"
maxNameTableCharCount="16384"/>
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
OK!
Когда я вызываю веб-сервис, я создаю канал, используя подпрограмму для инкапсуляции этой обычно используемой логики:
public static ISRV GetService() {
try {
// Create the service endpoint
BasicHttpBinding bhttpb = new BasicHttpBinding(
BasicHttpSecurityMode.TransportCredentialOnly);
bhttpb.MaxReceivedMessageSize = 2147483647;
bhttpb.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas();
bhttpb.ReaderQuotas.MaxArrayLength = 16384);
bhttpb.ReaderQuotas.MaxBytesPerRead = 24096);
bhttpb.ReaderQuotas.MaxDepth = 10000);
bhttpb.ReaderQuotas.MaxNameTableCharCount = 16384);
bhttpb.ReaderQuotas.MaxStringContentLength = 1310720);
ServiceEndpoint httpEndpoint =
new ServiceEndpoint(
ContractDescription.GetContract(typeof(ISRV)),
bhttpb,
new EndpointAddress());
// Create channel factory and get proper channel for service.
ChannelFactory<ISRV> channelFactory = new ChannelFactory<ISRV>(httpEndpoint);
IDAS svc = channelFactory.CreateChannel();
return svc;
} catch (Exception e) {
throw new DASException("DAS Exception: " + e.Message);
}
}
Эта подпрограммавызывается клиентами.В то время как Web.config
используется для настройки стороны службы сервера.
Когда я пытаюсь выполнить свою службу с большими сообщениями (с крошечными сообщениями, все в порядке), я получаю:
При попытке десериализации сообщения форматер выдал исключение: при попытке десериализации параметра произошла ошибка http://((Namespace)):((Operation)). Сообщение InnerException было «Произошла ошибка при десериализации объекта типа ((Type)), App_Code.s5qoir2n,Версия = 0.0.0.0, Культура = нейтральная, PublicKeyToken = null]].Максимальная квота длины строки содержимого (8192) была превышена при чтении данных XML.Эту квоту можно увеличить, изменив свойство MaxStringContentLength в объекте XmlDictionaryReaderQuotas, используемом при создании средства чтения XML.Строка 31, позиция 1309. '.Пожалуйста, смотрите InnerException для более подробной информации.
Не понимаю.И сервис, и клиент имеют общие настройки, и это считывает значения по умолчанию ?????Кроме того, я сделал так же, как и многие другие пользователи, следуя инструкциям здесь, в StackOverflow.
Пожалуйста, помогите мне.Thankyou