我正在致力于将旧的 WebService 从 .NET (.asmx) 迁移到 CoreWCF SOAP 服务。目的是从 .NET Framework 4.0 迁移到 .NET 6/8,而不影响任何上游依赖项。
大多数情况下,迁移都是成功的,但有一个用例失败了。旧的 WebService 有一个接受字符串数组作为输入的 API。但是,当我在 CoreWCF 中实现相同的参数时,传入的数组始终接收为空。
我注意到的主要区别在于导出的 WSDL。 CoreWCF 服务将数组元素的命名空间指定为“http://schemas.microsoft.com/2003/10/Serialization/Arrays”,而旧版 WebService 没有该数组元素的任何特定命名空间。
我的主要怀疑是,由于我添加的消息检查器,CoreWCF 无法反序列化数组,我看到这些检查器在将值传递给操作之前检索它们。我还尝试在将请求发送到操作之前修改请求,但这种方法既不优雅也不有效。
我非常感谢有关解决此问题的任何指导。
您可以创建如下所示的自定义类(根据您的需要更改命名空间)
[CollectionDataContract(Name = "ArrayOfString", Namespace = "http://example.com/Report", ItemName = "string")]
[Serializable]
public class ArrayOfString : List<string>
{
}