gpt4 book ai didi

wcf - 使用 JSON 调用 WCF REST 服务时出错。超出长度配额 (8192)

转载 作者:行者123 更新时间:2023-12-02 00:42:10 25 4
gpt4 key购买 nike

我在 IIS 中使用 .NET 4 RC 托管了一个 WCF REST 服务。对服务的 POST 调用使用 JSON 序列化。一切正常,直到其中一个 DataMember(字符串)的大小超过 8K。在这种情况下,我收到如下所述的错误,指示已超出 MaxStringContentLength。端点的 maxStringContentLength 属性已增加,并且可以从配置文件中正确读取。

网络配置是:

<services>
<service name="MyServiceServer" >
<endpoint address="http://localhost/MyService" kind="webHttpEndpoint" endpointConfiguration="serviceEndPoint" contract="IMyService">
</endpoint>
</service>
</services>

<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="serviceEndPoint" maxReceivedMessageSize="2048000" maxBufferSize="2048000" maxBufferPoolSize="0">
<readerQuotas maxStringContentLength="2048000" maxArrayLength="2048000" maxDepth ="65000"/>
<security mode="None">
<transport clientCredentialType="None"/>
</security>
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>

IMyService 接口(interface)定义为:

public interface IMyService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/request", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
void MyMehod(<Class Type> obj);
}

完整的错误信息是:

“服务器在处理请求时遇到错误。异常消息是“反序列化类型对象时出错”。读取 XML 数据时已超出最大字符串内容长度配额 (8192)。可以通过更改创建 XML 阅读器时使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性来增加此配额。'。有关详细信息,请参阅服务器日志。异常堆栈跟踪是:在 System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver) 在 System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName) 在 System.ServiceModel。 Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRequest(消息消息,对象 [] 参数)在 System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(消息消息,对象 [] 参数)在 System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(消息消息,对象 []参数)在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc 和 rpc) 在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc 和 rpc)在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)”

最佳答案

这是有效的,只要确保有一个完整的绝对 URL 作为您的端点地址。如果您变得狡猾并尝试使用相对路径,或者如果您省略 .svc,一旦请求变得太大,它就会出现奇怪的读者配额错误——

我会在 WCF 的 Bug 下归档,因为:

  1. 应该禁止相对 URL(并抛出适当的异常)

  1. 读者配额也应该与相对路径一起使用

关于wcf - 使用 JSON 调用 WCF REST 服务时出错。超出长度配额 (8192),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2257808/

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