Простая служба WCF (POX) без сложной сериализации - PullRequest
4 голосов
/ 05 мая 2010

Я полный новичок в WCF.Я пытаюсь создать очень простой веб-сервис IIS 7.0.По независящим от меня причинам это должен быть WCF, а не ASMX.Это сервис-оболочка для уже существующего веб-приложения, которое просто выполняет следующие действия:

1) Получает запрос POST с элементами формы XML, инкапсулированными в теле запроса.Что-то вроде valuevalue.Это нетипизированный XML, а XML является атомарным (форма), а не списком записей / объектов.

2) Добавьте пару тегов в XML-запрос и вызовите другую службу на основе HTTP с помощью простогоPOST + голый XML - это на самом деле будет добавлено некоторыми внутренними операциями SQL, но это не проблема.

3) Получите ответ XML от сторонней службы и передайте его как ответ на оригиналвызов клиента на шаге 1.

Клиентами (шаг 1) будут какие-то веб-сценарии, но это может быть что угодно .aspx, python, php и т. д.

Не могуУ меня есть SOAP, и обычные примеры REST на основе WCF с их контрактами и сериализацией меня смущают.Концептуально это кажется очень распространенной и очень простой проблемой.Это было бы легко реализовать в коде, но WCF, размещенный на IIS, является обязательным требованием.

Какие-нибудь указатели?

Ответы [ 5 ]

4 голосов
/ 05 мая 2010

Создание службы POX обычно так же просто, как добавление нескольких атрибутов и изменение нескольких настроек в вашем web.config.

Сначала добавьте [WebInvoke] к методам POX контракта на обслуживание:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
    MyResult MyOperation(MyClass c);
}

Иногда вам также нужно указать пространство имен XML для ваших контрактов данных:

[DataContract(Namespace = "http://example.com/myclass")]
public class MyClass { ... }

Затем настройте web.config на использование webHttpBinding и поведение webHttp:

<system.serviceModel>
    <services>
        <service behaviorConfiguration="MyApp.MyBehavior" name="MyApp.MyService">
            <endpoint address="" binding="webHttpBinding"
                      contract="MyApp.IMyService" behaviorConfiguration="POX"
                      bindingNamespace="http://example.com/">
                <--! More endpoint configuration here -->
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding"
                      contract="IMetadataExchange"/>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <!-- Behavior config here -->
        </serviceBehaviors>
        <endpointBehaviors>
            <behavior name="POX">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
</system.serviceModel>

Вот и все. Это кажется сложнее, чем есть на самом деле.

Примечание. Если вы на самом деле хотите получить нетипизированный XML вместо сериализованного класса, измените свой метод на получение XElement, например:

[WebInvoke(...)]
MyResult MyOperation(XElement element);
1 голос
/ 08 февраля 2011

Я думаю, что видео, на которое вы ссылаетесь, доступно с здесь

1 голос
/ 05 мая 2010

Я хотел бы взглянуть на стартовый комплект WCF REST @ http://www.asp.net/downloads/starter-kits/wcf-rest/ и руководство по PluralSite @ http://www.pluralsight = HTTP-равнинного-XML-сервисы . Это должно помочь вам начать и указывать в правильном направлении.

0 голосов
/ 29 ноября 2010
0 голосов
/ 05 мая 2010

Бен имеет подходящее видео - к сожалению, это видео "Только для подписчиков" на сайте Pluralsight к настоящему моменту :-( :-(: - (

К счастью, почти все эти вступительные видео также доступны из MSDN WCF REST Developer Center - кроме одного, упомянутого Беном ...

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

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