ASP.NET 4 WCF RESTful Сервис - PullRequest
       8

ASP.NET 4 WCF RESTful Сервис

2 голосов
/ 12 октября 2010

Мне было интересно о возможности двух вещей:

  1. Можно ли использовать Службу данных WCF для раскрытия "коллекций", которые не существуют в модели сущностей (EDMX), в которую она отображается? Это был бы случай, когда перехватчики имели бы смысл?

  2. Как можно было бы создать службу WCF RESTful без без необходимости установки стартового комплекта WCF Rest или использования библиотек "in the box" в проекте ASP.NET 4? Я спрашиваю, потому что вся наша работа продвигается к производственному серверу, где у нас не будет такой роскоши, как установка стартового комплекта или дополнительного программного обеспечения без проблем big .

1 Ответ

2 голосов
/ 22 октября 2010

Ответ на оба вопроса невероятно прост. Для данной службы данных WCF создайте метод, возвращающий ваш IEnumerable , и используйте атрибут [WebGet], чтобы открыть его из службы.

Вот шаг за шагом:

  1. Предположим, что у кого-то есть модель данных сущностей или модель Linq To Sql, предоставляющая текстовый текст с именем MyDBDataContext.

  2. Код для вашей службы данных WCF будет выглядеть следующим образом:

    public class MyWCFDataService : DataService< MyDBDataContext >
    {
    
    
    <pre><code>// 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 int PersonID {get; задавать; } публичная строка FirstName {get; задавать; } открытая строка LastName {get; задавать; } }

  4. Просто добавьте метод к вашему классу службы данных WCF, который возвращает ваш тип, и украсьте его с помощью [WebGet]:

открытый класс CustomerDataServ: DataService {

[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;
}

}

...