<?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 : WCF</title><link>http://blogs.msdn.com/clemensv/archive/tags/WCF/default.aspx</link><description>Tags: WCF</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><item><title>Sin, Sin, Sin: How to do Simple, Webby, and Completely Insecure ASP.NET Membership Authentication and Role Authorization with WCF</title><link>http://blogs.msdn.com/clemensv/archive/2007/08/22/sin-sin-sin-how-to-do-simple-webby-and-completely-insecure-asp-net-membership-authentication-and-role-authorization-with-wcf.aspx</link><pubDate>Wed, 22 Aug 2007 11:20:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4513313</guid><dc:creator>clemensv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/4513313.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=4513313</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=4513313</wfw:comment><description>&lt;P&gt;We're all sinners. Lots of the authentication mechanisms on the Web are not even "best effort", but rather just cleartext transmissions of usernames and passwords that are easily intercepted and not secure at all. We're security sinners by using them and even more so by allowing this.&amp;nbsp;However,&amp;nbsp;the reality is that there's very likely more authentication on the Web done in an insecure fashion and in&amp;nbsp;cleartext than using any other mechanism. So if you are building WCF apps and you decide "that's good enough" what to do?&lt;/P&gt;
&lt;P&gt;WCF is - rightfully - taking a pretty hard stance on these matters.&amp;nbsp;If you try to use any of the&amp;nbsp;more advanced&amp;nbsp;in-message authN and authZ mechnanisms such as the &lt;A href="http://msdn2.microsoft.com/en-us/library/ms731049.aspx"&gt;integration with the ASP.NET membership&lt;/A&gt;/&lt;A href="http://msdn2.microsoft.com/en-us/library/aa702542.aspx"&gt;role provider&lt;/A&gt; models, you'll find yourself in security territory and our security designers took very good care that you are not creating a config that&amp;nbsp;results in the cleartext transmission of credentials.&amp;nbsp;And for that you'll need certificates and you'll also find that it requires full trust (even in 3.5) to use that level of robust on-wire security. &lt;/P&gt;
&lt;P&gt;dasBlog has (we're sinners, too)&amp;nbsp;a stance on authentication that's about as lax as everyone else's stance in blog-land.&amp;nbsp;There are not many&amp;nbsp;MetaWeblog API endpoints running over https (as&amp;nbsp;they rather&amp;nbsp;should) that I've seen.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So what I need for a bare minimum dasBlog install where the user isn't willing to get an https certificate for their site is a very simple, &lt;STRONG&gt;consciously insecure&lt;/STRONG&gt;, bare-bones authentication and authorization mechanism for WCF services that uses the ASP.NET membership/role model (dasBlog will use that model as we switch to the .NET Framework 3.5 later this year). The It also needs to get completely out of the way when the service is configured with any real AuthN/AuthZ mechanism. &lt;/P&gt;
&lt;P&gt;So here's a behavior (some C# 3.0 syntax, but easy to fix) that you can add to channel factories (client) and service endpoints (server) that will do just that. &lt;STRONG&gt;If you care about confidentiality of credentials on the wire don't use it&lt;/STRONG&gt;. For this to work, you need to put&amp;nbsp;the behavior&amp;nbsp;on both ends.&amp;nbsp;The behavior will do nothing (as intended) when the binding isn't the &lt;EM&gt;BasicHttpBinding&lt;/EM&gt; with &lt;EM&gt;BasicHttpSecurityMode.None&lt;/EM&gt;). The header will&amp;nbsp;not show up in WSDL. &lt;/P&gt;
&lt;P&gt;On the client, you simply&amp;nbsp;add the behavior and otherwise set the credentials as you would usually do for UserName authentication. This makes sure that the client code stays compatible when you upgrade the wire protocol to&amp;nbsp;a&amp;nbsp;more secure (yet still username-based)&amp;nbsp;binding via config.&lt;/P&gt;&lt;FONT size=4&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#2b91af&gt;MyClient&lt;/FONT&gt;&amp;nbsp;remoteService = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;MyClient&lt;/FONT&gt;();&lt;BR&gt;remoteService.ChannelFactory.Endpoint.Behaviors.Add(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SimpleAuthenticationBehavior&lt;/FONT&gt;());&lt;BR&gt;remoteService.ClientCredentials.UserName.UserName = &lt;FONT color=#a31515&gt;"admin"&lt;/FONT&gt;;&lt;BR&gt;remoteService.ClientCredentials.UserName.Password = &lt;FONT color=#a31515&gt;"!adminadmin"&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;On the server, you just configure your ASP.NET membership and role database. With that in place, you can even use role-based security attributes&amp;nbsp;or any other authorization mechnanism you are accustomed to in ASP.NET. Just&amp;nbsp;as on the client, the behavior goes out of the way and gives way for the "real thing" once you turn on security.&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;using&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt; System.Runtime.Serialization;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.ServiceModel;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.ServiceModel.Channels;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.ServiceModel.Description;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.ServiceModel.Dispatcher;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.ServiceModel.Security;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.Threading;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.Web.Security;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.Xml.Serialization;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt;&lt;FONT color=#000000&gt; dasBlog.Storage&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DataContract&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(Namespace = &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Names&lt;/SPAN&gt;&lt;FONT color=#000000&gt;.DataContractNamespace)]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;SimpleAuthenticationHeader&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DataMember&lt;/SPAN&gt;&lt;FONT color=#000000&gt;]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;FONT color=#000000&gt; UserName;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DataMember&lt;/SPAN&gt;&lt;FONT color=#000000&gt;]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;FONT color=#000000&gt; Password;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;SimpleAuthenticationBehavior&lt;/SPAN&gt;&lt;FONT color=#000000&gt; : &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;IEndpointBehavior&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#region&lt;/SPAN&gt;&lt;FONT color=#000000&gt; IEndpointBehavior Members&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&lt;FONT color=#000000&gt; AddBindingParameters(&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ServiceEndpoint&lt;/SPAN&gt;&lt;FONT color=#000000&gt; endpoint,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;BindingParameterCollection&lt;/SPAN&gt;&lt;FONT color=#000000&gt; bindingParameters)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&lt;FONT color=#000000&gt; ApplyClientBehavior(&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ServiceEndpoint&lt;/SPAN&gt;&lt;FONT color=#000000&gt; endpoint,&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ClientRuntime&lt;/SPAN&gt;&lt;FONT color=#000000&gt; clientRuntime)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&lt;FONT color=#000000&gt; (endpoint.Binding &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;is&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;BasicHttpBinding&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &amp;amp;&amp;amp;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;((&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;BasicHttpBinding&lt;/SPAN&gt;&lt;FONT color=#000000&gt;)endpoint.Binding).Security.Mode == &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;BasicHttpSecurityMode&lt;/SPAN&gt;&lt;FONT color=#000000&gt;.None )&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt;&lt;FONT color=#000000&gt; credentials = endpoint.Behaviors.Find&amp;lt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ClientCredentials&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&amp;gt;();&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&lt;FONT color=#000000&gt; (credentials != &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &amp;amp;&amp;amp; credentials.UserName != &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &amp;amp;&amp;amp; credentials.UserName.UserName != &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;FONT color=#000000&gt;)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;clientRuntime.MessageInspectors.Add(&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ClientMessageInspector&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(credentials.UserName));&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&lt;FONT color=#000000&gt; ApplyDispatchBehavior(&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ServiceEndpoint&lt;/SPAN&gt;&lt;FONT color=#000000&gt; endpoint, System.ServiceModel.Dispatcher.&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;EndpointDispatcher&lt;/SPAN&gt;&lt;FONT color=#000000&gt; endpointDispatcher)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&lt;FONT color=#000000&gt; (endpoint.Binding &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;is&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;BasicHttpBinding&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &amp;amp;&amp;amp;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;((&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;BasicHttpBinding&lt;/SPAN&gt;&lt;FONT color=#000000&gt;)endpoint.Binding).Security.Mode == &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;BasicHttpSecurityMode&lt;/SPAN&gt;&lt;FONT color=#000000&gt;.None)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;endpointDispatcher.DispatchRuntime.MessageInspectors.Add(&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DispatchMessageInspector&lt;/SPAN&gt;&lt;FONT color=#000000&gt;());&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&lt;FONT color=#000000&gt; Validate(&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ServiceEndpoint&lt;/SPAN&gt;&lt;FONT color=#000000&gt; endpoint)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#endregion&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DispatchMessageInspector&lt;/SPAN&gt;&lt;FONT color=#000000&gt; : &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;IDispatchMessageInspector&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#region&lt;/SPAN&gt;&lt;FONT color=#000000&gt; IDispatchMessageInspector Members&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;FONT color=#000000&gt; AfterReceiveRequest(&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;ref&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Message&lt;/SPAN&gt;&lt;FONT color=#000000&gt; request, &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;IClientChannel&lt;/SPAN&gt;&lt;FONT color=#000000&gt; channel, &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;InstanceContext&lt;/SPAN&gt;&lt;FONT color=#000000&gt; instanceContext)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&lt;FONT color=#000000&gt; headerIndex = request.Headers.FindHeader(&lt;/FONT&gt;&lt;SPAN style="COLOR: #a31515"&gt;"simpleAuthenticationHeader"&lt;/SPAN&gt;&lt;FONT color=#000000&gt;, &lt;/FONT&gt;&lt;SPAN style="COLOR: #a31515"&gt;"http://dasblog.info/2007/08/security"&lt;/SPAN&gt;&lt;FONT color=#000000&gt;);&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&lt;FONT color=#000000&gt; (headerIndex &amp;gt;= 0)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt;&lt;FONT color=#000000&gt; header = request.Headers.GetHeader&amp;lt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;SimpleAuthenticationHeader&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&amp;gt;(headerIndex);&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;request.Headers.RemoveAt(headerIndex);&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&lt;FONT color=#000000&gt; ( &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Membership&lt;/SPAN&gt;&lt;FONT color=#000000&gt;.ValidateUser(header.UserName, header.Password) )&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt;&lt;FONT color=#000000&gt; identity = &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;FormsIdentity&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;FormsAuthenticationTicket&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(header.UserName, &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;&lt;FONT color=#000000&gt;, 15));&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Thread&lt;/SPAN&gt;&lt;FONT color=#000000&gt;.CurrentPrincipal = &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;RolePrincipal&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(identity);&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;FONT color=#000000&gt;;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&lt;FONT color=#000000&gt; BeforeSendReply(&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;ref&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.ServiceModel.Channels.&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Message&lt;/SPAN&gt;&lt;FONT color=#000000&gt; reply, &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;FONT color=#000000&gt; correlationState)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#endregion&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ClientMessageInspector&lt;/SPAN&gt;&lt;FONT color=#000000&gt; : &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;IClientMessageInspector&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#region&lt;/SPAN&gt;&lt;FONT color=#000000&gt; IClientMessageInspector Members&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;UserNamePasswordClientCredential&lt;/SPAN&gt;&lt;FONT color=#000000&gt; creds;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; ClientMessageInspector(&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;UserNamePasswordClientCredential&lt;/SPAN&gt;&lt;FONT color=#000000&gt; creds)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;&lt;FONT color=#000000&gt;.creds = creds;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;&lt;FONT color=#000000&gt; AfterReceiveReply(&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;ref&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.ServiceModel.Channels.&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Message&lt;/SPAN&gt;&lt;FONT color=#000000&gt; reply, &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;FONT color=#000000&gt; correlationState)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&lt;FONT color=#000000&gt; BeforeSendRequest(&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;ref&lt;/SPAN&gt;&lt;FONT color=#000000&gt; System.ServiceModel.Channels.&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Message&lt;/SPAN&gt;&lt;FONT color=#000000&gt; request, &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;IClientChannel&lt;/SPAN&gt;&lt;FONT color=#000000&gt; channel)&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;request.Headers.Add(&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;MessageHeader&lt;/SPAN&gt;&lt;FONT color=#000000&gt;.CreateHeader(&lt;/FONT&gt;&lt;SPAN style="COLOR: #a31515"&gt;"simpleAuthenticationHeader"&lt;/SPAN&gt;&lt;FONT color=#000000&gt;, &lt;/FONT&gt;&lt;SPAN style="COLOR: #a31515"&gt;&lt;A href="http://dasblog.info/2007/08/security"&gt;http://dasblog.info/2007/08/security&lt;/A&gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt;, &lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;SimpleAuthenticationHeader&lt;/SPAN&gt;&lt;FONT color=#000000&gt;{ UserName = creds.UserName, Password = creds.Password }));&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;&lt;FONT color=#000000&gt;;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;#endregion&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img width="0" height="0" src="http://vasters.com/clemensv/cptrk.ashx?id=3cc59a29-0e1a-487d-8b45-10ea559ef30d"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4513313" 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/MSDN/default.aspx">MSDN</category></item><item><title>XML-RPC with WCF</title><link>http://blogs.msdn.com/clemensv/archive/2007/08/21/xml-rpc-with-wcf.aspx</link><pubDate>Tue, 21 Aug 2007 01:46:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4494791</guid><dc:creator>clemensv</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/4494791.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=4494791</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=4494791</wfw:comment><description>&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff1493&gt;UPDATE:&lt;/FONT&gt; The code has been updated. Ignore this post and &lt;A href="http://vasters.com/clemensv/PermaLink,guid,679ca50b-c907-4831-81c4-369ef7b85839.aspx"&gt;go here&lt;/A&gt;.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I'm writing lots of code&amp;nbsp;lately. I've rejoined the dasBlog community and I'm busy&amp;nbsp;writing a prototype for the .NET Framework 3.5 version of dasBlog (we just released the 2.0 version, see &lt;A href="http://www.dasblog.info/"&gt;http://www.dasblog.info/&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;One of the&amp;nbsp;goals of the prototype, which we'll eventually merge into the main codebase once&amp;nbsp;the .NET Framework 3.5 is available at hosting sites is to standardize on WCF for all non-HTML endpoints. Since lots of the relevant inter-blog and blogging tool APIs&amp;nbsp;are still based on XML-RPC, that called for an implementation of XML-RPC on WCF. I've just isolated that code and &lt;A href="http://wcf.netfx3.com/files/folders/creating_and_using_custom_bindings/entry11943.aspx"&gt;put it up on wcf.netfx3.com&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;My XML-RPC implementation is a binding with a special encoder and a set of behaviors. The Service Model programming experience is completely "normal" with no special extension attributes. That means you can also expose the XML-RPC contracts as SOAP endpoints with all the advanced WCF bindings and features if you like. &lt;/P&gt;
&lt;P&gt;The binding&amp;nbsp;supports client and service side and is completely config enabled.&amp;nbsp;Here's a snippet from the MetaWeblog contract:&lt;/P&gt;&lt;FONT size=4&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;[&lt;FONT color=#2b91af&gt;ServiceContract&lt;/FONT&gt;(Namespace = &lt;FONT color=#a31515&gt;&lt;A href="http://www.xmlrpc.com/metaWeblogApi"&gt;http://www.xmlrpc.com/metaWeblogApi&lt;/A&gt;&lt;/FONT&gt;)]&lt;BR&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;interface&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;IMetaWeblog&lt;/FONT&gt; : Microsoft.ServiceModel.Samples.XmlRpc.Contracts.Blogger.&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#2b91af&gt;IBlogger&lt;BR&gt;&lt;/FONT&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp; [&lt;FONT color=#2b91af&gt;OperationContract&lt;/FONT&gt;(Action=&lt;FONT color=#a31515&gt;"metaWeblog.editPost"&lt;/FONT&gt;)]&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp; bool&lt;/FONT&gt; metaweblog_editPost(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; postid,&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string&lt;/FONT&gt; username,&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&lt;/FONT&gt; password,&lt;BR&gt;&lt;FONT color=#2b91af&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Post&lt;/FONT&gt; post,&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;/FONT&gt; publish);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp; [&lt;FONT color=#2b91af&gt;OperationContract&lt;/FONT&gt;(Action=&lt;FONT color=#a31515&gt;"metaWeblog.getCategories"&lt;/FONT&gt;)]&lt;BR&gt;&lt;FONT color=#2b91af&gt;&amp;nbsp;&amp;nbsp; CategoryInfo&lt;/FONT&gt;[] metaweblog_getCategories(&lt;FONT color=#0000ff&gt; string&lt;/FONT&gt; blogid,&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string&lt;/FONT&gt; username,&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string&lt;/FONT&gt; password);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;For your convenience I've included&amp;nbsp;complete Blogger, MetaWeblog, and MovableType API contracts along with the respective data types in the test application. The test app is a small in-memory blog that you can use with the blogging function of Word 2007 as a client 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;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;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ServiceContract&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(Namespace=&lt;/FONT&gt;&lt;SPAN style="COLOR: #a31515"&gt;"http://www.hixie.ch/specs/pingback/pingback"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000000&gt;)]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;interface&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&lt;FONT size=2 face="Courier New"&gt;IPingback&lt;BR&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;OperationContract&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(Action=&lt;/FONT&gt;&lt;SPAN style="COLOR: #a31515"&gt;"pingback.ping"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000000&gt;)]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;FONT color=#000000&gt; ping(&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;FONT color=#000000&gt; sourceUri, &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000000&gt; targetUri);&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&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;FONT size=2 face=Verdana&gt;and the &lt;A href="http://www.xmlrpc.com/weblogsCom"&gt;WeblogUpdates API&lt;/A&gt; looks like this:&lt;/FONT&gt;&lt;/SPAN&gt;&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;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; FONT-SIZE: 8pt; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DataContract&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;struct&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&lt;FONT size=2 face="Courier New"&gt;WeblogUpdatesReply&lt;BR&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DataMember&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; flerror;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DataMember&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; message;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ServiceContract&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;interface&lt;/SPAN&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;&lt;FONT size=2 face="Courier New"&gt;IWeblogUpdates&lt;BR&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;OperationContract&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(Action = &lt;/FONT&gt;&lt;SPAN style="COLOR: #a31515"&gt;"weblogUpdates.extendedPing"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;)]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;WeblogUpdatesReply&lt;/SPAN&gt;&lt;FONT color=#000000&gt; ExtendedPing(&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;FONT color=#000000&gt; weblogName, &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;FONT color=#000000&gt; weblogUrl, &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;FONT color=#000000&gt; checkUrl, &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; rssUrl);&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;OperationContract&lt;/SPAN&gt;&lt;FONT color=#000000&gt;(Action=&lt;/FONT&gt;&lt;SPAN style="COLOR: #a31515"&gt;"weblogUpdates.ping"&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt;)]&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #2b91af"&gt;WeblogUpdatesReply&lt;/SPAN&gt;&lt;FONT color=#000000&gt; Ping(&lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;FONT color=#000000&gt; weblogName, &lt;/FONT&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2 face="Courier New"&gt; weblogUrl);&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;/SPAN&gt;I'm expecting some interop bugs since I've done a clean implementation from the specs, so if you find any please let me know.&lt;/P&gt;
&lt;P&gt;The code is subject to the Microsoft samples license, which means that you can put it into your (blogging) apps. Enjoy.&lt;/P&gt;&lt;img width="0" height="0" src="http://vasters.com/clemensv/cptrk.ashx?id=9677a491-9037-4b79-baa3-bcf093737957"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4494791" 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/MSDN/default.aspx">MSDN</category></item><item><title>Webcast Today....</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/21/641247.aspx</link><pubDate>Wed, 21 Jun 2006 11:57:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:641247</guid><dc:creator>clemensv</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/641247.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=641247</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=641247</wfw:comment><description>In the ongoing &lt;A href="http://www.microsoft.com/events/series/archdesignsystems.mspx#Next%20Generation:%20.NET%20Framework%203.0%20and%20Vista"&gt;MSDN Architecture Webcast Series&lt;/A&gt;&amp;nbsp;with broad coverage of all things WCF (see the "Next Generation: .NET Framework 3.0 and Vista" section for archived and upcoming content), I am &lt;A href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032299346&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;on today&lt;/A&gt; (8AM PST, 11AM EST, 17:00 CET), live from&amp;nbsp;my kitchen table in Germany,&amp;nbsp;with a remix of my "RSS, REST, POX, Sites-as-Services" talks from MIX06 and TechEd. &lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=47b65fb9-0d86-4c72-8028-35941b580a45"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=641247" 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/MSDN/default.aspx">MSDN</category></item><item><title>WCF Goes To Hollywood.</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/21/641227.aspx</link><pubDate>Wed, 21 Jun 2006 11:39:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:641227</guid><dc:creator>clemensv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/641227.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=641227</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=641227</wfw:comment><description>&lt;P&gt;Cool. I hadn't even seen this demo until now, even though we already have it for a while.&amp;nbsp;Our technical evangelist Craig McMurtry posted the &lt;A href="http://wcf.netfx3.com/files/48/distributed_applications/entry2977.aspx"&gt;"Digital Fortress"&lt;/A&gt; demo, which is an implementation of&amp;nbsp;the computer systems that play&amp;nbsp;major roles in Dan Brown's novel "Digital Fortress". There are several&amp;nbsp;reasons&amp;nbsp;why I find this demo interesting and pretty amusing.&lt;/P&gt;
&lt;P&gt;First of all, it has a "Hollywood-Style UI", which is funny. It's got the huge full-screen login screen with a "sort-of-looks-like-the-NSA" logo, a big count-down clock and a "control screen" (below) with the gratuitous graphics and big buttons one might expect. The other thing that's very interesting is that&amp;nbsp;it is a &lt;EM&gt;management tools demo&lt;/EM&gt; (of all things).&amp;nbsp;The key to bust the evil conspiracy is to trace suspicious network activity across many nodes on the network and the script packaged with the demo shows you how to get that done using the built-in WCF tracing facilities. &lt;A href="http://wcf.netfx3.com/files/48/distributed_applications/entry2977.aspx"&gt;Download.&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://friends.newtelligence.net/clemensv/content/binary/fortress.jpg" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=1d54f6d7-4860-4e7e-a020-6cab738770b0"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=641227" 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/MSDN/default.aspx">MSDN</category></item><item><title>MSDN TV: WCF Bindings.</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/18/636047.aspx</link><pubDate>Sun, 18 Jun 2006 15:56:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:636047</guid><dc:creator>clemensv</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/636047.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=636047</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=636047</wfw:comment><description>&lt;P&gt;&lt;EM&gt;[Note to self: Schedule the video taping session early in a bound-to-be-stressful week, not 2 hours before you need to leave for the airport on Friday.]&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;MSDN TV has a &lt;A href="http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20060615WCFCV/manifest.xml"&gt;new episode&lt;/A&gt; featuring &lt;A href="http://dictionary.reference.com/browse/yours truly"&gt;yours truly&lt;/A&gt; speaking about WCF bindings (and what they cause in the channel stack).&lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=6059315f-0d8e-4671-a883-9e6d15a48b02"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=636047" 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/MSDN/default.aspx">MSDN</category></item><item><title>Code-Name WinFX vs .NET Framework 3.0</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/18/636045.aspx</link><pubDate>Sun, 18 Jun 2006 15:39:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:636045</guid><dc:creator>clemensv</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/636045.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=636045</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=636045</wfw:comment><description>&lt;P&gt;I was sad when "Indigo" and "Avalon" went away. It'd be great&amp;nbsp;if we'd&amp;nbsp;have a pool of cool legal-approved code-names for which we own the trademark rights and which we could stick to.&amp;nbsp;Think Delphi or Safari. "Indigo" was cool insofar as it was very handy to refer to the technology set, but&amp;nbsp;was removed&amp;nbsp;far&amp;nbsp;enough from the specifics that it doesn't&amp;nbsp;create a sharply defined, product-like island within the larger managed-code landscape or has legacy connotations&amp;nbsp;like "ADO.NET". &amp;nbsp;Also, my talks these days could be 10 minutes shorter if I could refer to Indigo instead of "Windows Communications Foundation". Likewise, my job title wouldn't have to&amp;nbsp;have a line wrap on the business card of I ever spelled it out in full.&lt;/P&gt;
&lt;P&gt;However, when I learned about the WinFX name going away (several weeks before the public announcement) and the new "Vista Wave" technologies (WPF/WF/WCF/WCS) being&amp;nbsp;rolled up&amp;nbsp;under the&amp;nbsp;&lt;A href="http://msdn.microsoft.com/winfx/"&gt;.NET Framework&lt;/A&gt;&amp;nbsp;brand, I was&amp;nbsp;quite happy. Ever since it became clear in 2004 that the grand plan to&amp;nbsp;put a complete,&amp;nbsp;covers-all-and-everything&amp;nbsp;managed API on top (and on quite a bit of the bottom) of everything Windows would have to wait until siginificantly after Vista and that&amp;nbsp;therefore&amp;nbsp;the Win16&amp;gt;Win32&amp;gt;WinFX continuity would not tell the true story, that name made only limited sense to stick to. The .NET Framework is the #1 choice for business applications and a well established brand. People refer to themselves as being "dotnet" developers. But even though the .NET Framework covers a lot of ground and "Indigo", "Avalon", "InfoCard", and "Workflow" are&amp;nbsp;overwhelmingly (or exclusively) managed-code based, there are still quite a few things in Windows Vista that still require using P/Invoke or COM/Interop from managed code or unmanaged code outright. That's not a problem.&amp;nbsp;Something has to manage the managed code and there's no urgent need to rewrite entire subsystems to managed code if&amp;nbsp;you only want to add or revise features.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So now all the new stuff is now part of the .NET Framework. That is a good, good, good&amp;nbsp;change. This says what it all is. &lt;/P&gt;
&lt;P&gt;Admittedly confusing is the "3.0" bit. What we'll ship is a Framework 3.0 that rides on top of the 2.0 CLR and includes the 2.0 versions of the Base-Class Library, Windows Forms,&amp;nbsp;and ASP.NET. It doesn't include the formerly-announced-as-to-be-part-of-3.0 technologies like VB9 (there&amp;nbsp;you have the version number consistency flying out the window outright), C# 3.0, and&amp;nbsp;LINQ. Personally, I think&amp;nbsp;that it might&amp;nbsp;be a tiny bit less confusing if the Framework had a version-number neutral name such as ".NET Framework 2006" which would allow&amp;nbsp;doing what we do now with less potential for confusion, but only a tiny bit.&amp;nbsp;Certainly not enough to&amp;nbsp;stage a war over "2006" vs. "3.0".&lt;/P&gt;
&lt;P&gt;It's a matter of project management&amp;nbsp;reality and also one of platform predictability that the ASP.NET, or Windows Forms&amp;nbsp;teams&amp;nbsp;do not and should not ship a full major-version revision of their bits every year. They shipped Whidbey (2.0) in late 2005 and hence&amp;nbsp;it's healthy for them&amp;nbsp;to&amp;nbsp;have boarded the scheduled-to-arrive-in-2007 boat heading to Orcas. We (the "WinFX" teams) subscribed to the Vista ship&amp;nbsp;docking&amp;nbsp;later this year and we bring great innovation which will be preinstalled on every copy of it. LINQ&amp;nbsp;as well as&amp;nbsp;VB9 and C# incorporating it on a language-level are very obviously Visual Studio bound and hence they are on the Orcas ferry as well. The .NET Framework is a steadily growing development platform that spans technologies from the Developer Division, Connected Systems, Windows Server, Windows Client, SQL Server, and other groups, and my gut feeling is that it will become the norm that it will be extended off-cycle from the Developer Division's&amp;nbsp;Visual Studio and CLR releases. Whenever a big ship docks in the port, may it be Office, SQL, BizTalk, Windows Server, or Windows Client, and as more and more of the still-unmanaged Win32/Win64 surface area gets wrapped, augmented or replaced by managed-code APIs over time and entirely new things are added, there might be bits that&amp;nbsp;fit into and update the Framework. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;So one sane way to think about the .NET Framework version number is that&amp;nbsp;it merely labels the overall package and not the individual assemblies and components included within it. Up to 2.0&amp;nbsp;everything was pretty synchronized, but&amp;nbsp;given the ever-increasing scale of the thing, it's good to think of that being a lucky (even if intended) coindicence of scheduling. This surely &lt;A href="http://en.wikipedia.org/wiki/Microsoft_BackOffice"&gt;isn't the first time&lt;/A&gt; that&amp;nbsp;packages were versioned independently of their components. There was and is no reason for the ASP.NET team to gratuitously recompile their existing bits with a new version number just to have the GAC look pretty and to create the illusion that everything is new - and to break Visual Studio compatibility in the process.&lt;/P&gt;
&lt;P&gt;Of course, once we cover 100% of the Win32 surface area, we can rename it all into WinFX again ;-)&amp;nbsp; (just kidding)&lt;/P&gt;
&lt;P&gt;[All the usual&amp;nbsp;"personal opinion" disclaimers apply to this post]&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;EM&gt;Update:&lt;/EM&gt; Removed reference to "Win64".&lt;/FONT&gt; &lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=57b03894-e197-4512-b9ea-648105890103"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=636045" 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/MSDN/default.aspx">MSDN</category></item><item><title>XML is the assembly language of Web 2.0</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/18/635983.aspx</link><pubDate>Sun, 18 Jun 2006 13:24:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:635983</guid><dc:creator>clemensv</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/635983.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=635983</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=635983</wfw:comment><description>&lt;P&gt;&lt;A href="http://www.mcateer-roarty.info/blogs/the_roarty_blog/archive/2006/06/16/290.aspx"&gt;I've been quoted&lt;/A&gt; as to have said so at TechEd and I'll happily repeat it: "XML is the assembly language of Web 2.0", even though some (and likely some more) disagree. &lt;A href="http://www.codenameindigo.net/PermaLink.aspx?guid=a806afa2-2415-4e86-8ea4-88a312b1823b"&gt;James Speer&lt;/A&gt;&amp;nbsp;writes&amp;nbsp;&lt;EM&gt;"&lt;FONT face="MS Reference Sans Serif"&gt;Besides, Assembly Language is hard, XML isn’t."&lt;/FONT&gt;&lt;/EM&gt; ,&amp;nbsp;which I have to disagree with. &lt;/P&gt;
&lt;P&gt;True, throwing together some angle brackets isn't the hardest thing in the world, but beating things into the right&amp;nbsp;shape is hard and probably even harder than in assembly. Yes, one can totally, after immersing oneself in the intricacies of Schema, write complex types and ponder for days and months about the right use of attributes and elements. It's absolutely within reach for a WSDL zealot to code up messages, portTypes and operations by hand. But please, if you think that's the right way to do things, I also demand that you write and apply your &lt;A href="http://msdn.microsoft.com/ws/2005/07/ws-security-policy/"&gt;security policy&lt;/A&gt; in angle bracket notation from the top of your head and generate WCF config from that using&amp;nbsp;svcutil instead of just throwing a binding together, because XML is so easy.&amp;nbsp;Oh? Too hard? Well, it turns out that except for our developers and testers who are focusing on getting these mappings right, nobody on our product team would probably ever even want to try writing such a beast by hand for any code that sits above the deep-down guts of our stack. This isn't the fault of the specifications (or people here being ignorant), but it's a function of security being hard and the related metadata being complex.&amp;nbsp;Similar things, even though the complexity isn't quite as extreme there,&amp;nbsp;can be said about the&amp;nbsp;other extensions to the policy framework such as &lt;A href="http://msdn.microsoft.com/library/en-us/dnglobspec/html/WS-RMPolicy.pdf"&gt;WS-RM Policy&lt;/A&gt;&amp;nbsp;or those for&amp;nbsp;&lt;A href="http://msdn.microsoft.com/ws/2005/08/ws-atomictransaction/"&gt;WS-AT&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;As we're getting to the point where full range of functionality covered by WS-* specifications is due to hit the mainstream by us releasing WCF and our valued competitors releasing their respective implementations, hand-crafted contracts will become increasingly meaningless, because it's beyond the capacity of anyone whose job it is to build solutions for their customers to write complete set of contracts that not only ensures simple data interop but also protocol interop.&amp;nbsp;Just as there were days that all you needed was assembly and INT21h&amp;nbsp;to write a DOS program (yikes) or&amp;nbsp;knowledge of "C"&amp;nbsp;alongside stdio.h and fellows to write anything for everthing, things are changing now in the same way in Web Services land. Command of XSD and WSDL&amp;nbsp;is no longer sufficient, all the other stuff is just as important to make things work. &lt;/P&gt;
&lt;P&gt;Our WCF [DataContract] doesn't support attributes. That's a deliberate choice because we want to enforce simplicity and enhance interoperability&amp;nbsp;of schemas. We put an abstraction over XSD and limit the control over it, because we want to simplify the stuff that goes across the wire. We certainly allow&amp;nbsp;everyone to use the XmlSerializer with all of it's attribute based fine-grained control over schema, even though there are quite a few Schema constructs that even that doesn't support when building schema from such metadata. If you choose to, you can just ignore all of our serialization magic and fiddle with the XML Infoset outright and supply your own schema. However, XML and Schema are specifications that everyone and their dog wanted to get features into and Schema is hopelessly overengineered. Ever since we all (the industry, not only MS)&amp;nbsp;boarded the SOAP/WS train, we're debating how to constrain the features of that monster to a reasonable subset that makes sense and the debate doesn't want to end.&lt;/P&gt;
&lt;P&gt;James writes that he &lt;EM&gt;"&lt;/EM&gt;&lt;FONT face="MS Reference Sans Serif"&gt;&lt;EM&gt;take&lt;/EM&gt;[s]&lt;EM&gt; a lot of care in terms of elements vs. attributes and mak&lt;/EM&gt;[es]&lt;EM&gt; sure the structure of the XML is business-document-like", &lt;/EM&gt;which only really makes sense if XML documents used in WS scenarios were meant for immediate human consumption, which they're not. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;We want to promote a model that is simple and consistent to serialize to and from on any platform and that&amp;nbsp;things like&amp;nbsp;the differentiation between attributes and elements doesn't stand in the way of allowing a 1:1 mapping into&amp;nbsp;alternate, non-XML&amp;nbsp;serialization formats such as JSON or what-have-you&amp;nbsp;(most of which don't&amp;nbsp;care about that sort of differentiation).&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="MS Reference Sans Serif"&gt;James' statement about "business-document-like" structures is also interesting&amp;nbsp;considering EDIFACT, X.12&amp;nbsp;or SWIFT, all of which&amp;nbsp;only know records, fields and values, and don't care about that sort of subtle element/attribute differentation, either. (Yes, no of those might be "hip" any more, but they are implemented and power a considerable chunk of the world economy's data exchange).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="MS Reference Sans Serif"&gt;By now, XML is the foundation for everything that happens on the web, and I surely don't want to have it go away. But have arrived&amp;nbsp;at the point where matters have gotten so complicated that a layer of abstraction over pretty much all things XML has become a necessity for everyone who makes their money building customer solutions and not by&amp;nbsp;teaching or writing about XML.&amp;nbsp;In my last session at TechEd, I asked a room of about 200 people "Who of you&amp;nbsp;hand-writes XSLT transforms?" 4 hands. "Who of you &lt;EM&gt;used to&lt;/EM&gt;&amp;nbsp;hand-write XSLT transforms?" 40+ hands. I think it's safe to assume that a bunch of those folks who&amp;nbsp;have sworn off masochism and no longer hand-code XSLT are now using tools like the BizTalk Mapper or Altova's MapForce, which means that XSL/T is alive and kicking, but&amp;nbsp;only downstairs in the basement.&amp;nbsp;However, the abstractions that these tools provide also allow bypassing XSLT altogether and generate the transformation logic straight into compiled C++, Java, or C# code, which is what MapForce offers.&amp;nbsp;&lt;/FONT&gt;&lt;FONT face="MS Reference Sans Serif"&gt;WSDL is already walking down that path.&lt;/FONT&gt;&lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=1e863a78-33d6-4a85-b5e2-f7d241b423d9"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=635983" 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/MSDN/default.aspx">MSDN</category></item><item><title>TechEd: Sample Code from CON423</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/15/632837.aspx</link><pubDate>Fri, 16 Jun 2006 00:34:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:632837</guid><dc:creator>clemensv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/632837.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=632837</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=632837</wfw:comment><description>&lt;P&gt;&lt;A href="http://wcf.netfx3.com/files/folders/product_team/entry3413.aspx"&gt;Here's the sample code&lt;/A&gt; from my CON423 session about selecting bindings here at TechEd.&lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=29adad18-fdfd-45d1-9e9e-7da3eea0114c"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=632837" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/clemensv/archive/tags/WCF/default.aspx">WCF</category></item><item><title>TechEd: What I am going to talk about on Thursday</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/13/629633.aspx</link><pubDate>Tue, 13 Jun 2006 19:09:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:629633</guid><dc:creator>clemensv</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/629633.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=629633</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=629633</wfw:comment><description>&lt;P&gt;My first of two sessions this week here at TechEd is on Thursday, at 2:45pm in room 153ABC on "Designing Bindings and Contracts". &lt;/P&gt;
&lt;P&gt;I realize that the title sounds a bit abstract and a different way to put this would be "How to choose the correct bindings and what to consider about contracts in a variety of architectual scenarios", but that would have been a bit long as a title. in the talk I'll explain the system-defined bindings that we ship in the product so that we've got stuff to work with and then I'll get out the tablet pen and draw up a bunch of scenarios and how our bindings (read: communication options) make sense in those. What's the best choice for N-Tier inside and outside of the corporate perimeter, what do you do for queueing-style apps, how do you implement volatile or durable 1:1 pub/sub, how do you implement broadcasts and where do they make sense, etc. &lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=479cc904-6008-4d1d-ae2a-c53d5d101ce6"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=629633" 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/MSDN/default.aspx">MSDN</category></item><item><title>TechEd: WCF RSS Toolkit released</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/13/629473.aspx</link><pubDate>Tue, 13 Jun 2006 17:23:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:629473</guid><dc:creator>clemensv</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/629473.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=629473</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=629473</wfw:comment><description>&lt;P&gt;We've just released the "&lt;A href="http://wcf.netfx3.com/files/folders/encoders/entry3262.aspx"&gt;Windows Communication Foundation RSS Toolkit&lt;/A&gt;" on our new community site. This toolkit, which comes with complete source code,&amp;nbsp;illustrates how to expose ATOM and RSS feeds through WCF endpoints. I will discuss the toolkit in my session &lt;STRONG&gt;CON339, Room 107ABC, Friday 10:45am&lt;/STRONG&gt; here at TechEd. &lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=ca3a1146-4d0e-45a5-9369-9a74ffdeda71"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=629473" 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/MSDN/default.aspx">MSDN</category></item><item><title>TechEd 2006 U.S. Kicks Off</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/12/628082.aspx</link><pubDate>Mon, 12 Jun 2006 15:48:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:628082</guid><dc:creator>clemensv</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/628082.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=628082</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=628082</wfw:comment><description>&lt;P&gt;This is my first TechEd! - as a Microsoft employee. It's of course not my first tech event in my new job (Egypt, Jordan, UK, France, Switzerland, Holland, Belgium, Denmark, Las Vegas/USA, Slovenia, and Israel&amp;nbsp;are on the year-to-date list -&amp;nbsp;on top of&amp;nbsp;three long-distance commutes to Redmond), but the big TechEds are always special. It'll be fun. Come by the Connected Systems area in the exhibition hall and find me to chat if you are here in Boston.&lt;/P&gt;
&lt;P&gt;Frankly, I didn't expect a Sunday night keynote to be nearly as well attended as it was, but it looks that experiment mostly worked. The theme of the keynote were&amp;nbsp;&lt;A href="http://www.microsoft.com/presspass/features/2006/jun06/06-11Promises.mspx"&gt;Microsoft's 4 Core Promises&lt;/A&gt; for IT Pros and Developers nicely wrapped into a video story based on the TV show "24" and with that show's&amp;nbsp;IT superwoman&amp;nbsp;Chloe O'Brian (actress &lt;A href="http://imdb.com/name/nm0707476/"&gt;Mary Lynn Rajskub&lt;/A&gt;) up on stage with Bob Muglia (our team's VP far up above in my chain of command), who&amp;nbsp;acted as&amp;nbsp;the MC for the show. Finally we got an apology from a Hollywood character for all the IT idiocy the put up on screen. Thanks, Chloe.&lt;/P&gt;
&lt;P&gt;Our team has a lot of very cool stuff to&amp;nbsp;talk about at this show. The first highlight is John Justice's WCF Intro talk (Session CON208, Room 157ABC) &lt;STRONG&gt;today at 5:00pm&lt;/STRONG&gt; with a "meet the team" panel Q&amp;amp;A session at the end.&amp;nbsp;Block the time.&lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=76e10b03-8d1a-4e17-82c8-32a14f8debae"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=628082" 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/MSDN/default.aspx">MSDN</category></item><item><title>A New Home on the Web for the Windows Communication Foundation and the .NET Framework 3.0</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/12/628029.aspx</link><pubDate>Mon, 12 Jun 2006 15:03:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:628029</guid><dc:creator>clemensv</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/628029.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=628029</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=628029</wfw:comment><description>&lt;P&gt;Late last night, my colleague &lt;A href="http://blogs.msdn.com/jamescon/default.aspx"&gt;James Conard&lt;/A&gt;, who has worked and worked&amp;nbsp;and worked tirelessly on this for the&amp;nbsp;past few months&amp;nbsp;and has shown great patience with a big group of people pulling into all sorts of directions as we got this together&amp;nbsp;has flipped the switch to turn on the new .NET Framework 3.0 community portal family at &lt;A href="http://www.netfx3.com/"&gt;netfx3.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The new Windows Communication Foundation community home is at &lt;A href="http://wcf.netfx3.com/"&gt;http://wcf.netfx3.com&lt;/A&gt; and it's a great improvement over the small, hastily-thown-together site that we used to have. There'll be a number of news bits and announcements throughout and after TechEd at the new site, so it might be a good idea to subscribe to &lt;A href="http://wcf.netfx3.com/blogs/news_and_announcements/rss.aspx"&gt;the feed&lt;/A&gt;&amp;nbsp;now.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;My official "Welcome!" post over on the new site is &lt;A href="http://wcf.netfx3.com/blogs/news_and_announcements/archive/2006/06/12/Come-on-in_2100_-Welcome-to-our-new-home_2100_.aspx"&gt;here&lt;/A&gt;, the James' site-wide welcome message can be found &lt;A href="http://www.netfx3.com/blogs/news_and_announcements/archive/2006/06/11/Welcome-to-NetFx3.com.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=47add500-56af-4611-83f1-b13c8068a6f8"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=628029" 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/MSDN/default.aspx">MSDN</category></item><item><title>The System-Defined Bindings in WCF: Nicholas Allen explains it all</title><link>http://blogs.msdn.com/clemensv/archive/2006/06/06/619428.aspx</link><pubDate>Tue, 06 Jun 2006 23:50:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:619428</guid><dc:creator>clemensv</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/619428.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=619428</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=619428</wfw:comment><description>&lt;P&gt;My PM colleague &lt;A href="http://blogs.msdn.com/drnick"&gt;Nicholas Allen&lt;/A&gt; is certainly on my list for "best blogging newcomer of 2006". &amp;nbsp;He started in February, got hooked, and I am not sure whether he actually did&amp;nbsp;leave the keyboard since then.&lt;/P&gt;
&lt;P&gt;Nicholas just started a blog series that explains the system-defined (formely known as: standard-) bindings&amp;nbsp;that we ship with WCF. He's got three of them&amp;nbsp;explained now and my guess is that there are more to follow:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/drnick/archive/2006/06/01/612672.aspx"&gt;BasicHttpBinding&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/drnick/archive/2006/06/05/617703.aspx"&gt;NetTcpBinding&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/drnick/archive/2006/06/06/618445.aspx"&gt;NetNamedPipeBinding&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;While you are there, make sure to subscribe to Nicholas' &lt;A href="http://blogs.msdn.com/drnick/rss.aspx"&gt;feed&lt;/A&gt; and also take a look around and look at earlier posts. His &lt;A href="http://blogs.msdn.com/drnick/archive/category/12220.aspx"&gt;channel category&lt;/A&gt; is a gold mine and the same can be said of the &lt;A href="http://blogs.msdn.com/drnick/archive/category/13324.aspx"&gt;transports&lt;/A&gt; and ... everything there is fabulous stuff.&lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=24a2c6a4-e043-464c-8c60-189ecea3460d"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=619428" 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/MSDN/default.aspx">MSDN</category></item><item><title>Windows Communication Foundation "Documentation CTP"</title><link>http://blogs.msdn.com/clemensv/archive/2006/04/17/577424.aspx</link><pubDate>Mon, 17 Apr 2006 13:24:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:577424</guid><dc:creator>clemensv</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/clemensv/comments/577424.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clemensv/commentrss.aspx?PostID=577424</wfw:commentRss><wfw:comment>http://blogs.msdn.com/clemensv/rsscomments.aspx?PostID=577424</wfw:comment><description>&lt;P&gt;(via &lt;A href="http://windowscommunication.net"&gt;http://windowscommunication.net&lt;/A&gt;) &lt;/P&gt;
&lt;P&gt;The WCF Documentation Team has started to release biweekly (!) documentation updates. The updates&amp;nbsp;are made available as a set of .CHM files. &lt;/P&gt;
&lt;P&gt;Mind that these files do not integrate directly into Visual Studio as the WinFX Windows SDK files do. Since VS integration requires quite a bit of setup work, the VS integrated help files can only ship with the regular WinFX Windows SDK CTPs. Nevertheless, the feedback&amp;nbsp;from all&amp;nbsp;customers we asked&amp;nbsp;told us loud and clear&amp;nbsp;that we should ship the documentation in this form&amp;nbsp;irrespective of&amp;nbsp;this minor usability inconvenience and&amp;nbsp;therefore we do.&lt;/P&gt;
&lt;P&gt;If you have feedback on the documentation, please use the "Send comments about this topic to Microsoft" email links below each documentation entry to provide feedback. Due to the volume that our team receives, you might not always get an answer, but your input is most definitely read and considered.&lt;/P&gt;
&lt;P&gt;You can download the first (April 15) Documentation CTP directly &lt;A href="http://windowscommunication.net/collateral/downloads/wcfdocctp-20060415.exe"&gt;using this link&lt;/A&gt;&amp;nbsp;(20MB).&lt;/P&gt;&lt;img width="0" height="0" src="http://friends.newtelligence.net/clemensv/cptrk.ashx?id=b78973da-fe9e-4d65-8720-c41b69e8aaf8"&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=577424" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/clemensv/archive/tags/WCF/default.aspx">WCF</category></item></channel></rss>