.NET Core 2.2:如何将 WSDL 用于 WCF 参考

Posted

技术标签:

【中文标题】.NET Core 2.2:如何将 WSDL 用于 WCF 参考【英文标题】:.NET Core 2.2 : How to use WSDL for WCF reference 【发布时间】:2019-07-16 00:31:20 【问题描述】:

我有一个旧的(似乎)ASMX 服务,需要将它用于 .NET Core 2.2。 首先,当我尝试将其添加为 WCF 服务时,我尝试使用时遇到错误:

InvalidOperationException: The top XML element 'data' from namespace '' references distinct types ServiceReference1.WSIssueNewPayrollCardData and ServiceReference1.WSIssueNewPersonalizedPayrollCardData. Use XML attributes to specify another XML name or namespace for the element or types.
System.Xml.Serialization.XmlReflectionImporter.ReconcileAccessor(Accessor accessor, NameTable accessors)

InvalidOperationException: There was an error reflecting 'data'.
System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, string ns, bool hasWrapperElement, bool rpc, bool openModel, RecursionLimiter limiter)

好的,转到WSIssueNewPayrollCardData 的定义并为每个已经具有相同名称的公共属性添加命名空间:

[System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "1.0.0.1")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://com.tch.cards.service/types")]
public partial class WSIssueNewPayrollCardData


    private string shipToFirstField;

    private string shipToLastField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0, Namespace = "http://com.tch.cards.service/types/WSIssueNewPayrollCardData")]
    public string shipToFirst
    
        get
        
            return this.shipToFirstField;
        
        set
        
            this.shipToFirstField = value;
        
    

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1, Namespace = "http://com.tch.cards.service/types/WSIssueNewPayrollCardData")]
    public string shipToLast
    
        get
        
            return this.shipToLastField;
        
        set
        
            this.shipToLastField = value;
        
    

    /// <remarks/>


然后启动它。 但我面临另一个问题:

InvalidOperationException:Form 属性可能不是“不合格” 当存在显式命名空间属性时。 System.Xml.Serialization.XmlReflectionImporter.CheckForm(XmlSchemaForm form, bool isQualified)

InvalidOperationException:反映属性时出现错误 'shipToFirst'。 System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(结构映射 映射,StructModel 模型,bool openModel,字符串 typeName, RecursionLimiter 限制器)

InvalidOperationException:反映类型时出现错误 'ServiceReference1.WSIssueNewPayrollCardData'。 System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel 模型,字符串 ns,ImportContext 上下文,字符串数据类型, XmlAttributes a, bool repeats, bool openModel, RecursionLimiter 限制器)

InvalidOperationException:出现反映“数据”的错误。 System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, 字符串 ns, bool hasWrapperElement, bool rpc, bool openModel, RecursionLimiter 限制器)

什么问题,如何正确使用?

【问题讨论】:

从描述来看,客户端和服务端的序列化和反序列化可能存在一些问题,这是类的命名空间引起的。我认为我们应该手动将 xml 命名空间属性添加到服务器端的这些类中。 【参考方案1】:

我还尝试将 SOAP 端点添加到 .NET CORE SOLUTION .. 但它从来没有工作过.. 我在某处读到 .NET CORE 不支持 WCF 背后的特定想法 .NET CORE FRAMEWORK ...

I 've resolved by add an .NET STANDARD external project (as DLL) to my API Project 我已经引用了它...

[ [

我不知道有没有更好的解决方案..我希望如此..

希望对你有帮助!!!

【讨论】:

以上是关于.NET Core 2.2:如何将 WSDL 用于 WCF 参考的主要内容,如果未能解决你的问题,请参考以下文章

如何将 .NET Core 2.2 Web API 迁移到 .NET Core 3.0?

将项目从 2.2 更新到 3.1(缺少程序集)或如何在 .NET Core 中使用 API POST 请求时,PostAsJsonAsync()在 .Net Core 3.1 中不起作用 [重复]

将 IConfigurationRoot 部分的更改保存到 .net Core 2.2 中的 *.json 文件

从.Net core 2.2迁移到.Net Core 3.0

如何解决“当前 .NET SDK 不支持面向 .NET Core 2.2”

如何将 AzureAD 和 AzureADBearer 添加到 asp.net core 2.2 web api