gpt4 book ai didi

rest - 无法通过 web.config 设置 maxReceivedMessageSize

转载 作者:行者123 更新时间:2023-12-04 04:54:29 26 4
gpt4 key购买 nike

我现在已经调查了过去两个小时的 400 - BadRequest 代码。
很多建议都是为了确保正确设置 bindingConfiguration 属性,就我而言,确实如此。

现在,在摧毁我所在的建筑物之前,我需要你的帮助 :-)

我运行 WCF RestFull 服务(非常轻量级,使用此资源获取灵感:http://msdn.microsoft.com/en-us/magazine/dd315413.aspx),它(目前)接受通过 POST 动词提供的 XmlElement (POX)。

在实现真正的客户端之前,我目前只使用 Fiddler 的请求生成器(因为这是混合环境)。

当我对小于 65K 的 XML 执行此操作时,它可以正常工作 - 更大,它会引发此异常:
已超出传入邮件 (65536) 的最大邮件大小配额。要增加配额,请在适当的绑定(bind)元素上使用 MaxReceivedMessageSize 属性。

这是我的 web.config 文件(我什至包括了客户端标签(绝望的时候!)):

<system.web>
<httpRuntime maxRequestLength="1500000" executionTimeout="180"/>
</system.web>
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
</diagnostics>
<bindings>
<webHttpBinding>
<binding name="WebHttpBinding" maxReceivedMessageSize="1500000" maxBufferPoolSize="1500000" maxBufferSize="1500000" closeTimeout="00:03:00" openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00">
<readerQuotas maxStringContentLength="1500000" maxArrayLength="1500000" maxBytesPerRead="1500000" />
<security mode="None"/>
</binding>
</webHttpBinding>
</bindings>
<client>
<endpoint address="" binding="webHttpBinding" bindingConfiguration="WebHttpBinding" contract="Commerce.ICatalogue"/>
</client>
<services>
<service behaviorConfiguration="ServiceBehavior" name="Catalogue">
<endpoint address=""
behaviorConfiguration="RestFull"
binding="webHttpBinding"
bindingConfiguration="WebHttpBinding"
contract="Commerce.ICatalogue" />
<!-- endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" / -->
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="RestFull">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

在此先感谢您提供的任何帮助,以通过 >65K XML 成功调用 ;-)

最佳答案

好吧,这件事确实让我很难解决,我会饶过别人的。
挑战在于,我使用了 <%@ ServiceHost Factory="System.ServiceModel.Activation.WebServiceHostFactory" Service="fullyQualifiedClassName" %> ,这是一种很好且简单的工厂实现方法。

但是,这种方法有其缺点;由于在 web.config 文件中不需要任何配置,WebServiceHostFactory 类在设计上不会从 web.config 文件中读取。
我知道;我可以从此类继承,并进行适当的更改,以便它确实可以从配置文件中读取,但这似乎有点超出范围。

我的解决方案是回到更传统的 WCF 实现方式; <%@ ServiceHost Service="fullyQualifiedClassName" CodeBehind="~/App_Code/Catalogue.cs" %> ,然后在 web.config 文件中使用我已经配置的值。

这是我修改后的 web.config 文件(关于 Maddox 头痛):

<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="XmlMessageBinding" maxReceivedMessageSize="5000000" maxBufferPoolSize="5000000" maxBufferSize="5000000" closeTimeout="00:03:00" openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00">
<readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" maxBytesPerRead="5000000" />
<security mode="None"/>
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="fullyQualifiedClassName" behaviorConfiguration="DevelopmentBehavior">
<endpoint name="REST" address="" binding="webHttpBinding" contract="fullyQualifiedInterfaceName" behaviorConfiguration="RestEndpointBehavior" bindingConfiguration="XmlMessageBinding" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="RestEndpointBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="DevelopmentBehavior">
<serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
<behavior name="ProductionBehavior">
<serviceDebug httpHelpPageEnabled="false" includeExceptionDetailInFaults="false"/>
<serviceMetadata httpGetEnabled="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

此更改的另一个好处是,您现在可以直接从 .NET 引用您的 WCF-rest 服务;这不能使用工厂模型和我在整个解决方案中的 XmlElement 实现来完成。

我希望这可以帮助其他有类似问题的人......

关于rest - 无法通过 web.config 设置 maxReceivedMessageSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1439952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com