REST и WCF соединение - PullRequest
       16

REST и WCF соединение

4 голосов
/ 17 февраля 2010

Я специально ищу пример, который использует а) WCF & REST. После долгих поисков, хотя у меня есть некоторые, но они находятся за пределами моего понимания.

Может кто-нибудь дать мне очень простой пример, скажем, "Hallow World" или Суммирование двух чисел, которое даст мне четкое представление о том, как написать сервер, а также о том, как использовать его со стороны клиента.

Также, если какая-нибудь хорошая ссылка, которая объясняет этот пример простыми словами, пожалуйста, сообщите мне об этом.

Спасибо

Ответы [ 6 ]

4 голосов
/ 17 февраля 2010

REST в WCF не так уж сложен, как только вы это выясните.

Сначала вы должны определить свой интерфейс.

Вот пример.

[ServiceContract]
public interface IRESTExample
{
    [WebGet(UriTemplate = "interaction/queue?s={site}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
    [OperationContract]
    string QueueInteraction(string site);

    [WebGet(UriTemplate = "interaction/cancel?id={interactionId}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
    [OperationContract]
    string CancelInteraction(string interactionId);

    [WebGet(UriTemplate = "queue/state?s={site}&q={queue}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
    [OperationContract]
    string QueueState(string site, string queue);

}

Вы можете увидеть в WebGet, что вы определяете окончательный URL. Так что это зависит от того, где вы его связываете, но, скажем, вы связываете конечную точку с www.example.com/rest

.

QueueInteraciton будет www.example.com/rest/interaction/queue?s=SomeSite

Где {stie} или {имя_параметра} заменяется именем параметра.

Реализация - это простой класс, я предполагаю, что вы знаете, как реализовать интерфейс. Если вам нужна помощь, просто оставьте комментарий.

Теперь привязываем конечную точку. В конце концов это не так сложно, вы можете сделать все это в конфигурации.

<system.serviceModel>
    <services>
        <service name="Stackoverflow.Example.Service.RestExample" behaviorConfiguration="MyServiceTypeBehaviors">
            <host>
                <baseAddresses>
                    <add baseAddress="http://localhost:2136/RestExample"/>
                </baseAddresses>
            </host>

            <endpoint address="rest" binding="webHttpBinding" behaviorConfiguration="xmlBehavior" contract="Stackoverflow.Example.Service.IRESTExample" />

        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="MyServiceTypeBehaviors" >
                <!-- Add the following element to your service behavior configuration. -->
                <serviceMetadata httpGetEnabled="true" />
            </behavior>
        </serviceBehaviors>

        <endpointBehaviors>
            <behavior name="jsonBehavior">
                <webHttp/>
            </behavior>
            <behavior name="xmlBehavior">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <bindings>
        <basicHttpBinding>
            <binding name = "NoSecurity">
                <security mode = "None" />
            </binding>
        </basicHttpBinding>
    </bindings>
</system.serviceModel>

Теперь код для запуска сервиса и его привязки. Вы можете сделать это во всем, например, в консольном приложении.

RestExample exampleService = new RestExample();

host = new ServiceHost(exampleService);

host.Open();

Этого должно быть достаточно, чтобы начать.

2 голосов
/ 02 декабря 2010

Ответ Дэвида Басараба верный, но есть намного более простой способ сделать это без всякого ручного подключения. Особенно, если вы привыкли к классическим веб-сервисам ASMX и не имеете большого опыта работы с WCF, следующий метод очень прост.

  1. В веб-проекте Visual Studio 2010 добавьте ссылку на System.ServiceModel.Web.
  2. Выберите «добавить новый элемент» в свой проект. Шаблон, который вам нужен, находится в «Web» и называется «Служба WCF с поддержкой AJAX». Не выбирайте ванильный "WCF Сервис"! Если вам это нужно, вы должны выполнить всю проводку web.config, которую описал Дэвид Басараб, и это будет больно. «Служба WCF с поддержкой AJAX» выполнит всю эту настройку за вас. Назовите свой сервис как хотите.
  3. Откройте файл .svc. В атрибуте [ServiceContract] вашего класса заполните строковый параметр Namespace чем хотите.
  4. Вы получите пример метода DoWork () и кучу комментариев, говорящих вам, что делать в файле. Хитрость в получении RESTful API заключается в добавлении атрибутов [WebGet()] к вашим веб-методам. Добавьте один в DoWork () и убедитесь, что все функции для вас.

Итак, чтобы вызвать метод DoWork (), вы должны нажать это в своем браузере: http://localhost/MyAjaxEnabledService.svc/DoWork

Давайте теперь добавим новый метод HelloWorld (), который показывает некоторые параметры и вывод.

VB:

<OperationContract()>
<WebGet(ResponseFormat:=WebMessageFormat.Xml)>
Public Function HelloWorld(ByVal name As String) As String
    WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"
    Return String.Format("Hello, {0}!", If(String.IsNullOrWhiteSpace(name), "world", name))
End Function

C #:

[OperationContract()]
[WebGet(ResponseFormat=WebMessageFormat.Xml)]
public string HelloWorld(String name) {
    WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
    Return String.Format("Hello, {0}!", String.IsNullOrWhiteSpace(name) ? "world" : name);
}

Теперь вы можете посетить:

http://localhost/MyAjaxEnabledService.svc/HelloWorld?name=MattMc3

Существует множество дурацких и запутанных документов о WCF, особенно для тех, кто жаждет простоты старого стиля .ASMX. Надеюсь, это поможет кому-то начать работать с WCF. Вы можете сделать с ней гораздо больше, чем в старом ASMX-стиле, но трудно набраться оборотов и не разочароваться в MS за их плохую помощь при переходе с ASMX. Вы можете прочитать больше о быстрых сервисах RESTful WCF здесь .

2 голосов
/ 17 февраля 2010

msdn article Введение в RESTful Services с WCF с примером кода в msdn code gallery . Также ознакомьтесь с этой статьей codeproject

1 голос
/ 17 февраля 2010

Если вы действительно хотите сделать ReST, тогда используйте веб-фреймворк, который приведет вас по правильному пути.См. OpenRasta .

Нет ничего невозможного в том, чтобы сделать WCF для проведения ReST, просто очень трудно научиться делать отдых с помощью структуры, которая часто будет мешать вам и вести вас в неправильном направлении.

0 голосов
/ 02 сентября 2011

В Microsoft Web Developer вы можете использовать онлайн-шаблон "WCF REST Service". Он настроит для вас проект с правильными файлами web.config и global.asax.

0 голосов
/ 17 февраля 2010

Вы можете создать веб-службу WCF REST, настроив конечную точку для использования webHttpBinding, как показано в этом углубленном руководстве:

http://www.west -wind.com / блог / сообщений / 310747.aspx

Вот еще одна платформа веб-служб с открытым исходным кодом , которая упрощает создание веб-служб XML и JSON REST без дополнительной настройки.

Редактировать: Добавлена ​​ссылка на хорошую статью, излагающую дух ОТДЫХА:

http://tomayko.com/writings/rest-to-my-wife

Ссылка на комментарий в блоге, объясняющий распространенные заблуждения о REST:

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...