2013-08-23 136 views
0

我创建了一个WCF服务应用程序。在Service1.svc中有几种方法。从客户端调用WCF方法c#

这里是我的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_ResultDemoModel.edmx创建Complex type。它包含一些标量属性

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

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

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

无法隐式转换类型“无效”到“Demo.DemoServiceReference_Client.GetUserDetailsByEmail_Result”

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

+1

我不会使用实体框架对象作为返回对象,而是创建简单的POCO来充当数据传输对象。 – Oscar

+0

感谢您的回复。但我不了解POCO。你能给我任何链接或教程吗? –

+0

普通旧C-Sharp对象: http://en.wikipedia.org/wiki/Plain_Old_CLR_Object – Oscar

回答

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),并用数据契约标记它,就像标记自己的对象一样。

任何未标记的底线不会通过电线。