WCF oData Вставка через веб-сервис
Я пытаюсь увеличить maxReceivedMessageSize для моего сервиса wcf odata. У меня есть другой веб-сервис, который публикует значения в моем сервисе wcf для вставки значений в sql. Я публикую
{
A:1,
B:1,
C:3,
D:4,
}
это вызвало ошибку. Удаленный сервер возвратил ошибку: (400) Bad Request. Если я отправлю значение ниже, он успешно вставлен.
{
A:1
}
так может кто-нибудь, пожалуйста, помогите мне, как исправить эту ошибку, пожалуйста? В Интернете есть примеры, которые пытаются изменить веб-конфигурацию, как показано ниже, но они меня не устраивают, потому что у меня нет сервисного контракта.
<system.serviceModel>
<bindings>
<basicHttpBinding>
<!-- Create a custom binding for our service to enable sending large amount of data -->
<binding name="MyBasicHttpBinding"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647">
<readerQuotas
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxDepth="2147483647"
maxNameTableCharCount="2147483647"
maxStringContentLength="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<!-- Enable the serializer to serialize greater number of records -->
<behavior name="WCFServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<!-- Bind the WCF service to our custom binding -->
<service behaviorConfiguration="WCFServiceBehavior"
name="WcfDataService">
<endpoint address="" binding="basicHttpBinding"
bindingConfiguration="MyBasicHttpBinding"
contract=" `WHICH I DONT HAVE, OR I HAVE IT BUT I AM NOOB` "/>
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Мой WCF работает с ADO.net Entity Model
public class WcfDataService : DataService< DataModel.DataModelEntities >
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
// Examples:
config.SetEntitySetAccessRule("*", EntitySetRights.All);
// config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
1 ответ
Решение
Контракт - System.Data.Services.IRequestHandler от Microsoft.Data.Services.
Моя конфигурация:
<system.serviceModel>
<services>
<service name="ODataSampleRun.DemoDataService" behaviorConfiguration="Behavior">
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
<endpoint contract="System.Data.Services.IRequestHandler" binding="customBinding" bindingConfiguration="RawODataService" address="http://localhost:9090/DemoDataService" behaviorConfiguration="test" />
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="NoneWebBinding">
<security mode="None" />
</binding>
</webHttpBinding>
<customBinding>
<binding name="RawODataService">
<webMessageEncoding webContentTypeMapperType="ODataSampleRun.RawContentTypeMapper, ODataSampleRun, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<httpTransport manualAddressing="true" maxReceivedMessageSize="524288000" transferMode="Streamed" />
</binding>
</customBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="test">
<webHttp faultExceptionEnabled="true" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Behavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" httpHelpPageEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>