如何解决由于Base64编码的字符串太大,因此无法验证XML
我在使用.NET 4.0框架编译的Visual Studio 2017中使用C#创建了SOAP服务。
我在调试时将服务部署到IIS Express,并部署到IIS管理器站点。 在这两种服务上,当我发布带有(大)Base64编码的字符串(PDF文件)且包含810万个字符的XML时,都会遇到以下错误:
System.Web.Services.Protocols.SoapException:
服务器无法处理请求。
对象引用未设置为对象的实例。
在System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement() 在System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest() 在System.Web.Services.Protocols.SoapServerProtocol.Initialize()
在System.Web.Services.Protocols.ServerProtocolFactory.Create(类型类型,HttpContext上下文,HttpRequest请求,HttpResponse响应,布尔值和abortProcessing)
我已经尝试将web.config
文件和applicationhost.config
文件中的“最大允许内容长度”增加到大约3GB。这没有影响,但是我也没想到那里会有任何结果,因为该错误实际上并没有说明它存在内容太大的问题。
当我用另一个较小的Base64字符串发布相同的XML时,它确实从XML中创建了正确的对象,而没有任何问题。
我还检查了多个在线转换器中Base64字符串是否正确。它们的大小也有很多问题,但是我可以确认字符串。
奇怪的是,在调试时它甚至没有进入WebService类。
通过这种方式,代码中的字段是一个字节数组,在XSD中定义为base64Binary。
我不能共享Base64字符串本身,因为在这种情况下它具有敏感信息,而且还因为它的大小。
我该如何解决这个问题?
更新 还尝试设置“为网站和项目使用IIS Express的64位版本”,但这并没有帮助。
解决方法
问题是最大请求长度。 XML的大小比IIS中设置的默认限制长。这导致剪切XML,从而导致XML文件无效/不完整。
可以直接在web.config文件中更改此配置:
<system.web>
<httpRuntime maxRequestLength="2147483647" />
</system.web>
或在IIS管理器中:
- 打开网站
- 打开配置编辑器
- 在该部分中,转到system.web / httpRuntime
- 更改maxRequestLength属性
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。