从客户端c#调用WCF方法

时间:2013-08-23 17:32:40

标签: c# wcf windows-phone-8 ado.net-entity-data-model

我创建了一个WCF服务应用程序。 Service1.svc中的方法很少。

这是我的 IService1.cs

[OperationContract]
GetUserDetailsByEmail_Result GetUserDetailsByEmail(string email);

这是我的 Service.svc.cs

public class Service1 : IService1
{
    #region GetUserDetails
    public GetUserDetailsByEmail_Result GetUserDetailsByEmail(string email)
    {
        return (new UserManager()).GetUserDetailsByEmail(email);
    }
    #endregion    
}

此处GetUserDetailsByEmail_Result DemoModel.edmx 中创建Complex type。它包含一些标量属性

基本上我要做的是,我想从客户端(c#)方面调用此方法。这是我的客户端代码

//svc.GetUserDetailsByEmailCompleted += new EventHandler<GetUserDetailsByEmailCompletedEventArgs>(svc_GetUserDetailsByEmailCompleted);
GetUserDetailsByEmail_Result dtbUserDetails = svc.GetUserDetailsByEmailAsync(loginName);

此处 svc Service1Client的对象。在这里我只是调用wcf方法。它给了我一个错误

  

无法将类型'void'隐式转换为'Demo.DemoServiceReference_Client.GetUserDetailsByEmail_Result'

当我使用 svc_GetUserDetailsByEmailCompleted 方法时,它可以正常工作。但我希望直接在dtbUserDetails中返回数据。我怎样才能做到这一点?我的WCF服务或客户端是否有任何变化?还是在WCF方法声明中?

1 个答案:

答案 0 :(得分:0)

您需要创建一个对象并将数据绑定到它,就像建议的评论中的某些人一样,然后标记每个属性:

[DataContract(Namespace = "MyServiceContract.Service1.ComplexObject")]
public class ComplexObject
{
       [DataMember(Order = 1, IsRequired = true)]
            public String DbItem1{ get; private set; }
       [DataMember(Order = 2, IsRequired = false)]
            public ComplexBlobData DbItem2{ get; set; }
}

或者,如果您可以打开DemoModel.edmx(Code Behind)并使用数据合约标记所有内容,就像标记自己的对象一样。

未标记的任何底线都没有通过电线。