如何从WCF C#返回数据到对象?
我有一个wcf服务,我想返回一个dto对象,然后我想使用WSDL引用服务从其他应用web ASP.net使用服务,但不在dto客户端应用中使用wcf的dto 并显示此错误: 无法将类型“ClientApp.ClientWs.Client”隐式转换为 'CoreApp.DTO.Client 在这两个应用程序中,dto“客户端”是相同的 DTO如何从WCF C#返回数据到对象?,c#,asp.net,service,entity,dto,C#,Asp.net,Service,Entity,Dto,我有一个wcf服务,我想返回一个dto对象,然后我想使用WSDL引用服务从其他应用web ASP.net使用服务,但不在dto客户端应用中使用wcf的dto 并显示此错误: 无法将类型“ClientApp.ClientWs.Client”隐式转换为 'CoreApp.DTO.Client 在这两个应用程序中,dto“客户端”是相同的 DTO 公共类客户端 { 公共字符串状态{get;set;} 公共字符串消息{get;set;} 公共列表listSales{get;set;} 公共客户机() {
公共类客户端
{
公共字符串状态{get;set;}
公共字符串消息{get;set;}
公共列表listSales{get;set;}
公共客户机()
{
listSales=新列表();
}
}
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;
}
公共客户端getClientByID(字符串id)
{
List=null;
客户端clientResponse=null;
尝试
{
列表=新列表();
list=bll.getInstance.listSales(id);
clientResponse=newclient();
clientResponse.status=“确定”;
clientResponse.message=“成功”;
foreach(列表中的变量项)
{
clientResponse.listSales.Add(项目);
}
}
捕获(例外情况除外)
{
clientResponse=newclient();
clientResponse.status=“错误”;
clientResponse.message=例如message;
}
返回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();
}
}
公共静态列表getByIdWebService(字符串id)
{
List=null;
ClientWs.ClientWsClient ws=新ClientWs.ClientWsClient;
客户端响应=新客户端();
response=ws.getClientByID(id);//显示错误
如果(response.status==“error”)
{
抛出新异常(response.message);
}
其他的
{
列表=新列表();
list=response.listSales();
}
}
您可以通过更改代理类来解决此问题
- 当您添加服务引用时,它将自动生成
- 它具有客户端应用程序中使用的所有类型和方法
如果将其添加为真正的服务引用,则可以选择重新使用其他程序集(包括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>();
}
}
}
您能在这里显示您的
销售类属性吗。
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>();
}
}
}
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;
}