Проблема с переносом больших данных с WCF - PullRequest
0 голосов
/ 08 сентября 2010

Привет, я наконец-то создал небольшой сервис загрузки wcf.Я могу передавать небольшие изображения на свой компьютер, но я попытался перенести песню в формате mp3, чтобы получить больше данных.Он исчез с исключением «400 неверных запросов».Я понятия не имею, что происходит.Я передаю данные и нашел много ресурсов в сети, но, похоже, ни один из них не работает, это то, что я имею в качестве служб web.config:

 <?xml version="1.0"?>
<configuration>

  <system.web>
    <httpRuntime maxRequestLength="67108864"/>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transferMode="Streamed" messageEncoding="Mtom" maxBufferSize="65536" maxReceivedMessageSize="67108864">
          <readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000" />
        </binding>
        <!--<binding name="ExampleBinding" transferMode="Streamed" messageEncoding="Mtom" />-->
      </basicHttpBinding>

    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

И это мои клиенты app.config.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IMediaServer" closeTimeout="00:10:00"
                    openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Streamed"
                    useDefaultWebProxy="true">
                  <readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:49689/MediaServer.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IMediaServer" contract="mediaServer.IMediaServer"
                name="BasicHttpBinding_IMediaServer" />
        </client>
    </system.serviceModel>
</configuration>

Насколько я вижу, я должен иметь возможность получать как минимум 64 МБ данных, а данные, которые я пытаюсь передать, составляют около 4 МБ.Может кто-нибудь указать мне правильное направление относительно того, что ошибка в моей конфигурации (по крайней мере, я подозреваю, что ошибка в моей конфигурации)

РЕДАКТИРОВАТЬ Это мои контракты:

[ServiceContract]
    public interface IMediaServer
    {

        [OperationContract]
        void UploadData(UploadFile data);
    }

[MessageContract]
    public class UploadFile
    {
        public UploadFile() { }

        [MessageHeader]
        public string FileName { get; set; }

        [MessageHeader]
        public string Type { get; set; }

        [MessageHeader]
        public string AccountName { get; set; }

        [MessageBodyMember]
        public Stream data { get; set; }
    }

1 Ответ

1 голос
/ 08 сентября 2010

Ваш клиент не настроен на использование потоковой передачи. Измените режим передачи в конфигурации клиента на поток. Также в настройках вашего сервиса попробуйте удалить имя привязки. В данный момент вы используете конечную точку по умолчанию, которая использует конфигурацию связывания по умолчанию = конфигурация без имени.

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