ExtJS Потоковая передача через WCF basicHttp Service - PullRequest
2 голосов
/ 21 марта 2012

Привет Недавно я попытался создать простой веб-сервис, способный к потоковой передаче данных через компонент загрузки файлов ExtJS. Я успешно сделал это с помощью конфигурации webHttp, тем не менее, я хотел бы сделать это с basicHttpBinding или, что еще лучше, с wsHttpBinding.

Я все еще получаю 415 неподдерживаемый тип носителя, пока не нашел ответа.Это мой web.config:

  <basicHttpBinding>
    <binding maxReceivedMessageSize="67108864" transferMode="Streamed"/>
  </basicHttpBinding>

</bindings>

<behaviors>

    <serviceBehaviors>
      <behavior>
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False"/>
      </behavior>
    </serviceBehaviors>

</behaviors>


<services>
  <service name="WebApp.Service1" >
    <endpoint
      address=""
      binding="basicHttpBinding"
      contract="WebApp.Service1" />

  </service>
</services>

Также мой Сервис определен как

  [ServiceContract(Namespace = "")]
    public class Service1
    {
        [OperationContract]
        public bool DoWork(Stream data)
        {
            MultipartParser parser = new MultipartParser(data);
            StreamedResponse response = new StreamedResponse();
            response.Success = true;
            return true;
        }
    }

Это только для целей тестирования, простопытаясь заставить это работать.На самом деле я хотел бы обернуть это в Wrapped Request и ответ, но это уже другая история.

О, да, мой Ext Code выглядит так:

var fp = new Ext.FormPanel({
    renderTo: 'fi-form',
    fileUpload: true,
    width: 500,
    frame: true,
    title: 'File Upload Form',
    autoHeight: true,
    bodyStyle: 'padding: 10px 10px 0 10px;',
    labelWidth: 50,
    defaults: {
        anchor: '95%',
        allowBlank: false,
        msgTarget: 'side'
    },
    items: [{
        xtype: 'fileuploadfield',
        id: 'form-file',
        emptyText: 'Select an image',
        fieldLabel: 'Photo',
        name: 'data',
        buttonText: '',
        buttonCfg: {
            iconCls: 'upload-icon'
        },
        listeners: {
            'fileselected': function () {

            if (fp.getForm().isValid()) {
                fp.getForm().submit({
                    url: '/Service1.svc/DoWork',
                    waitMsg: 'Uploading your photo...',

                    success: function (fp, o) {
                        msg('Success', 'Processed file "' + o.result.file + '" on the server');
                    }
                });
            }
        }

        }
    }],
    buttons: [{
        text: 'Save',}, {
        text: 'Reset',
        handler: function () {
            fp.getForm().reset();
        }
    }]
});
...