2

私は2つの可能性について疑問に思っていました:

  1. WCF データ サービスを使用して、マップ先のエンティティ モデル (EDMX) に存在しない "コレクション" を公開することはできますか? これは、インターセプターが理にかなっているケースでしょうか?

  2. WCF Rest Starter Kit をインストールしたり、ASP.NET 4 プロジェクトで "同梱の" ライブラリを使用したりせずに、WCF RESTful サービスを作成するにはどうすればよいでしょうか? 私たちが行うすべての作業は実稼働サーバーにプッシュされるため、スターター キットや追加のソフトウェアを簡単にインストールする余裕はありませ

4

1 に答える 1

2

両方の質問に対する答えは、息をのむほど簡単です。WCF データ サービスを指定して、IEnumerable<T>を返すメソッドを作成し、[WebGet] 属性を使用してサービスから公開します。

ここにステップバイステップがあります:

  1. MyDBDataContext というデータコンテキストを公開する Entity Data Model または Linq To Sql モデルがあるとします。

  2. WCF データ サービスのコードは次のようになります。

    public class MyWCFDataService : DataService< MyDBDataContext >
    {
    
    
    
    // This method is called only once to initialize service-wide policies.
    public static void InitializeService(DataServiceConfiguration config)
    {
        // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
        // Examples:
        config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
        config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    }
    
    }
  3. モデルにないエンティティがあるとします。この場合、例として「Person」を使用します。

    public class Person { public int PersonID { get; 設定; } パブリック文字列 FirstName { get; 設定; } パブリック文字列 LastName { get; 設定; } }

  4. タイプを返すメソッドを WCF Data Service クラスに追加し、[WebGet] で装飾するだけです。

public class CustomerDataServ : DataService< Data.CustDataClassesDataContext > {

[WebGet]
public IEnumerable<Person> GetEntries() {
    List<Person> entries = new List<Person>();
    for (int i = 0; i < 30; i++) {
        entries.Add(
            new Person() { PersonID = i, FirstName = "First " + i, LastName = "Last " + i }
        );
    }   
    return entries.ToArray();   
}

// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
    // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
    // Examples:
    config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
    config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}

}

于 2010-10-22T15:14:12.500 に答える