简单的XML-RPC Web服务

时间:2016-02-09 19:05:40

标签: .net xml web-services wcf xml-rpc

我需要实现一个简单的XML-RPC Web服务,以便与Shopatron API(http://developer.shopatron.com/api)一起使用,特别是Ready Order Download部分(http://developer.shopatron.com/ReadyOrderDownload

第三方(Shopatron)会将一些XML包数据转储到URL。我只需要处理它。

我已将Nuget Package xmlrpcnet(https://www.nuget.org/packages/xmlrpcnet)安装到我的网站项目中。

我的问题:我需要将哪种类型的网络服务添加到我的VS项目网站,以简化这项工作?

我想要一个:

  1. Generic Handler(ashx)
  2. 网络服务(asmx)
  3. WCF服务(svc)
  4. 其他?
  5. 奖金问题:我是否可以使用一个好的测试工具" post" XML-RPC示例包到我的本地开发网站?

1 个答案:

答案 0 :(得分:1)

我认为更好的选择是使用WCF作为创建Web服务的推荐(今天)方式。使用WCF基础结构创建服务允许您在IIS,WAS(获取服务),控制台应用程序中托管您的服务,没有太多问题和摩擦。 This项目(提供XmlRpcEndpointBehavior)和tutorial可以提供帮助(已经讨论过here)。

您甚至可以使用WCF支持类/对象轻松解析请求体xml并提供所需的响应xml结构:

代表:

[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 - 它只用于在Web应用程序(IIS)中托管您的服务,asmx - 过时,ashx-http处理程序(严格来说不是WS标准Web服务),而不是来自WCF'世界 - 如果你走的方式,你可能需要XML-RPC.NET is a library