gpt4 book ai didi

WCF 最大读取深度异常

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

尝试通过 WCF 服务传递 DTO 时出现以下异常。

System.Xml.XmlException: The maximum read depth (32) has been exceeded because XML data being read has more levels of nesting than is allowed by the quota. This quota may be increased by changing the MaxDepth property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 5230.
at System.Xml.XmlExceptionHelper.ThrowXmlException

app.config 绑定(bind)看起来像这样
    <binding name="WSHttpBinding_IProjectWcfService" closeTimeout="00:10:00"
openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="10240000" messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="200" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">

<transport clientCredentialType="Windows" proxyCredentialType="None" realm="">
<extendedProtectionPolicy policyEnforcement="Never" />
</transport>
<message clientCredentialType="UserName" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>

Web.config 服务行为:
    <behavior name="BehaviorConfiguration" >
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<dataContractSerializer maxItemsInObjectGraph="6553600" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider" />
<serviceCredentials>
<serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />

<userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider"/>
</serviceCredentials>
</behavior>

DTO 看起来像这样:
[Serializable]
[DataContract(IsReference=true)]
public class MyDto
{

任何帮助将不胜感激,因为我正在用它拉头发。

最佳答案

有一个设置叫做 maxDepth<readerQuotas>您应该能够将其设置为高于 32(默认值)的值。您显然已经在客户端上设置了这个(maxDepth=200),但您还需要在服务器端执行此操作 - 否则,两个值中较小的一个(在客户端和服务器之间)将定义使用的实数。

确保您的服务器端也在其 wsHttpBinding 配置中包含这些行:

<readerQuotas maxDepth="200" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />

关于WCF 最大读取深度异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512367/

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