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

时间:2015-08-05 14:16:07

标签: c# .net wcf silverlight windows-phone-8

我已经实现了一个库WCF服务,我已经在WCF测试客户端测试了它并且它工作得很好,但是当我试图从托管应用程序调用这些方法时(windows phone 8.0 silverlight),所有的方法是(无效),他们工作,但他们什么也没有回来!

与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 个答案:

答案 0 :(得分:0)

我解决了我的问题, 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是服务方法的返回语句