0

これで、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クエリでラムダ式を使用することすらありません。

そして、これは私が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
    {
}
4

1 に答える 1

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サービスはデバッグモードになっている必要があります。クライアントからの呼び出しがあるかどうか、およびサービス側から返される結果を確認してください。

于 2012-06-01T09:15:46.150 に答える