.NET MAUI 8连接ASMX Soap1.2服务时遇ArrayTypeMismatchException错误
.NET MAUI 8 + VS 17.9.6 连接ASMX服务的ArrayTypeMismatchException问题分析
这个问题确实和Visual Studio/.NET MAUI的版本变更直接相关——在VS 17.8.6及对应.NET MAUI版本中正常的代码,到VS 17.9.6(对应.NET MAUI 8的后续更新)出现ArrayTypeMismatchException,大概率是System.ServiceModel相关组件在.NET MAUI 8的迭代中引入了兼容性问题:CustomBinding的Elements集合对绑定元素的类型校验逻辑发生变化,或者HttpsTransportBindingElement的底层类型实现有调整,导致添加操作时触发数组类型不匹配的错误。
可行的解决方法:
- 替换手动CustomBinding为BasicHttpsBinding改造:
避免手动逐个添加绑定元素,改用官方封装的BasicHttpsBinding,再调整SOAP版本参数,示例代码如下:if (endpointConfiguration == EndpointConfiguration.srvNumbSoap12) { // 初始化基础HTTPS绑定 var basicBinding = new BasicHttpsBinding(BasicHttpsSecurityMode.Transport); basicBinding.AllowCookies = true; basicBinding.MaxBufferSize = int.MaxValue; basicBinding.MaxReceivedMessageSize = int.MaxValue; basicBinding.TextEncoding = System.Text.Encoding.UTF8; // 转换为CustomBinding以修改SOAP版本 var customBinding = new CustomBinding(basicBinding); var textEncodingElement = customBinding.Elements.Find<System.ServiceModel.Channels.TextMessageEncodingBindingElement>(); textEncodingElement.MessageVersion = System.ServiceModel.Channels.MessageVersion.CreateVersion( System.ServiceModel.EnvelopeVersion.Soap12, System.ServiceModel.Channels.AddressingVersion.None ); return customBinding; } - 降级Visual Studio版本:
暂时回退到VS 17.8.6版本,沿用之前的代码逻辑,直到微软推送修复该兼容性问题的补丁。 - 安装最新.NET MAUI补丁:
检查并安装.NET MAUI 8的最新服务更新,部分版本兼容性问题会在后续补丁中被修复。
额外建议:
重新生成ASMX服务引用时,尽量保持默认配置后再手动调整参数,避免因版本变更导致的生成代码隐含类型冲突;优先使用官方提供的绑定类型,减少手动构建CustomBinding的场景,降低版本迭代带来的兼容性风险。
内容的提问来源于stack exchange,提问作者Giorgio
相关产品推荐
相关产品推荐

