在wcf服务中公开方法

时间:2012-06-01 08:49:52

标签: c# 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实体数据模型。

我的问题是,当我尝试从传递datetime值的WCF客户端调用此方法时,它应该返回超过10行。我不确定如何从这个方法返回这些行,有人可以帮助我使用我在课堂上编写的代码,它甚至不会在linq查询中使用lambda表达式。

这就是我从客户端

调用此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
    {
}

1 个答案:

答案 0 :(得分: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服务应该处于调试模式,检查是否从客户端调用,以及从服务端返回的结果。