Ошибка отправки большого байтового массива - PullRequest
5 голосов
/ 26 мая 2011

У меня есть служба WCF, через которую я добавляю данные в БД. Это работает нормально, но когда я пытаюсь отправить большой байт [], возвращается «удаленный сервер возвратил ошибку: NotFound».

web.config

    <?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="JabsBaseConnectionString" connectionString="Data Source=TAHASAGHIR-PC\SQLEXPRESS;Initial Catalog=JabsBase;Integrated Security=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <httpRuntime maxRequestLength="2097151" useFullyQualifiedRedirectUrl="true"/>
  </system.web>
  <system.serviceModel>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" />
    <bindings>
      <basicHttpBinding>
        <binding name="SendLargeChat"
                 allowCookies="false"
                 bypassProxyOnLocal="false" 
                 maxBufferPoolSize="2147483647"
                 maxReceivedMessageSize="2147483647"
                 maxBufferSize="2147483647"
                 closeTimeout="10:00:00"
                 openTimeout="10:00:00"
                 receiveTimeout="10:00:00"
                 sendTimeout="10:00:00"
                 transferMode="Streamed">
          <readerQuotas 
            maxArrayLength="2147483647"
            maxBytesPerRead="2147483647"
            maxDepth="2147483647"
            maxNameTableCharCount="2147483647"
            maxStringContentLength="2147483647" />
        </binding>
      </basicHttpBinding>      
    </bindings>
    <services>
      <service name="Prototype.SendChatService" behaviorConfiguration="Prototype.SendChatServiceBehavior">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="SendLargeChat" contract="Prototype.SendChatService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>      
    </services>    
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name="Prototype.SendChatServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

ServiceReferences.ClientConfig

<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>        
        <binding name="BasicHttpBinding_ISendChatService" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647">
          <security mode="None" />
        </binding>
      </basicHttpBinding>      
    </bindings>
    <client>      
      <endpoint address="http://localhost:53756/PrototypeSite/SendChatService.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISendChatService"
        contract="SendChatService.ISendChatService" name="BasicHttpBinding_ISendChatService" />
    </client>
  </system.serviceModel>
</configuration>

Запрос POST http://localhost:53756/PrototypeSite/SendChatService.svc HTTP / 1.1 Хост: localhost: 53756 Подключение: keep-alive Рефере: http://localhost:53756/PrototypeSite/ClientBin/Prototype.xap Длина контента: 1348176 мыло: "http://tempuri.org/ISendChatService/addMsg" тип контента: текст / xml; кодировка = UTF-8 Принять: / Агент пользователя: Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 534.24 (KHTML, как Gecko) Chrome / 11.0.696.68 Safari / 534.24 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US, en; q = 0,8 Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,3

Ответ HTTP / 1.1 400 неверный запрос Сервер: ASP.NET Development Server / 10.0.0.0 Дата: четверг, 26 мая 2011 г., 17:48:00 по Гринвичу X-AspNet-версия: 4.0.30319 Cache-Control: приватный Длина контента: 0 Подключение: Закрыть

Ответы [ 6 ]

2 голосов
/ 26 мая 2011

404 / Not Found - это ошибка Silverlight сообщает обо всех ошибках сервера.Если вы хотите узнать фактическую ошибку, возвращаемую с сервера, вы можете использовать что-то вроде Fiddler для просмотра того, что отправлено и получено, включая заголовки, которые содержат действительный код ошибки и сообщение об ошибке, возвращаемое сервером,

1 голос
/ 18 августа 2012

Вы также можете включить ведение журнала WCF для получения дополнительной информации.Добавьте в ваш web.config следующее:

<system.diagnostics>
    <sources>
        <source name="System.ServiceModel"
                  switchValue="Information, ActivityTracing"
                  propagateActivity="true">
            <listeners>
                <add name="traceListener"
                     type="System.Diagnostics.XmlWriterTraceListener"
                     initializeData= "c:\log\Traces.svclog" />
            </listeners>
        </source>
    </sources>
</system.diagnostics>
1 голос
/ 01 февраля 2012

По моему опыту, я получал сообщение об ошибке, потому что, хотя служба на сервере была настроена для получения большого объема данных, среда выполнения http не была. Убедитесь, что ваш httpRuntime имеет соответствующий maxRequestLength.

1 голос
/ 26 мая 2011

попробуйте добавить настройку executeTimeout в настройку HTTPRuntime

<httpRuntime executionTimeout="110" maxRequestLength="..." />
1 голос
/ 26 мая 2011

Я думаю, вы должны применить то же самое

<readerQuotas ...

На клиенте.

0 голосов
/ 26 мая 2011

Извините, мой ответ не так !!Игнорировать его

Я удалю его через несколько часов, просто позволяя людям с комментариями видеть его.

Делать не отправитьбайтовые массивы в SOAP.

Каждый байт будет передан как <byte>128</byte> или аналогичный, что означает, что он займет в среднем в 10 раз больше.

Используйте взамен base64 string - поэтому определите ваше свойство какстроку и заполните ее как строку base64.

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