我有一项旧版 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[] 但也没有成功。
试试这个代码:
[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)
{
}
}