0

我创建了一个 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_ResultComplex typeDemoModel.edmx中创建的。它包含一些标量属性

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

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

这里svcService1Client. 这里我只是简单地调用 wcf 方法。它给了我一个错误

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

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

4

1 回答 1

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) 并使用数据协定将其全部标记,就像标记您自己的对象一样。

底线任何未标记的东西都不会越过电线。

于 2013-08-23T19:56:28.987 回答