c# - SoapCore 未正确解析 SOAP WSDL 中的数据契约和数据成员
问题描述
将 SoapCore 1.0.0 与 .NET Core 3.1 结合使用来实现较旧的 WCF 服务。我将所有东西都连接起来并生成了一个 WSDL,但是 WSDL 不正确。在这里,我将根据我实际实施的情况来简化案例。
我有一个非常基本的数据模型,并且具有一般形式:
[DataContract]
public class TopLevelInputItem
{
[DataMember]
public string SomePrimitiveValue {get; set;}
[DataMember]
public NextLevelInputItem SomeComplexValue {get; set;}
}
[DataContract]
public class NextLevelInputItem
{
[DataMember]
public string AnotherPrimitiveValue {get; set;}
}
[DataContract]
public class OutputResultItem
{
[DataMember]
public List<string> SomeOutputStrings {get; set;}
}
对其进行操作的是一组服务,当然,这些服务与将事物表示为 Web 服务无关,因此我将跳过该代码。这些服务由一组控制器访问,其要点遵循如下模式:
[ServiceContract]
public interface IHandyWebService
{
[OperationContract]
public Task<List<OutputResultItem>> UpdateSomethingPlease(
List<TopLevelInputItem> ListOfThings);
}
public class HandyWebService : IHandyWebService
{
public async Task<List<OutputResultItem>> UpdateSomethingPlease(
List<TopLevelInputItem> ListOfThings)
{
return await aService.DoAnUpdatesAsync(ListOfThings);
}
}
API 项目中我的 Startup.cs 的相关部分如下所示:
app.UseSoapEndpoint<IHandyWebService>("/HandyWebService", new BasicHttpsBinding(), SoapSerializer.XmlSerializer);
它实际上只是基本的,但当然还有更多。我的 WSDL 没有通过这种设置正确形成,我希望我能准确地解释正在发生的事情。
对于所描述的方法,我会得到类似的东西:
<wsdl:message name="IHandyWebService_UpdateSomethingPlease_OutputMessage">
<wsdl:part name="parameters" element="tns:List`1"/>
</wsdl:message>
即,“List`1”规范,与“ArrayOfStrings”或方法中指定并使用DataMember注释的其他类型相反。
此外,对于我的输入对象,原始值的定义根本没有出现在 WSDL 的任何地方。
数据模型和控制器正是基于 WCF 时为该服务准备的,而且一切都很好。我曾预料到能够直接把它全部带过去,但显然情况并非如此。我错过了什么?
也许这个问题的第二部分:在 .NET Core 中使用 SoapCore 实现这个,真的是最好的攻角吗?有没有不同/更好的方法来做到这一点?
解决方案
推荐阅读
- json - 为什么我无法在 Xamarin.Forms 中解析我的 JSON?
- bash - Shell 脚本错误消息 - 1") 语法错误:预期操作数(错误标记为“
- sql - 用于连接字符串的 Teradata SQL 代码
- mysql - 使用 express.js 和 node.js(服务器端)和 react.js(客户端)发布查询问题
- javascript - Javascript 检查项目在列表中出现的次数,然后将列表添加在一起
- vue.js - Vue 3 - Vue.delete 替代品
- node.js - 如何从外部页面访问客户端 javascript 变量?
- c++ - 如何解决头文件中的循环引用
- python - Visual Studio 编辑器中的行号错误 - Python 源代码 - 从 Visual Studio Windows 版本复制/粘贴源代码后
- android - Android 11 - 前台服务通知不可见