将 ASMX Web 方法迁移到接受字符串数组的 WCF

问题描述 投票:0回答:1

我有一项旧版 ASMX 服务,可供许多客户端(java、.Net、Python 等)使用。我想将 ASMX 服务升级到 WCF,而不影响我的客户(意味着他们不会对其代码进行任何更改)

以下函数在 ASMX 中运行良好:

[WebService(Namespace = "http://example.com/Report", Description = "Save")]
    public class Report : WebService
    {
      
        [WebMethod(Description = "Save")]

        public void Save(string name, string[] skills)
        {
        }
    }

这意味着当客户端调用 Save 方法并传递名称(字符串)和技能(字符串[])参数时,我会在服务端获取它,并进一步保存在数据库中。

在WCF中我写了下面的接口和类:

[ServiceContract(Namespace = "http://example.com/Report")]
public interface IReport
{
    [OperationContract(Action = "http://example.com/Report/Save")]
    void Save(string name, string[] skills);
}

public class Report : IReport
{
    public void Save(string name, string[] skills)
    {
       
    }
}

当我从同一个旧客户端调用 WCF 服务时,我会获得名称值,但不会获得技能值(即 string[])。

请帮助我如何获取 string[] 值。我无法更改客户端代码。

我希望当我将 ASMX 更改为 WCF 时,它应该可以正常工作而不影响我的客户。我无法获取技能值(这是字符串数组)。

在WCF中,系统似乎无法对字符串数组进行反消毒。我尝试使用 List 而不是 string[] 但也没有成功。

.net wcf serialization deserialization asmx
1个回答
0
投票

试试这个代码:

[ServiceContract(Namespace = "http://example.com/Report")]
public interface IReport
{
    [OperationContract(Action = "http://example.com/Report/Save")]
    void Save(string name, Skills skills);
}
[DataContract]
public class Skills
{
    [DataMember]
    public string[] Skillsarray { get; set; }
}

public class Report : IReport
{
    public void Save(string name, Skills skills)
    {
       
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.