如何使用 WCF 调用从客户端 windows phone 8.0 silverlight 返回对象的方法

Posted

技术标签:

【中文标题】如何使用 WCF 调用从客户端 windows phone 8.0 silverlight 返回对象的方法【英文标题】:How can I call a method that returns an object from a client windows phone 8.0 silverlight using WCF 【发布时间】:2015-10-28 09:10:03 【问题描述】:

我已经实现了一个库 WCF 服务,我已经在 WCF 测试客户端中对其进行了测试,它运行良好,但是当我尝试从托管应用程序(windows phone 8.0 silverlight)调用方法时,所有方法were(void),它们可以工作,但它们什么也没返回!

与 Windows Phone 不同,我成功地在 Winforms 中托管相同的 wcf 库服务,其中方法可以返回对象。 我是WCF的初学者,我尝试了几种解决方案都没有成功!

我有 3 个类:DAO.cs、Article.cs、Client.cs

还有一个 WCF 服务:IMetier.cs 和 Metier.cs

和实体框架模型

客户端类:

[DataContract]
public class Client

    [DataMember]
    public string NoClient  get; set; 
    [DataMember]
    public string BusinessUnit  get; set; 
    [DataMember]
    public string TypeClient  get; set; 
    [DataMember]
    public string Nom  get; set; 
    [DataMember]
    public string Adresse  get; set; 
    [DataMember]
    public string Ville  get; set; 
    [DataMember]
    public string ccp  get; set; 
    [DataMember]
    public string RegionClient  get; set; 
    [DataMember]
    public Nullable<bool> Depositaire  get; set; 
    [DataMember]
    public Nullable<bool> CentreRegional  get; set; 
    [DataMember]
    public string CodeMagazin  get; set; 
    [DataMember]
    public Nullable<bool> ClientComptant  get; set; 

这里是界面:IMetier.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace MyNameSpace

    [ServiceContract]
    public interface IMetier
    
        [OperationContract]
        void addClient(Client client);

        [OperationContract]
        List<Client> GetClients();
    

这是 Metier.cs 类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace MyNameSpace

    public class Metier : IMetier
    
        DAO dao = new DAO();

        void addClient(Client client)
        
            dao.addClient(client);
        

        public List<Client> GetClients()
        
            return dao.GetClients();
        
    

【问题讨论】:

【参考方案1】:

我解决了我的问题, WCF 使用线程的异步方法,我应该同步使用这些方法。 第二种方法是实现事件 GetClienteEventArgs 并从事件属性中检索我的结果。 在客户端应用程序构造函数中,我们必须处理事件

        ServiceMetier.MetierClient metier = new ServiceMetier.MetierClient();
        metier.GetClientsAsync();
        metier.GetClientsCompleted += new EventHandler<ServiceMetier.ListerClientsCompletedEventArgs>(ListerClients_Completed);

然后实现它

    void GetClients_Completed(object sender, ListerClientsCompletedEventArgs e)
    
        List<ServiceMetier.Client> clients =e.Result;
    

注意e.Result是服务方法的返回语句

【讨论】:

以上是关于如何使用 WCF 调用从客户端 windows phone 8.0 silverlight 返回对象的方法的主要内容,如果未能解决你的问题,请参考以下文章

从 .Net 2.0 客户端调用 WCF 服务时如何配置安全性

从同一解决方案中引用 Wcf Tcp 服务

如何从 POSTMAN 调用 WCF 服务方法

WCF 客户端缓存 Windows 身份验证

在 Mono Mac 上调用 WCF 客户端通道上的 Close() 超时,但在 Windows 上有效

如何从 android 客户端调用 REST WCF 服务