2012-06-01 124 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實體數據模型。

我的問題是,當我嘗試從WCF客戶端傳遞一個日期時間值調用此方法時,它應該返回多於10行。我不知道如何從這個方法返回這些行,有人可以幫我用我寫在類中的代碼,它甚至不需要在linq查詢中使用lambda表達式。

這該是多麼我從客戶端

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

類調​​用此方法GetData產生,同時創造模型

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

我建議使用[data member]屬性編寫自己的screen_data類。或者我不知道,但在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); 

同時啓動Web服務和客戶端應用程序,Web服務應該是調試模式,請您從客戶端獲得致電或不,也是從服務方返回的結果。

+0

是的,它給了我服務的結果,但沒有在客戶端..有人告訴我,我的screen_data類不是序列化的,我如何使它們序列化,它是自動生成的當我添加該模型 –

+0

多數民衆贊成在一種方法,但我現在要做的,而不是模型生成類爲我,我創建我自己的類......這將工作,感謝人 –

+0

所以結果即將服務,但是當我檢查在客戶端,這個結果變量包含其他,而不是從服務發送的結果,像這樣{ClientWCF.ServiceReference1.Alert [0]} –