<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Clemens Vasters, Bldg 42 : XML-RPC</title><link>http://blogs.msdn.com/clemensv/archive/tags/XML-RPC/default.aspx</link><description>Tags: XML-RPC</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>XML-RPC with WCF (Updated)</title><link>http://blogs.msdn.com/clemensv/archive/2009/04/03/xml-rpc-with-wcf-updated.aspx</link><pubDate>Fri, 03 Apr 2009 11:09:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9530796</guid><dc:creator>clemensv</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/9530796.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=9530796</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=9530796</wfw:comment><description>&lt;P&gt;&lt;/P&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id=scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:f13e6b20-a745-4e1c-be87-d241bbf94d4b class=wlWriterEditableSmartContent&gt;
&lt;P&gt;XML-RPC for WCF &lt;A href="http://vasters.com/clemensv/content/binary/WindowsLiveWriter/XMLRPCwithWCFUpdated_8EB8/XmlRpcForWCF.zip" target=_blank&gt;Download here&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;I had updated my WCF XML-RPC stack for PDC’08 but never got around to post it (either too busy or too lazy when not busy). The updated source code is attached to this post. &lt;/P&gt;
&lt;P&gt;Contrary to the code that I’ve posted a while back, the new &lt;SPAN class=searchword&gt;XML-RPC&lt;/SPAN&gt; implementation is no longer a binding with a special encoder, but is implemented entirely as a set of behaviors and extensions for the WCF Service Model. The behavior will work with WCF 3.5 as it ships in the framework and also with the .NET Service Bus March 2009 CTP.&lt;/P&gt;
&lt;P&gt;The resulting Service Model programming experience is completely "normal". That means you can also expose the XML-RPC contracts as SOAP endpoints with all the advanced WCF bindings and features if you like. The behaviors support client and service side. I stripped the config support from this version – I’ll add that back once I get around to it. Here's a snippet from the MetaWeblog contract:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  1: [ServiceContract(Namespace = http:&lt;SPAN style="COLOR: #008000"&gt;//www.xmlrpc.com/metaWeblogApi)]&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  2: &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;interface&lt;/SPAN&gt; IMetaWeblog : IBlogger
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  3: {
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  4:    [OperationContract(Action="&lt;SPAN style="COLOR: #8b0000"&gt;metaWeblog.editPost&lt;/SPAN&gt;")]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  5:    &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; metaweblog_editPost(&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; postid,
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  6:                              &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; username,
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  7:                              &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; password,
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  8:                              Post post,
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  9:                              &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; publish);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 10: 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 11:    [OperationContract(Action="&lt;SPAN style="COLOR: #8b0000"&gt;metaWeblog.getCategories&lt;/SPAN&gt;")]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 12:    CategoryInfo[] metaweblog_getCategories( &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; blogid,
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 13:                                             &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; username,
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 14:                                             &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; password);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 15:     ...
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 16: 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 17: }&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;Setting up the endpoint is very easy. Pick the WebHttpBinding (or the WebHttpRelayBinding for .NET Service Bus), create an endpoint, add the XmlRpcEndpointBehavior to the endpoint and you’re good to go.&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  1: Uri baseAddress = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; UriBuilder(Uri.UriSchemeHttp, Environment.MachineName, -1, "&lt;SPAN style="COLOR: #8b0000"&gt;/blogdemo/&lt;/SPAN&gt;").Uri;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  2: 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  3: ServiceHost serviceHost = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; ServiceHost(&lt;SPAN style="COLOR: #0000ff"&gt;typeof&lt;/SPAN&gt;(BloggerAPI));
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  4: var epXmlRpc = serviceHost.AddServiceEndpoint(
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  5:                   &lt;SPAN style="COLOR: #0000ff"&gt;typeof&lt;/SPAN&gt;(IBloggerAPI), 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  6:                   &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; WebHttpBinding(WebHttpSecurityMode.None), 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  7:                   &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; Uri(baseAddress, "&lt;SPAN style="COLOR: #8b0000"&gt;./blogger&lt;/SPAN&gt;"));
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  8: epXmlRpc.Behaviors.Add(&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; XmlRpcEndpointBehavior());&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class=searchword&gt;The client is just as simple:&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  1: Uri blogAddress = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; UriBuilder(Uri.UriSchemeHttp, Environment.MachineName, -1, "&lt;SPAN style="COLOR: #8b0000"&gt;/blogdemo/blogger&lt;/SPAN&gt;").Uri;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  2:             
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  3: ChannelFactory&amp;lt;IBloggerAPI&amp;gt; bloggerAPIFactory = 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  4:      &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; ChannelFactory&amp;lt;IBloggerAPI&amp;gt;(
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  5:              &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; WebHttpBinding(WebHttpSecurityMode.None), 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  6:              &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; EndpointAddress(blogAddress));
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  7: bloggerAPIFactory.Endpoint.Behaviors.Add(&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; XmlRpcEndpointBehavior());
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  8: 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  9: IBloggerAPI bloggerAPI = bloggerAPIFactory.CreateChannel();
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 10: &lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;For your convenience I've included complete Blogger, MetaWeblog, and MovableType API contracts along with the respective data types in the test applications. The test app is a small in-memory blog that you can use with the blogging function of Word 2007 or Windows Live Writer or some other blogging client for testing. &lt;/P&gt;
&lt;P&gt;Of the other interesting XML-RPC APIs, the &lt;A href="http://www.hixie.ch/specs/pingback/pingback"&gt;Pingback API&lt;/A&gt; has the following contract:&lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  1:  [ServiceContract(Namespace="&lt;SPAN style="COLOR: #8b0000"&gt;http://www.hixie.ch/specs/pingback/pingback&lt;/SPAN&gt;")]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  2:  &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;interface&lt;/SPAN&gt; IPingback
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  3:  {
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  4:      [OperationContract(Action="&lt;SPAN style="COLOR: #8b0000"&gt;pingback.ping&lt;/SPAN&gt;")]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  5:      &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; ping(&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; sourceUri, &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; targetUri);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  6:  }&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;and the &lt;A href="http://www.xmlrpc.com/weblogsCom"&gt;WeblogUpdates API&lt;/A&gt; looks like this:&lt;/P&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: consolas; FONT-SIZE: 8pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: en-us; mso-fareast-language: en-us; mso-bidi-language: ar-sa; mso-no-proof: yes"&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  1:     [DataContract]&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  2:     &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;struct&lt;/SPAN&gt; WeblogUpdatesReply
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  3:     {
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  4:         [DataMember]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  5:         &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;bool&lt;/SPAN&gt; flerror;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  6:         [DataMember]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  7:         &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; message;
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  8:     }
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;  9: 
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 10:     [ServiceContract]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 11:     &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;interface&lt;/SPAN&gt; IWeblogUpdates
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 12:     {
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 13:         [OperationContract(Action = "&lt;SPAN style="COLOR: #8b0000"&gt;weblogUpdates.extendedPing&lt;/SPAN&gt;")]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 14:         WeblogUpdatesReply ExtendedPing(&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; weblogName, &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; weblogUrl, &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; checkUrl, &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; rssUrl);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 15:         [OperationContract(Action="&lt;SPAN style="COLOR: #8b0000"&gt;weblogUpdates.ping&lt;/SPAN&gt;")]
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 16:         WeblogUpdatesReply Ping(&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; weblogName, &lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt; weblogUrl);
&lt;/PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #fbfbfb; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt; 17:     }&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;/SPAN&gt;The code is subject to the Microsoft samples license, which means that you can freely put it into your (blogging) apps as long as you keep the house out of trouble.&lt;/P&gt;&lt;img width="0" height="0" src="http://vasters.com/clemensv/cptrk.ashx?id=679ca50b-c907-4831-81c4-369ef7b85839"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9530796" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/clemensv/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/clemensv/archive/tags/XML-RPC/default.aspx">XML-RPC</category></item></channel></rss>