从客户端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);

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

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

当我使用svc_GetUserDetailsByEmailCompleted方法时,它就起作用了。但是我想要直接在dtbUserDetails中返回数据。我怎样才能做到这一点?我的WCF服务或客户端是否有任何更改?或者在WCF方法声明中?

从客户端c#调用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),并用数据契约标记它,就像标记你自己的对象一样。

底线是,任何没有标记的东西都不会越过电线。