Я думаю, что лучшим вариантом является использование 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}¶m2={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.