Я пытаюсь отправить изображение из клиента 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());
}
}