2016-02-09 2 views
1

мне нужно реализовать простой XML-RPC веб-службы для использования с API Shopatron (http://developer.shopatron.com/api) специально Готов заказ Скачать часть (http://developer.shopatron.com/ReadyOrderDownload)Простой XML-RPC Web Service

Третья сторона (Shopatron) сбросит некоторые данные пакета XML в URL. Мне просто нужно его обработать.

Я установил пакет Nuget xmlrpcnet (https://www.nuget.org/packages/xmlrpcnet) в свой проект веб-сайта.

Мой вопрос: какой тип веб-службы необходимо добавить на сайт проекта VS, чтобы сделать это простым и легким?

ли я хочу:

  1. Generic Handler (ASHX)
  2. Web Service (ASMX)
  3. службы WCF (SVC)
  4. Другое?

Вопрос о бонусе: есть ли хороший инструмент для тестирования, который я могу использовать для отправки «образцов XML-RPC» на мой локальный веб-сайт?

ответ

0

Я думаю, что лучшим вариантом является использование WCF, как рекомендовано (сегодня), способ создания веб-сервисов. Создание сервиса с инфраструктурой WCF позволяет разместить вашу службу в службах IIS, WAS (win service), консоли без особых проблем и трений. This проект (предоставляющий XmlRpcEndpointBehavior) и tutorial может помочь (уже обсуждался here).

Вы даже можете легко разобрать тело запроса XML и обеспечить необходимую структуру ответа XML - с помощью WCF классов поддержки/объектов:

напр:

[OperationContract] 
[WebInvoke(
BodyStyle = WebMessageBodyStyle.Bare, 
Method = "POST", 
RequestFormat = WebMessageFormat.Xml, 
ResponseFormat = WebMessageFormat.Xml,  
UriTemplate = "/somemethod?param1={param1}&param2={param2}")]  
System.ServiceModel.Channels.Message SomeMethod(Stream stream, string param1, string param2) 
{ 
    string xmlString; 

    var inputStream = stream; 
    using (var streamReader = new StreamReader(inputStream)) 
    { 
     xmlString = streamReader.ReadToEnd(); 
    } 

    var sourceXml = new XmlDocument(); 
    sourceXml.LoadXml(xmlString); 
    //... 

    var xml = new XDocument(...); 
    //... 

    var settings = new XmlWriterSettings(); 
    settings.Indent = true; 
    var sb = new StringBuilder(); 
    using (var writer = XmlWriter.Create(sb, settings)) 
    { 
     xml.WriteTo(writer); 
     writer.Flush(); 
    } 

    WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"; 
    return WebOperationContext.Current.CreateTextResponse(sb.ToString()); 
} 

Кстати ASMX, SVC - это только для размещения вашего сервиса в веб-приложении (IIS), asmx - устаревший, ashx-http-обработчик (а не WS-стандартный веб-сервис, строго говоря), а не из мира WCF - если вы пойдете ashx способом, вам, вероятно, понадобится XML-RPC.NET is a library.