我有以下问题,我有一个 Visual Studio 17.9.6 .Net MAUI net 8.0,我有一个 .asmx Web 服务,当通过 HttpsTransportBindingElement 部分的 GetBinding 中的 EndpointConfiguration 中的肥皂 1.2 连接时,出现以下错误:
System.ArrayTypeMismatchException 尝试以与数组不兼容的类型访问元素。
在 GetBindingForEndpoint 中:
if ((endpointConfiguration == EndpointConfiguration.srvNumbSoap12))
{
System.ServiceModel.Channels.CustomBinding result = new System.ServiceModel.Channels.CustomBinding();
System.ServiceModel.Channels.TextMessageEncodingBindingElement textBindingElement = new System.ServiceModel.Channels.TextMessageEncodingBindingElement();
textBindingElement.MessageVersion = System.ServiceModel.Channels.MessageVersion.CreateVersion(System.ServiceModel.EnvelopeVersion.Soap12, System.ServiceModel.Channels.AddressingVersion.None);
result.Elements.Add(textBindingElement);
System.ServiceModel.Channels.HttpsTransportBindingElement httpsBindingElement = new System.ServiceModel.Channels.HttpsTransportBindingElement();
httpsBindingElement.AllowCookies = true;
httpsBindingElement.MaxBufferSize = int.MaxValue;
httpsBindingElement.MaxReceivedMessageSize = int.MaxValue;
-->result.Elements.Add(httpsBindingElement);
return result;
}
连接服务时,我将其设置为 System.Array 集合类型,Dictionary 集合类型:System.Collections.Generic.Dictionary,在下一页上,我通过生成同步操作将其公开
如果我在旧版本中尝试,例如17.8.6,你可以毫无问题地完成。
跟版本改动有什么关系吗?
您在 Visual Studio 17.9.6 (.NET MAUI 8.0) 中遇到的问题
ArrayTypeMismatchException
与 CustomBinding
的实现中的更改有关。元素的管理比旧版本(例如17.8.6
)更多。
确保您在修改 Elements 集合 To 时指定的元素类型是正确的。在集合中,确保 httpsBindingElement 是预期类型的字符串。如果需要,将其强制转换为正确的类型可能会很有用。
CustomBinding
不是直接使用其用途所需的元素来扩展类,而是为扩展而设计。在您看来,记住使用 System.Drawing 中的特定元素绑定目录是个好主意。服务模型命名空间。例如,对于 textBindingElement,您可能会发现使用 TextMessageEncodingBindingElementCollection
比较合适,而对于 httpsBindingElement,使用 HttpsTransportBindingElementCollection
则非常合适。显然,如果添加新元素,这些集合可以保证类型安全。
其他提示:
查看 .NET 8.0 中提供的
CustomBinding
和不同绑定元素的文档和规范,以确保正确使用和类型兼容性:https://learn.microsoft.com/en-us/dotnet/framework/configure -应用程序/文件架构/wcf/绑定
考虑在迁移到 .NET 8.0 的过程中验证 CustomBinding 的重大更改或已知问题。