Добавление методов REST в службы данных WCF? - PullRequest
2 голосов
/ 07 августа 2010

Мне нужно расширить мою службу данных WCF, чтобы включить дополнительные методы, а не только таблицы базы данных.

Но, похоже, она работает неправильно.

Во-первых, я хочуспросите, законно ли это?или нахмурился?

Причина, по которой мне нужно это сделать, заключается в том, что мне нужно добавить дополнительные методы REST, которые будут вызывать службы членства ASP.NET (таблицы находятся в БД) для проверки имени входа, т.е.

    public bool IsValidLogin(string username, string password)
    {
        return System.Web.Security.Membership.ValidateUser(username, password);
    }

Вот что у меня есть (я упростил IsValidLogin для тестирования).

    [WebGet(UriTemplate = "TestMe")]
    public bool IsValidLogin()
    {
        return true;
    }

    // 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("IsValidLogin", ServiceOperationRights.All);

Теперь, когда я перехожу к

  http://localhost/MyDataAccess/MyService.svc/IsValidLogin

Кажется, это работает, яполучить истинный обратно в виде XML.Но я установил URI, поэтому я подумал, что смогу сделать это

  http://localhost/MyDataAccess/MyService.svc/TestMe

Но это не получается?Я действительно запутался, есть идеи?

Кроме того, чтобы это работало, мне нужно было добавить эту строку, но немного, но запутался здесь

    config.SetServiceOperationAccessRule("IsValidLogin", ServiceOperationRights.All);

Любая помощь действительно ценится

Ответы [ 2 ]

2 голосов
/ 11 августа 2010

Не комментируя рассуждения о REST выше, просто разместив ссылку на документацию о том, как сделать так называемые «сервисные операции»: http://msdn.microsoft.com/en-us/library/cc668788.aspx

1 голос
/ 08 августа 2010

Понятие ServiceOperation представляет собой привязанную возможность обеспечить именно то, что вам нужно, если вы хотите сделать что-то кроме чтения данных из таблицы.

К сожалению, путь по умолчанию в WCF REST привел вас к неправильному пониманию того, как системы RESTful должны работать. REST - это не просто предоставление некоторых данных по URL.

У вас действительно есть два варианта: либо придерживаться стиля распределенных вычислений RPC, который предоставляет WCF на основе WS - * / SOAP, либо потратить некоторое время на изучение сути REST. Есть несколько ссылок здесь , чтобы вы начали.

Я не могу сказать вам, каков правильный подход к вашему сценарию. Что я могу вам сказать, так это то, что вы не собираетесь учиться делать REST из текущей реализации REST WCF. Я не говорю, что это невозможно сделать, вы просто будете много плавать вверх по течению.

...