如何从WCF C#返回数据到对象?

如何从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;} 公共客户机() {

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

并显示此错误:

无法将类型“ClientApp.ClientWs.Client”隐式转换为 'CoreApp.DTO.Client

在这两个应用程序中,dto“客户端”是相同的

DTO

公共类客户端
{
公共字符串状态{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();
}
}

您可以通过更改代理类来解决此问题

  • 当您添加服务引用时,它将自动生成
  • 它具有客户端应用程序中使用的所有类型和方法

您必须将WCF服务作为WSDL web引用添加到web应用程序中吗?
如果将其添加为真正的服务引用,则可以选择重新使用其他程序集(包括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;
}