我创建了一个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方法声明中?
答案 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)并使用数据合约标记所有内容,就像标记自己的对象一样。
未标记的任何底线都没有通过电线。