Отправка изображения в WCF из silverlight как сбой байта [] при превышении 48765 байтов - PullRequest
0 голосов
/ 09 апреля 2011

Я пытаюсь отправить изображение из клиента silverlight в службу WCF.

У меня есть следующие классы для отправки

namespace PhotoViewer.DataObjects.Requests
{
    public class SavePhotoRequest
    {
        public Photo Photo { get; set; }
    }
}

namespace PhotoViewer.DataObjects.Entitys
{
    public class Photo
    {
        public Photo() { }

        public Photo(int id, DateTime takeOn, Byte[] photoBinary)
        {
            _iD = id;
            _takenOn = takeOn;
            _photoBinary = photoBinary;
        }

        int _iD;
        DateTime _takenOn;
        Byte[] _photoBinary;

        public int ID { get { return _iD; } set { _iD = value; } }
        public DateTime TakeOn { get { return _takenOn; } set { _takenOn = value; } }
        public Byte[] PhotoBinary { get { return _photoBinary; } set { _photoBinary = value; } }
    }
}

Я пытался установить все на максимум вмои конфигурационные файлы выглядят следующим образом

ServiceReference.ClientConfig

<configuration>
  <system.serviceModel>

    <bindings>
      <basicHttpBinding>
        <binding
           name="BasicHttpBinding_IPhotoService"
           closeTimeout="10:00:00"
           openTimeout="10:00:00"
           receiveTimeout="10:00:00"
           sendTimeout="10:00:00"
           maxBufferSize="2147483647"
           maxReceivedMessageSize="2147483647"           
           textEncoding="utf-8" 
           transferMode="Buffered">
          <security mode="None">
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:52715/PhotoService.svc"
                binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IPhotoService"
                contract="PhotoViewer.Model.ServiceContracts.IPhotoService"
                name="BasicHttpBinding_IPhotoService" />
    </client>
  </system.serviceModel>
</configuration>

Web.Config

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <httpRuntime maxRequestLength="102400"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="PhotoViewer.Service.Implementations.PhotoService"
          behaviorConfiguration="PhotoDebugBehaviors">
        <endpoint contract="PhotoViewer.Service.Interfaces.IPhotoService"
          binding="basicHttpBinding"
          bindingConfiguration="BasicHttpBinding_IPivotService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="PhotoDebugBehaviors">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <bindings>
      <basicHttpBinding>
        <binding
           name="BasicHttpBinding_IPivotService"
           closeTimeout="10:00:00"
           openTimeout="10:00:00"
           receiveTimeout="10:00:00"
           sendTimeout="10:00:00"
           maxBufferSize="2147483647"
           maxReceivedMessageSize="2147483647"
           maxBufferPoolSize="2147483647"
           textEncoding="utf-8" >
          <readerQuotas maxArrayLength="2147483647"
                        maxStringContentLength="2147483647"
                        maxBytesPerRead="2147483647"
                        maxDepth="2147483647"
                        maxNameTableCharCount="2147483647"
                    />
        </binding>
      </basicHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Но это простоне будет работать, как только массив байтов превысит 48765. Я получаю следующий ответ от fiddler.

HTTP / 1.1 400 Неправильный сервер запросов: ASP.NET Development Server / 10.0.0.0 Дата:Пт, 08 апреля 2011 21:58:57 GMT X-AspNet-Version: 4.0.30319 Cache-Control: private Content-Length: 0 Соединение: Закрыть

Я прочитал много статей, в которых этоКажется, работает только с увеличением всех размеров в файлах конфигурации, но я поставил все это на максимум и просто не могу понять, что я пропустил.

РЕДАКТИРОВАТЬ

Вот PhotoService.svc

<%@ ServiceHost Language="C#" 
                Debug="true" 
                Service="PhotoViewer.Service.Implementations.PhotoService" %>

и PhotoService.cs

namespace PhotoViewer.Service.Implementations
{
   public class PhotoService : IPhotoService
    {
        IUnityContainer container;

        public PhotoService()
        {
            SetUnityContainer();
        }

        public SavePhotoResult SavePhoto(SavePhotoRequest request)
        {
            var imageRepository = container.Resolve<IPhotoRepository>();

            imageRepository.SavePhoto(request.Photo);

            container.Resolve<IUnitOfWork>().SubmitChanges();

            return new SavePhotoResult();
        }

        private void SetUnityContainer()
        {
            container = new UnityContainer();
            container.RegisterType<IUnitOfWork, DatabaseUnitOfWork>(new ContainerControlledLifetimeManager());
            container.RegisterType<IRepository<Photo>, Repository<Photo>>(new ContainerControlledLifetimeManager());
            container.RegisterType<IPhotoRepository, PhotoRepository>(new ContainerControlledLifetimeManager());
        }
    }

1 Ответ

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

О, как стыдно, кажется, я просто был полным Numpty!

Каким-то образом я закончил с файлом web.config в проекте, который содержал мои сервисные интерфейсы и реализации. Я изменил все настройки в этом файле конфигурации, а не файл конфигурации, который использовался в проекте хостинга asp.net.

Как только я скопировал настройки из неправильного конфига, чтобы исправить конфигурационный файл, все заработало !! Да, иногда лучше не сжигать полночное масло

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