У меня есть служба RESTful WCF, которая работает нормально. Теперь мне нужно хранить двоичную информацию (документы PDF) в серверной базе данных SQL Server. Так что теперь мой сервис должен иметь возможность передавать данные VARBINARY - я полагаю, как байтовый массив. Когда я настраиваю это и пытаюсь заставить это работать, я получаю следующую ошибку:
Превышен максимальный размер квоты для входящих сообщений (65536). Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize для соответствующего элемента привязки.
Единственная проблема заключается в том, что в моем Web.config не настроены обязательные элементы. Я использую WebServiceHostFactory по умолчанию в моем файле .SVC. Это выглядит так:
<%@ ServiceHost Language="C#" Debug="true" Service="MyProject.MyService" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
Код моего сервиса выглядит так:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceContract]
public class MyService
{
public MyService()
{
XmlConfigurator.Configure();
}
[WebGet(UriTemplate = "/docs/{docid}")]
[OperationContract]
public Doc GetDoc(string docid)
{
[do some stuff to get a Doc object that has the byte array with the PDF file]
return _doc;
}
}
Doc - это пользовательский класс, который выглядит следующим образом:
public class Doc
{
private string _title;
private DateTime _docDate;
private byte[] _pdfFile;
public string Title
{
get{ return _title; }
set{ _title = value; }
}
public DateTime DocDate
{
get{ return _docDate; }
set{ _docDate = value; }
}
public byte[] PDFFile
{
get{ return _pdfFile; }
set{ _pdfFile = value; }
}
}
На стороне клиента у меня есть следующий код, который обращается к службе. Опять же, в Web.config вообще ничего нет. Я использую Фабрику.
public class MyClient
{
WebChannelFactory<IMyService> cf;
IMyService channel;
public MyClient()
{
cf = new WebChannelFactory<IMyService>(new Uri("http://www.something.com/myservice.svc"));
channel = cf.CreateChannel();
}
public Doc GetDoc(string docid)
{
return channel.GetDoc(docid);
}
}
Все, что я прочитал, говорит о внесении изменений в Web.config как на клиенте, так и на сервисе, чтобы обеспечить больший размер сообщения. Но так как я использую Factory как на клиенте, так и на сервисе, я не думаю, что это сработает. Есть ли какой-то способ в коде, который я могу изменить в моей настройке, чтобы увеличить размер сообщения?
Я посмотрел на этот вопрос и попытался сделать то, что он рекомендует, но он не сработал. WCF WebServiceHostFactory MaxReceivedMessageSize конфигурации
Любая помощь приветствуется.