Поток WCF занимает слишком много времени - PullRequest
1 голос
/ 27 апреля 2011

Я включил потоковую передачу в своем коде, но загрузка больших файлов все еще занимает много времени.Вот что происходит:

Мой код WPF вызывает службу для загрузки файла, но отладчик службы срабатывает через долгое время.Для файла размером 10 МБ требуется около 1,07 минуты.

Ниже приведен код:

Телефонный код:

using (System.IO.FileStream stream = new System.IO.FileStream(fileInfo.FullName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
            {
                uploadRequestInfo.FileName = fileInfo.Name;
                uploadRequestInfo.Length = fileInfo.Length;
                uploadRequestInfo.FileByteStream = stream;
                clientUpload.UploadFile(uploadRequestInfo);
            }

Операционный договор:

public partial class RemoteFileInfo {

        [System.ServiceModel.MessageHeaderAttribute(Namespace="http://tempuri.org/")]
        public string FileName;

        [System.ServiceModel.MessageHeaderAttribute(Namespace="http://tempuri.org/")]
        public long Length;

        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=0)]
        public System.IO.Stream FileByteStream;

        public RemoteFileInfo() {
        }

        public RemoteFileInfo(string FileName, long Length, System.IO.Stream FileByteStream) {
            this.FileName = FileName;
            this.Length = Length;
            this.FileByteStream = FileByteStream;
        }
    }

app.config:

        <binding name="BasicHttpBinding_ITransferService" 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="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
            <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                  realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
            </security>
        </binding>

1 Ответ

0 голосов
/ 27 апреля 2011

Вы можете оптимизировать его на уровне контракта на обслуживание, отредактировав Web.config веб-приложения, в котором размещается служба WCF.

Чтобы указать вам верное направление, мне нужно знать намного большеинформация о веб-сервисах, которые размещает приложение, и т. д. Но это будет нечто вроде построения пользовательской привязки с помощью:

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