gpt4 book ai didi

c# - 如何从 WCF C# 返回 DTO 对象?

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:26 27 4
gpt4 key购买 nike

我有一个 wcf 服务,我想返回一个 dto 对象,然后我想使用 WSDL 引用服务从其他应用程序 web ASP.net 使用服务,但不能在 dto 客户端应用程序中从 wcf 工作 dto。

并显示这个错误:

Cannot implicitly convert type 'ClientApp.ClientWs.Client' to 'CoreApp.DTO.Client

并且两个应用程序中的 dto“Client”是相同的

数据传输

public class Client
{

public string status { get; set; }
public string message { get; set; }
public List<Sales> listSales { get; set; }

public Client()
{
listSales = new List<Sales>();
}
}

WCF 服务:

 public Client getClientByID(string id)
{
List<Sales> list = null;
Client clientResponse = null;

try
{
list = new List<Sales>();
list = bll.getInstance.listSales(id);
clientResponse = new Client();
clientResponse.status = "ok";
clientResponse.message = "success";
foreach (var item in list)
{
clientResponse.listSales.Add(item);
}


}
catch (Exception ex)
{
clientResponse = new Client();
clientResponse.status = "error";
clientResponse.message = ex.Message;
}

return clientResponse;
}

方法应用客户端:

 public static List<Sales> getByIdWebService(string id)
{


List<Sales> list = null;
ClientWs.ClientWsClient ws = new ClientWs.ClientWsClient;

Client response = new Client();
response = ws.getClientByID(id); //show error

if (response.status == "error")
{
throw new Exception(response.message);
}
else
{
list = new List<Sales>();
list = response.listSales();
}

}

最佳答案

是否必须将 WCF 服务作为 WSDL 网络引用添加到网络应用程序?
如果您将其添加为真正的服务引用,您可以选择重新使用其他程序集的选项,包括您的 DTO。

编辑:可能有一种方法可以对 WSDL 引用做同样的事情,但它可能不是那么简单...至少,这是我不知道它的借口:)

首先,您可能希望使用 [DataContract][DataMember] 装饰器将 DTO 类和成员标记为可序列化:

namespace DtoClassLib
{
[DataContract]
public class Sales
{
[DataMember]
public string Name { get; set; }
}

[DataContract]
public class Client
{
[DataMember]
public string status { get; set; }

[DataMember]
public string message { get; set; }

[DataMember]
public List<Sales> listSales { get; set; }

public Client()
{
listSales = new List<Sales>();
}
}
}

添加对WCF服务的引用时,选择“添加服务引用”选项,高级设置,勾选“Reuse types in referenced assemblies”复选框,具体添加WCF服务和web都使用的DTO程序集应用:

WCF Reuse Assemblies

注意在 using 或 try-finally block 中正确包装您的服务代理:

public static List<Sales> getByIdWebService( string id )
{
List<Sales> list = null;

using ( WcfSvcRefAsWsdl.ClientWsClient wsdlClient = new WcfSvcRefAsWsdl.ClientWsClient() )
{
// The following will not compile
// DtoClassLib.Client returnClient = wsdlClient.getClientByID( id );
}

using ( WcfSvcRef.ClientWsClient wcfClient = new WcfSvcRef.ClientWsClient() )
{
// Joy! \o/
DtoClassLib.Client client = wcfClient.getClientByID( id );
list = client.listSales;
}

return list;
}

关于c# - 如何从 WCF C# 返回 DTO 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45496782/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com