2013-08-23 1 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_Result будет Complex type создан в DemoModel.edmx. Он содержит некоторые Скалярное имущество.

В основном, что я пытаюсь сделать, я хочу назвать этот метод от Клиент (C#). Вот мой стороне клиента код

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

Здесь SVC является объектом Service1Client. Здесь я просто вызываю метод 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) и пометьте все это контрактом на данные так же, как вы бы отметили свой собственный объект.

Нижняя строка ничего не помечена не проходит по проводу.