2013-08-23 172 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),並用數據契約標記它,就像標記自己的對象一樣。

任何未標記的底線不會通過電線。