2012-06-01 4 views
0

, поэтому я, наконец, закончил кэширование в службе WCF. В любом случае, теперь это мой интерфейсметод экспонирования в wcf-сервисе

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    IEnumerable<Screen_Data> GetData(DateTime d); 
} 

и это мой класс, который реализует этот интерфейс

[AspNetCompatibilityRequirements(RequirementsMode = 
         AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class Service1 : IService1 
{ 
    [AspNetCacheProfile("CacheFor2Minutes")] 
    [WebGet(UriTemplate = "?DateTime={DateTime}")] 
    public IEnumerable<Screen_Data> GetData(DateTime d) 
    { 
     ScreenScrapingEntities1 db = new ScreenScrapingEntities1(); 
     IEnumerable<Screen_Data> sd = from p in db.Screen_Data 
            where p.DateTime > d 
            select p; 
     return sd; 
    } 
} 

Это screen_data является таблица базы данных, и я произвел ADO.NET Entity Model данных из базы данных ,

Вопрос в том, когда я пытаюсь вызвать этот метод у клиента WCF, передающего значение datetime, он должен вернуть более 10 строк. Я не уверен, как я могу вернуть эти строки из этого метода, может ли кто-нибудь помочь мне с этим кодом, который я написал в классе, он даже не принимает лямбда-выражения в запросе linq.

И это, как я называю этот метод GetData от клиента

DateTime t = DateTime.Parse("2012-05-31 11:38:29.070"); 
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); 
client.GetData(t); 

этот класс генерируется при создании модели

[EdmEntityTypeAttribute(NamespaceName="ScreenScrapingModel", Name="Screen_Data")] 
    [Serializable()] 
    [DataContractAttribute(IsReference=true)] 
    public partial class Screen_Data : EntityObject 
    { 
} 
+0

Я советую написать собственный класс screen_data с атрибутами [data member]. или я не знаю, но в поколениях ado должно быть сериализуемое свойство – levi

+0

хорошо этот экранный класс данных, в котором я создаю модель из базы данных, она автоматически попадает под datacontract, позвольте мне отредактировать вопрос и показать, что к u –

+0

что является вашим вопрос? вам нужно помочь для чего? вы получаете какое-либо исключение? или вызов службы не возвращают ничего? – Damith

ответ

3

использовать свой собственный DTO

[DataContract] 
public class ScreenDto 
{ 
    [DataMember] 
    public int Id { get; set; } 
    [DataMember] 
    public string Name { get; set; } 
    [DataMember] 
    public DateTime DateAdded { get; set; } 
} 

попробуйте вернуть массив

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    ScreenDto[] GetData(DateTime d); 
} 

Изменить реализация метода

public ScreenDto[] GetData(DateTime d) 
    { 
     ScreenScrapingEntities1 db = new ScreenScrapingEntities1(); 
     ScreenDto[] sd = (from p in db.Screen_Data 
          where p.DateTime > d 
          select new ScreenDto() 
          {Id = p.Id, Name = p.Name, DateAdded =p.Date) 
          .ToArray(); 
     return sd; // put break point here, to check return data 
    } 

вызов как

ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); 
var results = client.GetData(t); 

Начало как веб-сервис и клиентское приложение, веб-служба должна быть в режиме отладки, проверки вы получите позвонить от клиента или не, а также результат, который он возвращает со стороны обслуживания.

+0

да, он дает мне результаты в сервисе, но ничего не было на стороне клиента. Мне сказали, что мой класс screen_data не сериализуется, как я могу сделать сериализацию, он автоматически сгенерирован когда я добавил, что модель –

+0

это один подход, но то, что я пытаюсь сделать сейчас, а не моделирование классов для меня, я создаю свои собственные классы ... это будет работать, спасибо человеку –

+0

, поэтому результаты приходят на службу, но когда я проверяю, что в клиенте эта переменная результата содержит sth else, а не результаты, которые были отправлены из службы, что-то вроде этого {ClientWCF.ServiceReference1.Alert [0]} –

Смежные вопросы