Crad's .NET Blog

L'UGIblog di Marco De Sanctis
posts - 190, comments - 457, trackbacks - 70

XML-RPC e .NET

La scorsa domenica ho dedicato un paio d'ore di tempo alla realizzazione di un piccolo tool per la gestione delle categorie sul blog, di cui parlerò più approfonditamente tra un paio di giorni (appena riesco ad ultimarlo).

Come sa chiunque utilizzi abitualmente Windows Live Writer, SubText, il vecchio .Text e altri blog engine espongono una serie di servizi remoti chiamati MetaWeblog API (qui un piccolo white paper), raggiungibili all'URL

http://[blogurl]/services/metablogapi.aspx

Il protocollo utilizzato è XML-RPC (qui maggiori informazioni) ed è basato su uno standard di comunicazione estremamente più semplice dei Web Service tradizionali. Non trattandosi di SOAP, però, essi non sono direttamente utilizzabili all'interno di un'applicazione .NET tramite l'introduzione di una Web Reference.

Come fare dunque? Beh, Windows Live Writer ha un suo provider interno di interfacciamento; io, per evitare di riscrivere tutto, ho usato XML-RPC.Net, che è gratuito e funziona benone.

Per utilizzarlo è sufficiente creare un'interfaccia con i metodi desiderati, che devono essere poi mappati sulle corrispondenti procedure esposte dal servizio tramite un custom attribute:

1 public interface IMyService : IXmlRpcProxy 2 { 3 [XmlRpcMethod("nomeDelMetodoRemoto")] 4 string RemoteMethodThatReturnsAString(int parametro1, MyType parametro2); 5 }

Nel caso in cui i tipi coinvolti (siano essi parametri o valori di ritorno) siano tipi complessi, come MyType nello snippet precedente, è sufficiente definire opportune struct, avendo cura di esporne i relativi membri come field pubblici:

1 public struct MyType 2 { 3 public int booleanField; 4 public string stringField; 5 public OtherType complexField; 6 }

A questo punto, per invocare il servizio è sufficiente costruire un proxy ed eseguirne i metodi:

1 IMyService proxy = XmlRpcProxyGen.Create<IMyService>(); 2 proxy.Url = "http://urldelserivizio"; 3 string res = proxy.RemoteMethodThatReturnsAString(...parametri...);

La generazione dinamica del proxy avviene tramite Reflection.Emit, ed è quindi piuttosto veloce. A questo link trovate un esempio di utilizzo di XML-RPC.Net proprio per invocare le MetaWeblog API.

Sciaooo :-)

Technorati tags:

Print | posted on martedì 11 settembre 2007 18:36 | Filed Under [ .Net 2.0 ]

Powered by:
Powered By Subtext Powered By ASP.NET