从客户端c#调用WCF方法
本文关键字:WCF 方法 调用 客户端 | 更新日期: 2023-09-27 18:28:45
我创建了一个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
。它包含一些标量属性。
基本上,我想做的是,我想从Client(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方法声明中?
您要么需要创建一个对象,并像建议的注释中的一些人一样将数据绑定到它,然后像这样标记每个属性:
[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),并用数据契约标记它,就像标记你自己的对象一样。
底线是,任何没有标记的东西都不会越过电线。