У меня есть веб-служба WCF с одним работающим веб-методом, который принимает один строковый параметр.
У меня есть приложение WinForms, которое ссылается на веб-сервис WCF, и все это работает на .NET 4.0.
Проблема заключается в том, что когда я вызываю веб-метод со слишком большим количеством данных для строковых данных (около 4 МБ), это отлаживает как клиент, так и сервер на моей локальной машине (Win 7 Pro 64bit, IIS 7), я получаю следующую ошибку (внутренний исключение, исключение):
Запрос был прерван: Запрос
был отменен.
Ошибка (Запрос был прерван:
запрос был отменен)
передача данных по HTTP
канал.
При работе на производственном сервере я получаю другое сообщение (глупо, что я его не копировал), говорящее о том, что что-то вроде сервера могло прервать соединение или подобное.
Если я уменьшу данные примерно до половины (2 МБ), все будет работать нормально. Разочарование в том, что я установил все настройки конфигурации, сбросил IIS, перезагрузил компьютер, но он все еще остается.
Код проверки веб-службы получает удар, проверяет пользователя в порядке, а затем, как только он выходит из проверки, выводит указанное выше сообщение обратно клиенту. Трассировка стека в методе проверки (мой код) показывает только материал .NET, поэтому мой код больше не нужно отлаживать, 8 (.
На стороне сервера у меня это есть в web.config:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
<services>
<service name="MyNS.MyService" behaviorConfiguration="MyNS.MyServiceBehavior">
<endpoint binding="wsHttpBinding" bindingConfiguration="httpWithMessageSecurity" contract="MyNS..MyService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyNS.MyServiceBehavior">
<serviceCredentials>
<serviceCertificate findValue="Server" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="MyNS.Validators.MyServiceUserValidator, MyNS./>
</serviceCredentials>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="httpWithMessageSecurity"
maxReceivedMessageSize="2147483647"
maxBufferPoolSize="2147483647">
<readerQuotas
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647"
maxArrayLength="2147483647"
maxStringContentLength="2147483647"/>
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
На стороне клиента у меня это есть в app.config:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="serviceHttpBinding"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
messageEncoding="Text"
textEncoding="utf-8"
sendTimeout="01:00:00"
closeTimeout="00:00:20"
openTimeout="00:00:20"
receiveTimeout="00:20:00">
<readerQuotas
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647"
maxArrayLength="2147483647"
maxStringContentLength="2147483647"/>
<security mode="Message">
<message clientCredentialType="UserName" negotiateServiceCredential="true"
algorithmSuite="Default" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="clientServerBehaviour">
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="PeerOrChainTrust"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint address="http://mymachine/TheServices/Services/MyService.svc"
binding="wsHttpBinding" bindingConfiguration="serviceHttpBinding"
contract="DirectorySubmitService.IDirectorySubmitService" name="WSHttpBinding_IDirectorySubmitService">
<identity>
<dns value="Server" />
</identity>
</endpoint>
</client>
РЕДАКТИРОВАТЬ 1:
После включения отладочных символов в VS, после завершения моего кода проверки в службе WCF я получаю следующие исключения:
System.Web.HttpException: превышена максимальная длина
Стек: System.Web.HttpRequest.GetEntireRawContent ()
Тогда:
System.ServiceModel.CommunicationException: превышена максимальная длина
Стек: System.ServiceModel.Activation.HostedHttpRequestAsyncResult.GetInputStream ()
Последующие исключения CommunicationException относятся к каналам и т. Д., Но все они являются одним и тем же сообщением об ошибке.
Я все так проверил пул приложений в IIS, который был установлен как 30 МБ в качестве предела запроса, поэтому я исчерпал максимальные пределы, которые я могу увеличить, так что это сообщение - настоящий удар по лицу.
Любая помощь будет принята с благодарностью.