<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en"><title type="html">DonXml's All Things Techie</title><subtitle type="html"> </subtitle><id>http://donxml.com/allthingstechie/atom.aspx</id><link rel="alternate" type="text/html" href="http://donxml.com/allthingstechie/default.aspx" /><generator uri="http://communityserver.org" version="2.1.60809.935">Community Server</generator><updated>2008-03-03T16:25:34Z</updated><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DonXmlAllThingsTechie" /><feedburner:info uri="donxmlallthingstechie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by/2.0/" /><logo>http://www.feedburner.com/fb/images/pub/fb_pwrd.gif</logo><entry><title>Service Oriented Design Pattern - Service Ping</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/NST53jHElvU/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx" /><id>http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx</id><published>2010-12-22T15:24:46Z</published><updated>2010-12-22T15:24:46Z</updated><content type="html">&lt;p&gt;In the spirit of both the Gang of Four’s Design Patterns book and the &lt;a href="http://www.soapatterns.org/" target="_blank"&gt;SOA Patterns&lt;/a&gt; book/site,&amp;#160; I’m going to try to document a couple different SOA Patterns that I’ve found useful, but haven’t seen documented anywhere else.&amp;#160; This is a work in progress, and as always, feedback on theses patterns is appreciated.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;hr /&gt;  &lt;h1&gt;Service Ping&lt;/h1&gt;  &lt;hr /&gt;  &lt;h2&gt;Intent&lt;/h2&gt;  &lt;p&gt;To test a client configuration to a known service endpoint.&amp;#160; Ping allows for the testing of the communication channel between a client and a service endpoint, without testing of the service implementation.&lt;/p&gt;  &lt;h2&gt;Motivation&lt;/h2&gt;  &lt;p&gt;When building and deploying services it is easy to build integration tests that will test both the configuration of the service and the implementation of the service, but it is just as important to test the service implementation and the service communication channel configuration in isolation.&amp;#160; By isolating what is under test using a Ping, we reduce the number of variables that may affect the results so we can derive useful information on whether the unit is actually correct.&amp;#160; Since many service frameworks (like WCF) allow for the communication channel to be configured using a configuration file the service configuration can easily be changed without updating the service implementation code.&amp;#160; Since these configuration files are typically part of the deployment process, these Ping tests can be used to test the service after deployment.   &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;Applicability&lt;/h2&gt;  &lt;p&gt;Use the Ping Pattern when:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You want to test just a service endpoint’s communication channel configuration to a known client configuration.&lt;/li&gt;    &lt;li&gt;You want to test that a service endpoint is available and ready to accept requests     &lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Structure&lt;/h2&gt;  &lt;p&gt;The Ping pattern can be implemented 2 ways   &lt;br /&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Adding a Ping Method to the service that has no parameters and an empty response.&lt;/li&gt;    &lt;li&gt;Adding a Ping Header to the request message header and sends back an empty response     &lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;h2&gt;Participants&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;Client&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Defines the expected communications channel configuration, sends the Ping Request and expects an empty response&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Service Endpoint&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Defines the location of the service and a specific communication configuration. &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Service Ping Behavior&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Intercepts the Ping request message before calling the service’s implementation, and returns an empty response.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;h2&gt;Collaboration&lt;/h2&gt;  &lt;p&gt;The client sends a Ping Request to the Service Endpoint and expects an empty response to signify that the request was received.&lt;/p&gt;  &lt;h2&gt;Consequences&lt;/h2&gt;  &lt;p&gt;The Ping Method and Ping Header have different trade-offs.&lt;/p&gt;  &lt;p&gt;Ping Method   &lt;br /&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Pros&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Gives a simple, easy to use, and known, method to call when implementing the Ping Pattern.&lt;/li&gt;      &lt;li&gt;Easier to secure, since most services secure at the method level.&lt;/li&gt;      &lt;li&gt;Does not require a request body&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Cons&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Adds an extra method to a service’s contract that is not part of the service’s implementation.&lt;/li&gt;      &lt;li&gt;If the service is unable to intercept the ping, then the service implementation could be executed.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;Ping Header&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Pros&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Does not change the service’s contract&lt;/li&gt;      &lt;li&gt;Tests security for the method that is used as part of the Ping Request.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Cons&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Does not explicitly indicate which method for a service to call.&lt;/li&gt;      &lt;li&gt;May require a request body.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;h2&gt;Implementation&lt;/h2&gt;  &lt;p&gt;The Service Ping pattern is implemented by way of adding a Service Ping Behavior to the Service.&amp;#160; The Service Ping Behavior should be intercept the request just before the Service Implementation is called, but after the request is validated by security.&lt;/p&gt;  &lt;h2&gt;Known Uses&lt;/h2&gt;  &lt;p&gt;The &lt;a href="http://www.tellagostudios.com/products/so-aware%E2%84%A2" target="_blank"&gt;Tellago Studio’s Product, SO-Aware&lt;/a&gt; implements the Ping Pattern, using the Ping Header implementation.&amp;#160; SO-Aware enables an enterprise to store their service configurations in a service repository, which makes it easy for the enterprise to monitor and manage service configurations without having to access the servers the services are deployed on.&amp;#160; Any changes made to the service&amp;#160; endpoint configuration can easily be regression tested using the Ping Pattern tests, immediately verifying that the changes will not adversely affect clients.&lt;/p&gt;  &lt;h2&gt;Related Patterns&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;Dependency Ping&lt;/li&gt; &lt;/ul&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx&amp;amp;;subject=Service+Oriented+Design+Pattern+-+Service+Ping" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx&amp;amp;;title=Service+Oriented+Design+Pattern+-+Service+Ping" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx&amp;amp;title=Service+Oriented+Design+Pattern+-+Service+Ping" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx&amp;amp;;title=Service+Oriented+Design+Pattern+-+Service+Ping" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx&amp;amp;;title=Service+Oriented+Design+Pattern+-+Service+Ping&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3814" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=NST53jHElvU:9kukd3ffzNU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=NST53jHElvU:9kukd3ffzNU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/NST53jHElvU" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><feedburner:origLink>http://donxml.com/allthingstechie/archive/2010/12/22/Service-Oriented-Design-Pattern-_2D00_-Service-Ping.aspx</feedburner:origLink></entry><entry><title>NJ Dev Dinner–Tues. Nov. 23rd</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/jRFBVzxxxzw/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx" /><id>http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx</id><published>2010-11-18T14:24:19Z</published><updated>2010-11-18T14:24:19Z</updated><content type="html">&lt;p&gt;Even though I live in NJ, I don’t get to hang out&amp;#160; with my friends in the local developer community that often.&amp;#160; So, I’m taking a couple days off of work next week, and figured with the holiday that week, it made sense to try to get together. I pinged &lt;a href="http://scottw.com/" target="_blank"&gt;Scott Watermasysk&lt;/a&gt;, (we have been trying to get a Dev Dinner going for a while now), and he was available.&amp;#160; Sooo….&lt;/p&gt;  &lt;p&gt;If you happen to be in NJ, and want to hang out at a cool brewpub with some fellow developers, you are welcome to stop by &lt;a href="http://www.harvestmoonbrewery.com/"&gt;The Harvest Moon Brewery&lt;/a&gt;, New Brunswick on Tue. Nov 23rd.&amp;#160; I’ll be there around 6PM, and should be there for at least a couple hours (free wireless internet access and fresh brewed beer, great combination).&lt;/p&gt;  &lt;p&gt;Feel free to spread the word.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx&amp;amp;;subject=NJ+Dev+Dinner%e2%80%93Tues.+Nov.+23rd" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx&amp;amp;;title=NJ+Dev+Dinner%e2%80%93Tues.+Nov.+23rd" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx&amp;amp;title=NJ+Dev+Dinner%e2%80%93Tues.+Nov.+23rd" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx&amp;amp;;title=NJ+Dev+Dinner%e2%80%93Tues.+Nov.+23rd" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx&amp;amp;;title=NJ+Dev+Dinner%e2%80%93Tues.+Nov.+23rd&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3807" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=jRFBVzxxxzw:sRkwm7jiJP4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=jRFBVzxxxzw:sRkwm7jiJP4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/jRFBVzxxxzw" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><feedburner:origLink>http://donxml.com/allthingstechie/archive/2010/11/18/NJ-Dev-Dinner_1320_Tues.-Nov.-23rd.aspx</feedburner:origLink></entry><entry><title>HDC10–From Datasets To Data Services Presentation Materials</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/3hAOzC-wwVw/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx" /><id>http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx</id><published>2010-09-09T21:21:11Z</published><updated>2010-09-09T21:21:11Z</updated><content type="html">&lt;p&gt;If you attended my &lt;a href="http://www.heartlanddc.com/" target="_blank"&gt;HDC 2010&lt;/a&gt; session “From Datasets to Data Services” and want a copy of&amp;#160; the slide deck and code, you can get them from my &lt;a href="http://cid-2839b6e34c142198.office.live.com/browse.aspx/.Public/HDC10" target="_blank"&gt;HDC10 Skydrive folder&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;As usual, the Heartland Developers Conference was killer.&amp;#160; If you want to attend a great conference and don’t want to spend a ton of money, you may want to look into the next HDC.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx&amp;amp;;subject=HDC10%e2%80%93From+Datasets+To+Data+Services+Presentation+Materials" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx&amp;amp;;title=HDC10%e2%80%93From+Datasets+To+Data+Services+Presentation+Materials" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx&amp;amp;title=HDC10%e2%80%93From+Datasets+To+Data+Services+Presentation+Materials" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx&amp;amp;;title=HDC10%e2%80%93From+Datasets+To+Data+Services+Presentation+Materials" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx&amp;amp;;title=HDC10%e2%80%93From+Datasets+To+Data+Services+Presentation+Materials&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3802" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=3hAOzC-wwVw:SCkS2uUXgg4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=3hAOzC-wwVw:SCkS2uUXgg4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/3hAOzC-wwVw" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><category term=".Net" scheme="http://donxml.com/allthingstechie/archive/tags/.Net/default.aspx" /><category term=".Net Communities" scheme="http://donxml.com/allthingstechie/archive/tags/.Net+Communities/default.aspx" /><category term="WCF" scheme="http://donxml.com/allthingstechie/archive/tags/WCF/default.aspx" /><feedburner:origLink>http://donxml.com/allthingstechie/archive/2010/09/09/HDC10_1320_From-Datasets-To-Data-Services-Presentation-Materials.aspx</feedburner:origLink></entry><entry><title>Introducing SO-Aware – Bringing Service Oriented Awareness to the Enterprise</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/hH8QjA4Mzbo/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx" /><id>http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx</id><published>2010-07-28T15:48:46Z</published><updated>2010-07-28T15:48:46Z</updated><content type="html">&lt;p&gt;So, you are a .Net developer, and you gone and built some services for your enterprise applications.&amp;#160; You’ve spent the time building and deploying the services. You might have written them using ASP.Net, or you went all out and built them “the right way” with WCF.&amp;#160; But for some reason, you are not seeing the return on investment.&amp;#160; Sure, your applications are more modular, and reusable, but it takes a bit more work building the services, and other applications don’t seem to be taking advantage of the services you built.&amp;#160; And if they are using your services, now you have to monitor them, and make sure that any changes you make will not break the other applications that use your services.&lt;/p&gt;  &lt;p&gt;There are a couple of things they don’t warn you about when hyping service orientation:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Service Configuration&lt;/strong&gt; – If you are using WCF, a MEX endpoint will only take you so far, and WCF doesn’t make it easy to share configuration across services, easily.&amp;#160; .Net 4.0 is a step in the right direction, but it is still only shares bindings and behaviors within a machine.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Service Discoverability &lt;/strong&gt;– You might have built a great service, but unless other applications (or developers) know about your service, they can’t use it.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Service Monitoring&lt;/strong&gt; – Now that the service is out there, how do you know how often it is being used, and which operations are the most popular.&amp;#160; Microsoft has AppFabric, but it only goes so far, and you are not ready to make the jump to AppFabric.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Service Testing&lt;/strong&gt; – Once your service becomes wildly used, how do you go about making sure that your changes, especially changes to configuration, do not break the clients using your services.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Successful services depend on these 4 aspects of Service Orientation, but they depend on more than just developers.&amp;#160; Architects, other developers, testers, and operation support want visibility into them.&lt;/p&gt;  &lt;p&gt;So, to take full advantage of all the hard work you put into your services you need a repository to store all this info.&amp;#160; And not just any repository, but one that is extremely easy to use and find the information within it.&amp;#160; If you are an old time service developer, you might have heard about this thing call UDDI – Universal Data Discovery and Integration.&amp;#160; It was supposed to be the way the find out and use services, but it has proven to be incredibly complex and hard to use.&amp;#160; So, no one really used it.&amp;#160; A much easier solution would be an REST (Resource State Transfer) based service solution.&amp;#160; REST service tend to be much easier to use, because they are HTTP based, but because there are so many different flavors of REST implementations, discovery (querying) the data within tended to be custom for each implementation.&amp;#160; That is until Microsoft released OpenData (OData) as an open specification.&amp;#160; With OData, it becomes just as easy to query a repository as it is to consume it.&lt;/p&gt;  &lt;p&gt;SO-Aware does this all for you.&amp;#160; You can think of it as 3 separate repositories all exposed using the RESTful OData protocol. It contains:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Service Configuration Repository&lt;/strong&gt;: this is where you store all your metadata about your service.&amp;#160; If you have a WCF service, this is where your WSDL and your bindings and behaviors are stored.&amp;#160; If it is an ODate service, you can put all your OData service documents here.&amp;#160; Or if you are using a custom ASP.Net REST service implementation, you can put the details about your service here.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Service Monitoring Repository&lt;/strong&gt;: If you are using a WCF service, all the usage information about your service is stored here.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Service Testing Repository&lt;/strong&gt;: We all need to make sure to test our services.&amp;#160; This is where you can store the service tests, and the test results.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Sounds great, but what’s in it for you, the developer?&amp;#160; Well, the we all know that WCF configuration isn’t easy.&amp;#160; Sure, Microsoft has made it a little easier with 4.0, but you still need to fight the WCF Configuration Editor to get the Service configuration correct, and once you do that, do you really remember how to update it when you need to?&amp;#160; And how do you tell the&amp;#160; operation folks to maintain it, and deploy the configurations to the service farm?&amp;#160; Well that is where putting the configuration into a repository really pays off.&amp;#160; With SO-Aware, you get a custom Service Host Factory, which will automatically pull the latest service configuration out of the repository for you, and reconfigures the service automatically.&amp;#160; Need to make a change to the config, no more updating the config locally, and then trying to put a change control request into operations, or hoping that operations updates the configuration correctly, and then deploy it to all the servers.&amp;#160; No more trying to keep the compliance documentation in sync with what is deployed on the services.&amp;#160; Instead, those very same changes can be made via the SO-Aware portal, using templates built buy WCF experts, making it so much easier to maintain your WCF configurations.&lt;/p&gt;  &lt;p&gt;And what is even better than configuring the service?&amp;#160; Well that would be configuring all the clients, too.&amp;#160; With SO-Aware, the consumers of your services have it just as easy as you do (even easier, since odds are they know even less about WCF).&amp;#160; They can point their client proxies to the SO-Aware repository and automatically configure the client side WCF configuration.&amp;#160; Now, there is no reason for .Net developers to be afraid of consuming WCF services.&amp;#160; The configuration just happens for them, and they don’t even have to know about how to do it, or how to update it when it changes.&amp;#160; All they need is what version of the service they wish to use, and it gets automatically configured for them.&lt;/p&gt;  &lt;p&gt;Now that you have your services built and deployed (even to the test environment), as a good enterprise developer, you need to test the services, especially the binding and behavior configuration changes.&amp;#160; Well, SO-Aware has you covered there, too.&amp;#160; You can put your service tests into the SO-Aware Service Testing Repository via the Management Portal.&amp;#160; Since the configuration is in the repository, and SO-Aware is written in .Net, you can sure that your Service Testing tool works with whatever bindings and behaviors you used, no matter how customized you got them.&amp;#160; This is where most generic Service Testing tools fall down.&amp;#160; They either only support the simplest of WS-* specifications, or don’t align with the versions implemented in WCF.&amp;#160; With SO-Aware that isn’t the case, so you don’t have to do things like expose unsecured endpoints to work with your service testing tool.&amp;#160; And to make things even easier, to execute your test, since SO-Aware is RESTful, all you have to do is an http get on the url for the test, and it will execute it for you.&amp;#160; So, integrating into whatever testing framework or build management tool is a breeze.&lt;/p&gt;  &lt;p&gt;So, we have configuration and testing covered, now onto Service Monitoring.&amp;#160; Do you have SLAs?&amp;#160; Or maybe you just want to know how often your service is called, and which operations are used the most.&amp;#160; Or maybe you have a rogue request coming in and you want to record the request and response.&amp;#160; Because your services are configured to use the SO-Aware Service Host Factory to get the configuration from the repository, it can also monitor the service and asynchronously publish that information to the SO-Aware Monitoring Repository.&amp;#160; You can then review all this data in the SO-Aware Management Portal. &lt;/p&gt;  &lt;p&gt;Now you are asking yourself, this tool sounds great, but I’m not sure if my company will be willing to purchase something like this.&amp;#160; Maybe you’ve run across other Service Governance applications, and you got a little sticker shock.&amp;#160; Or, maybe you just don’t know how valuable a tool like this would be in your enterprise, so you want to try it out in production for a while first.&amp;#160; It really doesn’t matter, because Tellago Studios has a number of Microsoft MVPs, and we know how valuable the .Net developer community is.&amp;#160; So, we are giving away the Express Edition of SO-Aware.&amp;#160; With the Express Edition, you have a fully functioning product, that can be used in production.&amp;#160; It isn’t a trial version.&amp;#160; The only limit on the Express Edition is that you can only register five services.&amp;#160; That, it is it.&amp;#160; Well, there is one more thing.&amp;#160; If you do use SO-Aware Express Edition in your organization, we would love to get feedback on the product from you.&amp;#160; Your feedback will only serve to make future version a better product.&lt;/p&gt;  &lt;p&gt;To get your free SO-Aware Express Edition, please fill out the &lt;a href="http://www.tellagostudios.com/download"&gt;Express Edition Registration Form&lt;/a&gt; and we will email you an activation key along with details on how to get and install the SO-Aware Express Edition. &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx&amp;amp;;subject=Introducing+SO-Aware+%e2%80%93+Bringing+Service+Oriented+Awareness+to+the+Enterprise" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx&amp;amp;;title=Introducing+SO-Aware+%e2%80%93+Bringing+Service+Oriented+Awareness+to+the+Enterprise" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx&amp;amp;title=Introducing+SO-Aware+%e2%80%93+Bringing+Service+Oriented+Awareness+to+the+Enterprise" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx&amp;amp;;title=Introducing+SO-Aware+%e2%80%93+Bringing+Service+Oriented+Awareness+to+the+Enterprise" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx&amp;amp;;title=Introducing+SO-Aware+%e2%80%93+Bringing+Service+Oriented+Awareness+to+the+Enterprise&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3795" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=hH8QjA4Mzbo:JCvTFXuKiB0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=hH8QjA4Mzbo:JCvTFXuKiB0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/hH8QjA4Mzbo" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><category term=".Net" scheme="http://donxml.com/allthingstechie/archive/tags/.Net/default.aspx" /><category term="XML" scheme="http://donxml.com/allthingstechie/archive/tags/XML/default.aspx" /><category term="Web Services" scheme="http://donxml.com/allthingstechie/archive/tags/Web+Services/default.aspx" /><category term="WCF" scheme="http://donxml.com/allthingstechie/archive/tags/WCF/default.aspx" /><category term="TellagoStudios" scheme="http://donxml.com/allthingstechie/archive/tags/TellagoStudios/default.aspx" /><category term="soaware" scheme="http://donxml.com/allthingstechie/archive/tags/soaware/default.aspx" /><feedburner:origLink>http://donxml.com/allthingstechie/archive/2010/07/28/Introducing-SO_2D00_Aware-_1320_-Bringing-Service-Oriented-Awareness-to-the-Enterprise.aspx</feedburner:origLink></entry><entry><title>WCF Firestarter Online Saturday 6/19/2010</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/LCWALpL3CN4/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx" /><id>http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx</id><published>2010-06-18T14:33:02Z</published><updated>2010-06-18T14:33:02Z</updated><content type="html">&lt;p&gt;This weekend is the &lt;a href="http://blogs.msdn.com/b/peterlau/archive/2010/05/10/nyc-wcf-firestarter-saturday-june-19-2010.aspx"&gt;WCF Firestarter in New York City&lt;/a&gt;.&amp;#160; &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032452076&amp;amp;Culture=en-US"&gt;Registration&lt;/a&gt; to attend in person is &lt;strong&gt;SOLD OUT&lt;/strong&gt; and we’re looking forward to a full house in the Big Apple on Saturday!&amp;#160; You can see the &lt;a href="http://blogs.msdn.com/b/peterlau/archive/2010/05/10/nyc-wcf-firestarter-saturday-june-19-2010.aspx"&gt;event agenda at Peter Laudati’s blog&lt;/a&gt;, as well as at &lt;a href="http://www.msdnevents.com/firestarter"&gt;MSDN Events&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-55-98-metablogapi/4265.WCFFirestarterNYC_5F00_1_5F00_6AD8E286.png"&gt;&lt;img style="display:block;float:none;margin-left:auto;margin-right:auto;" title="WCFFirestarterNYC_1" border="0" alt="WCFFirestarterNYC_1" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-55-98-metablogapi/2112.WCFFirestarterNYC_5F00_1_5F00_thumb_5F00_3487BA77.png" width="737" height="76" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Firestarter events have been quite popular wherever Microsoft has hosted them around the country. Are you NOT in New York this weekend and feeling a little left out?&amp;#160; Don’t worry… we know there are plenty of folks who don’t live in the New York area!&amp;#160; That’s why we’re going to be broadcasting the WCF Firestarter event LIVE on Saturday via webcast!&lt;/p&gt;  &lt;p&gt;Registration is now open for the online simulcast of the &lt;a href="http://go.microsoft.com/?linkid=9734996"&gt;WCF Firestarter&lt;/a&gt;.&amp;#160; You can log in on Saturday morning (9am US east coast time) to watch, listen, and even interact with the presenters!&amp;#160; The event will be broadcasting via Live Meeting (so make sure you &lt;a href="http://office.microsoft.com/en-us/help/HA101733831033.aspx"&gt;install the client&lt;/a&gt; ahead of time), which will feature a live video stream, as well as a Q&amp;amp;A chat tool where you can ask the presenters questions.&amp;#160; You can also &lt;a href="http://search.twitter.com/search?q=%23wcffs"&gt;follow and participate in the conversation on Twitter&lt;/a&gt; using the tag: &lt;a href="http://search.twitter.com/search?q=%23wcffs"&gt;#WCFFS&lt;/a&gt;.&lt;/p&gt;  &lt;h1&gt;&lt;a href="http://go.microsoft.com/?linkid=9734996"&gt;REGISTER HERE to join online from your couch&lt;/a&gt;&lt;/h1&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx&amp;amp;;subject=WCF+Firestarter+Online+Saturday+6%2f19%2f2010" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx&amp;amp;;title=WCF+Firestarter+Online+Saturday+6%2f19%2f2010" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx&amp;amp;title=WCF+Firestarter+Online+Saturday+6%2f19%2f2010" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx&amp;amp;;title=WCF+Firestarter+Online+Saturday+6%2f19%2f2010" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx&amp;amp;;title=WCF+Firestarter+Online+Saturday+6%2f19%2f2010&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3792" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=LCWALpL3CN4:S51Q4D5vU1c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=LCWALpL3CN4:S51Q4D5vU1c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/LCWALpL3CN4" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><feedburner:origLink>http://donxml.com/allthingstechie/archive/2010/06/18/WCF-Firestarter-Online-Saturday-6_2F00_19_2F00_2010.aspx</feedburner:origLink></entry><entry><title>Microsoft PDC Workshop - Developing Microsoft BI Applications - The How and The Why</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/_iS8e9pCgPw/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx" /><id>http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx</id><published>2009-09-20T23:10:10Z</published><updated>2009-09-20T23:10:10Z</updated><content type="html">&lt;p&gt;Bringing Business Intelligence knowledge to the .Net developer crowd has been something that I’ve been trying to do over the last year.&amp;#160; So, when &lt;a href="http://www.brustblog.com/" target="_blank"&gt;Andrew Brust&lt;/a&gt; offered me an opportunity to work with him on a PDC pre-conference workshop with intent of bringing some BI goodness to the PDC crowd, I couldn’t turn it down.&amp;#160; The workshop is called “&lt;a href="http://microsoftpdc.com/Sessions/Developing-Microsoft-BI-Applications-The-How-and-The-Why" target="_blank"&gt;Developing Microsoft BI Applications - The How and The Why&lt;/a&gt;”, and if you have seen my BI For the .Net Guy talk, you’ll have a good idea as to what attendees will be in for, only a lot more stuff covered, and even better (thanks to the help of Andrew).&amp;#160; We start you off assuming you haven’t done BI before (and let’s face it, .Net BI applications are not, yet, common), and bring up to speed with some of the terms and concepts of BI and OLAP, how to migrate from transactional data stores to BI data stores, and then shoe how to access them using .Net.&amp;#160; We then shift gears and show how to use the various BI Presentation Technologies (Reporting Service, Report Builder, Sharepoint, Performance Point, Gemini and some 3rd party tools).&amp;#160; The last 1/3 of the workshop is all about how to strategically integrate BI into your line of business applications (and engage your business owners/clients and show what can and can’t be done with BI).&lt;/p&gt;  &lt;p&gt;If you want to find out some more, &lt;a href="http://channel9.msdn.com/shows/The+Knowledge+Chamber/PDC09-Workshop-Developing-Microsoft-BI-Applications-The-How-and-The-Why/" target="_blank"&gt;Peter Laudati interviewed Andrew and myself about the workshop&lt;/a&gt;.&amp;#160; Actually, Peter jumped in and helped us (Thanks Peter!), when we couldn’t travel out to Redmond to be interviewed by Robert Hess on “The Knowledge Chamber” (that wouldn’t have been so cool, but it wasn’t meant to be :(&amp;#160; ).&lt;/p&gt;  &lt;p&gt;So, if you headed out to the PDC, signup for the workshops and register for &lt;a href="http://microsoftpdc.com/Sessions/Developing-Microsoft-BI-Applications-The-How-and-The-Why" target="_blank"&gt;Developing Microsoft BI Applications - The How and The Why&lt;/a&gt;.&amp;#160; Yes, I know we are in tough economic times, but the PDC is always my favorite Microsoft conference.&amp;#160; You get to find out about the future of the Microsoft development stack, and hangout with the uber-geeks.&amp;#160; I’m staying at the Westin (seems as though the bar in the lobby is always filled with great late night conversations).&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx&amp;amp;;subject=Microsoft+PDC+Workshop+-+Developing+Microsoft+BI+Applications+-+The+How+and+The+Why" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx&amp;amp;;title=Microsoft+PDC+Workshop+-+Developing+Microsoft+BI+Applications+-+The+How+and+The+Why" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx&amp;amp;title=Microsoft+PDC+Workshop+-+Developing+Microsoft+BI+Applications+-+The+How+and+The+Why" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx&amp;amp;;title=Microsoft+PDC+Workshop+-+Developing+Microsoft+BI+Applications+-+The+How+and+The+Why" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx&amp;amp;;title=Microsoft+PDC+Workshop+-+Developing+Microsoft+BI+Applications+-+The+How+and+The+Why&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3722" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=_iS8e9pCgPw:W6xDjcu2CiQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=_iS8e9pCgPw:W6xDjcu2CiQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/_iS8e9pCgPw" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><feedburner:origLink>http://donxml.com/allthingstechie/archive/2009/09/20/Microsoft-PDC-Workshop-_2D00_-Developing-Microsoft-BI-Applications-_2D00_-The-How-and-The-Why.aspx</feedburner:origLink></entry><entry><title>WCF, jQuery and WebForms Slides and Code</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/EwY8paadS2E/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx" /><id>http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx</id><published>2009-04-22T18:47:04Z</published><updated>2009-04-22T18:47:04Z</updated><content type="html">&lt;p&gt;I’m finally getting around to &lt;a href="http://cid-2839b6e34c142198.skydrive.live.com/self.aspx/.Public/Wcf%7C_And%7C_jQuery%7C_SoCal%7C_Version.zip" target="_blank"&gt;publishing my slides and code&lt;/a&gt; for my recent user group talks on using jQuery with WCF in ASP.Net WebForms.&amp;#160; The latest version is from my SoCal .Net Architecture talk.&amp;#160; You can also see my MessageBody WCF style in this code.&amp;#160; Eventually I’ll publish the sample app as an open source project, since it has a couple of different uses.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx&amp;amp;;subject=WCF%2c+jQuery+and+WebForms+Slides+and+Code" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx&amp;amp;;title=WCF%2c+jQuery+and+WebForms+Slides+and+Code" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx&amp;amp;title=WCF%2c+jQuery+and+WebForms+Slides+and+Code" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx&amp;amp;;title=WCF%2c+jQuery+and+WebForms+Slides+and+Code" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx&amp;amp;;title=WCF%2c+jQuery+and+WebForms+Slides+and+Code&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3698" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=EwY8paadS2E:12Dxa47bbpU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=EwY8paadS2E:12Dxa47bbpU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/EwY8paadS2E" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><category term=".Net Communities" scheme="http://donxml.com/allthingstechie/archive/tags/.Net+Communities/default.aspx" /><category term="WCF" scheme="http://donxml.com/allthingstechie/archive/tags/WCF/default.aspx" /><category term="WCFMsssageBody" scheme="http://donxml.com/allthingstechie/archive/tags/WCFMsssageBody/default.aspx" /><category term="jQuery" scheme="http://donxml.com/allthingstechie/archive/tags/jQuery/default.aspx" /><feedburner:origLink>http://donxml.com/allthingstechie/archive/2009/04/22/WCF_2C00_-jQuery-and-WebForms-Slides-and-Code.aspx</feedburner:origLink></entry><entry><title>The Tale of WCF, MessageContract, and JSON</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/GjwXxMarptc/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx" /><id>http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx</id><published>2009-04-10T14:51:00Z</published><updated>2009-04-10T14:51:00Z</updated><content type="html">&lt;p&gt;Yes, I know it had been a long time since I&amp;rsquo;ve blogged, and even longer since I&amp;rsquo;ve blogged any decent technical content.&amp;nbsp; But I have a feeling that the drought is over, and a series of tech content is on the way ;)&lt;/p&gt;&lt;p&gt;This is the tale of how I spent a good part of a week trying to build something &amp;ldquo;the right way&amp;rdquo; only to be reminded that &amp;ldquo;the right way&amp;rdquo; is determined by your context (which way you want to look at something).&amp;nbsp; You see, I&amp;rsquo;m an old school web service developer, and with that, teaching developers that the way to build services is to make sure not to forget that you are sending messages, not executing remote procedure calls.&amp;nbsp; Way back when, people use to argue, do you build services code first, or contract first, and I came to the conclusion that it really didn&amp;rsquo;t matter as long as you designed them &lt;a href="http://donxml.com/allthingstechie/archive/2006/03/18/2605.aspx" target="_blank"&gt;Message First&lt;/a&gt;.&amp;nbsp; But I must not have done a good job spreading the word, because the overwhelming majority of Service code out there seems to be written in a RPC style.&amp;nbsp; It still tries to encourage the developer to write the same style code, be it a call to a function within the same App Domain, or to Service in another App Domain (or even another machine running a totally different framework).&lt;/p&gt;&lt;p&gt;So here&amp;rsquo;s how this starts.&amp;nbsp; I decide that I want more &amp;ldquo;modern&amp;rdquo; look and feel to administer ASP.Net Membership, and to do that, I want to use jQuery and WCF.&amp;nbsp; Rick Strahl has done some excellent work getting &lt;a href="http://www.west-wind.com/WebLog/posts/400990.aspx" target="_blank"&gt;jQuery and WCF JSON to work together&lt;/a&gt;, but like so many other examples out there, his examples use WCF&amp;rsquo;s DataContracts, and don&amp;rsquo;t implement a more explicit messaging model.&amp;nbsp; I eventually want to open source this, so I give it the project name w00ton.&amp;nbsp; I start to build out a WCF UserAdministrationService, write some integration tests (using NUnit, .Net client and host it in a Web Project), and everything is cool.&amp;nbsp; I have explicit Message, Data, and Fault contracts, in a Service Factory style (except I put them all in one project, instead of separate projects like SF does).&amp;nbsp; So here&amp;rsquo;s what the code looks like:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Service Interface&lt;/strong&gt;&lt;/p&gt;&lt;pre style="background-color:#fbfbfb;min-height:40px;width:600px;overflow:auto;border:#cecece 1px solid;padding:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; w00ton.MembershipAdministration.ServiceContracts
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;{
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    [ServiceContract(Namespace = &amp;quot;&lt;span style="color:#8b0000;"&gt;urn:w00ton.MembershipAdministration.ServiceContracts&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    Name = &amp;quot;&lt;span style="color:#8b0000;"&gt;UserAdministrationService&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    SessionMode = SessionMode.NotAllowed,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    ProtectionLevel = ProtectionLevel.None)]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IUserAdministrationService
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        [FaultContract(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Faults.DuplicateEmailAddressFault))]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        [FaultContract(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Faults.DuplicateUserNameFault))]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        [FaultContract(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Faults.InvalidEmailAddressFault))]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        [FaultContract(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Faults.InvalidUserNameFault))]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        [FaultContract(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(Faults.InvalidPasswordFault))]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        [OperationContract(IsTerminating = &lt;span style="color:#0000ff;"&gt;false&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:10px;"&gt;            IsInitiating = &lt;span style="color:#0000ff;"&gt;true&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:10px;"&gt;            IsOneWay = &lt;span style="color:#0000ff;"&gt;false&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:10px;"&gt;            AsyncPattern = &lt;span style="color:#0000ff;"&gt;false&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:10px;"&gt;            Action = &amp;quot;&lt;span style="color:#8b0000;"&gt;CreateUser&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;            ProtectionLevel = ProtectionLevel.None)]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        Messages.CreateUserResponse CreateUser(Messages.CreateUserRequest request);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        [OperationContract(IsTerminating = &lt;span style="color:#0000ff;"&gt;false&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:10px;"&gt;            IsInitiating = &lt;span style="color:#0000ff;"&gt;true&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:10px;"&gt;            IsOneWay = &lt;span style="color:#0000ff;"&gt;false&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:10px;"&gt;            AsyncPattern = &lt;span style="color:#0000ff;"&gt;false&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:10px;"&gt;            Action = &amp;quot;&lt;span style="color:#8b0000;"&gt;GetAllUsersByPage&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;            ProtectionLevel = ProtectionLevel.None)]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        Messages.GetAllUsersByPageResponse GetAllUsersByPage(Messages.GetAllUsersByPageRequest request);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Message Contract&lt;/strong&gt;&lt;/p&gt;&lt;pre style="background-color:#fbfbfb;min-height:40px;width:600px;overflow:auto;border:#cecece 1px solid;padding:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; w00ton.MembershipAdministration.ServiceContracts.MessageContracts
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;{
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    [MessageContract(IsWrapped = &lt;span style="color:#0000ff;"&gt;false&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:10px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; GetAllUsersByPageRequest
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        [MessageBodyMember(Name = &amp;quot;&lt;span style="color:#8b0000;"&gt;Body&lt;/span&gt;&amp;quot;)]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; GetAllUsersByPageRequestBody Body { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&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:10px;"&gt;    }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Data Contract&lt;/strong&gt;&lt;/p&gt;&lt;pre style="background-color:#fbfbfb;min-height:40px;width:600px;overflow:auto;border:#cecece 1px solid;padding:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; w00ton.MembershipAdministration.ServiceContracts.DataContracts
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;{
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    [DataContract(Namespace = &amp;quot;&lt;span style="color:#8b0000;"&gt;urn:w00ton.MembershipAdministration.DataContracts&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    Name = &amp;quot;&lt;span style="color:#8b0000;"&gt;GetAllUsersByPageRequestBody&lt;/span&gt;&amp;quot;)]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; GetAllUsersByPageRequestBody : IExtensibleDataObject
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        [DataMember(Name = &amp;quot;&lt;span style="color:#8b0000;"&gt;PageIndex&lt;/span&gt;&amp;quot;, IsRequired = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, Order = 0)]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; PageIndex { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&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:10px;"&gt;        [DataMember(Name = &amp;quot;&lt;span style="color:#8b0000;"&gt;PageSize&lt;/span&gt;&amp;quot;, IsRequired = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;, Order = 1)]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; PageSize { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&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:10px;"&gt;&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        #region Implementation of IExtensibleDataObject
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ExtensionDataObject ExtensionData
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;            &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&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:10px;"&gt;        }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        #endregion
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;The code style I&amp;rsquo;m using here is something I call the MessageBody style.&amp;nbsp; I&amp;rsquo;ll have to write up that style, and why I use it in another blog post.&amp;nbsp; It&amp;rsquo;s just something I&amp;rsquo;ve developed over time that seems to work for me.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;.Net Client Test&lt;/strong&gt;&lt;/p&gt;&lt;pre style="background-color:#fbfbfb;min-height:40px;width:600px;overflow:auto;border:#cecece 1px solid;padding:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;[TestFixture]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; GetUsersTestFixture
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;{
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    [Test]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Must_Be_Able_To_Get_Users()
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (UserAdministrationServiceClient Client = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; UserAdministrationServiceClient())
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;            var Response =
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                Client.GetAllUsersByPage(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; GetAllUsersByPageRequest
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                    Body = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Data.GetAllUsersByPageRequestBody
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                    {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                        PageIndex = 0,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                        PageSize = 10
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                    }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                });
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;            Assert.That(Response.Body.MembershipUsers != &lt;span style="color:#0000ff;"&gt;null&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:10px;"&gt;        }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;So, the test works and the WCF service seems to be fine, so I decide to try to call it using ASP.Net AJAX and the code gen&amp;rsquo;d Proxy class:&lt;/p&gt;&lt;pre style="background-color:#fbfbfb;min-height:40px;width:600px;overflow:auto;border:#cecece 1px solid;padding:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; GetAllUsersByPage(pageIndex, pageSize)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;{
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; tn = { &amp;quot;&lt;span style="color:#8b0000;"&gt;PageIndex&lt;/span&gt;&amp;quot;: pageIndex, &amp;quot;&lt;span style="color:#8b0000;"&gt;PageSize&lt;/span&gt;&amp;quot;: pageSize };
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    w00ton.MembershipAdministration.ServiceContracts.UserAdministrationService.GetAllUsersByPage(tn,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(GetAllUsersByPageResponse)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;            &lt;span style="color:#0000ff;"&gt;alert&lt;/span&gt;(GetAllUsersByPageResponse);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        }, onPageError
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    );
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; onPageError(error)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        &lt;span style="color:#0000ff;"&gt;alert&lt;/span&gt;(&amp;quot;&lt;span style="color:#8b0000;"&gt;An error occurred:\r\n\r\n&lt;/span&gt;&amp;quot; + error.Message);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;But when I test that code, it throws an error, &amp;ldquo;An Error Occured: Undefined&amp;rdquo;.&amp;nbsp; So I check out what is being sent via Fiddler.&lt;/p&gt;&lt;pre style="background-color:#fbfbfb;min-height:40px;width:600px;overflow:auto;border:#cecece 1px solid;padding:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;{&amp;quot;&lt;span style="color:#8b0000;"&gt;Body&lt;/span&gt;&amp;quot;:{&amp;quot;&lt;span style="color:#8b0000;"&gt;PageIndex&lt;/span&gt;&amp;quot;:0,&amp;quot;&lt;span style="color:#8b0000;"&gt;PageSize&lt;/span&gt;&amp;quot;:5}}&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Hmm, seems like the ASP.Net AJAX proxy automagically, adds the wrapping Body property.&amp;nbsp; I didn&amp;rsquo;t put that in my JSON, ASP.Net AJAX did, and here is the complete error message:&lt;/p&gt;&lt;pre style="background-color:#fbfbfb;min-height:40px;width:600px;overflow:auto;border:#cecece 1px solid;padding:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;{&amp;quot;&lt;span style="color:#8b0000;"&gt;ExceptionDetail&lt;/span&gt;&amp;quot;:{&amp;quot;&lt;span style="color:#8b0000;"&gt;HelpLink&lt;/span&gt;&amp;quot;:&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;,&amp;quot;&lt;span style="color:#8b0000;"&gt;InnerException&lt;/span&gt;&amp;quot;:
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;{&amp;quot;&lt;span style="color:#8b0000;"&gt;HelpLink&lt;/span&gt;&amp;quot;:&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;,&amp;quot;&lt;span style="color:#8b0000;"&gt;InnerException&lt;/span&gt;&amp;quot;:&lt;span style="color:#0000ff;"&gt;null&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:10px;"&gt;&amp;quot;&lt;span style="color:#8b0000;"&gt;Message&lt;/span&gt;&amp;quot;:&amp;quot;&lt;span style="color:#8b0000;"&gt;The data contract type 
&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:10px;"&gt;&amp;#39;w00ton.MembershipAdministration.ServiceContracts.DataContracts.GetAllUsersByPageRequestBody&amp;#39;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt; cannot be deserialized because the required data members &amp;#39;PageIndex, PageSize&amp;#39; 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;were not found.&amp;quot;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;So, it seems as though the JSON Serializer isn&amp;rsquo;t expecting the wrapping Body property, and chokes because it can&amp;rsquo;t find the 2 properties in the GetAllUsersByPageRequestBody DataContract.&amp;nbsp;&amp;nbsp; But I didn&amp;rsquo;t add the wrapping Body property, the ASP.Net AJAX code gen&amp;rsquo;d that in the proxy.&amp;nbsp; So to prove it, I decide to call Sys.Net.WebServiceProxy directly, instead of going thru the generated version:&lt;/p&gt;&lt;pre style="background-color:#fbfbfb;min-height:40px;width:600px;overflow:auto;border:#cecece 1px solid;padding:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; GetAllUsersByPageDirect(pageIndex, pageSize)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;{
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; tn = { &amp;quot;&lt;span style="color:#8b0000;"&gt;PageIndex&lt;/span&gt;&amp;quot;: pageIndex, &amp;quot;&lt;span style="color:#8b0000;"&gt;PageSize&lt;/span&gt;&amp;quot;: pageSize };
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    Sys.Net.WebServiceProxy.invoke(&amp;#39;../UserAdmin.svc&amp;#39;, &amp;#39;GetAllUsersByPage&amp;#39;, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;, tn,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(GetAllUsersByPageResponse)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;            &lt;span style="color:#0000ff;"&gt;alert&lt;/span&gt;(GetAllUsersByPageResponse);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;        }, onPageError, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, 1000
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    );
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;} &lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;And sure enough, it works!&lt;/p&gt;&lt;p&gt;So, I don&amp;rsquo;t know if I&amp;rsquo;m doing something wrong, because I&amp;rsquo;d expect that the MessageContract style would work with ASP.Net AJAX and JSON.&amp;nbsp; I&amp;rsquo;d at least expect that someone else has bumped into this issue, but I can&amp;rsquo;t seem to find a blog entry or a question on a public newsgroup or discussion list.&amp;nbsp; All I know is that I got it working with ASP.Net AJAX by skipping the code generated proxy, and that if you want to use jQuery&amp;rsquo;s AJAX&amp;nbsp; the code is just about the same as the direct call in ASP.Net AJAX (using Rick&amp;rsquo;s ServiceProxy).&lt;/p&gt;&lt;pre style="background-color:#fbfbfb;min-height:40px;width:600px;overflow:auto;border:#cecece 1px solid;padding:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; GetAllUsersByPage(pageIndex, pageSize) {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;    UserAdminProxy.invoke(&amp;quot;&lt;span style="color:#8b0000;"&gt;GetAllUsersByPage&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                    {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                        PageIndex: pageIndex,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                        PageSize: pageSize     
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                    }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                    ,
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                    &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(FindUsersByNameResponse) {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                        &lt;span style="color:#008000;"&gt;// your code here&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:10px;"&gt;                    },
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;                    onPageError);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,'Courier New',courier,monospace;font-size:10px;"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Just to prove that I wasn&amp;rsquo;t going insane, I rewrote the code using just DataContracts and no MessageContracts (just using the GetAllUsersByPageRequestBody) and sure enough, you do need to wrap the properties in GetAllUsersByPageRequestBody with a property of the same name as the parameter name used in the ServiceContract (which makes total sense, because that is the way every AJAX and WCF sample is written).&amp;nbsp; &lt;/p&gt;&lt;p&gt;The key to getting this to work is knowing that when using MessageContracts the WCF JSON Serializer, it doesn&amp;rsquo;t behave the same way as if you use just DataContracts.&amp;nbsp; It skips the Message and the MessageBody in both the request and the response (so do add them in or expect them in a response).&lt;/p&gt;&lt;p&gt;This sample code can be &lt;a href="http://cid-2839b6e34c142198.skydrive.live.com/self.aspx/.Public/Wcf%7C_And%7C_jQuery%7C_NJDotNetVersion.zip" target="_blank"&gt;found here&lt;/a&gt; along with a presentation on using WCF &amp;amp; jQuery with WebForms.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx&amp;amp;;subject=The+Tale+of+WCF%2c+MessageContract%2c+and+JSON" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx&amp;amp;;title=The+Tale+of+WCF%2c+MessageContract%2c+and+JSON" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx&amp;amp;title=The+Tale+of+WCF%2c+MessageContract%2c+and+JSON" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx&amp;amp;;title=The+Tale+of+WCF%2c+MessageContract%2c+and+JSON" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx&amp;amp;;title=The+Tale+of+WCF%2c+MessageContract%2c+and+JSON&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3694" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=GjwXxMarptc:ioHF-qdF9QE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=GjwXxMarptc:ioHF-qdF9QE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/GjwXxMarptc" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><feedburner:origLink>http://donxml.com/allthingstechie/archive/2009/04/10/The-Tale-of-WCF_2C00_-MessageContract_2C00_-and-JSON.aspx</feedburner:origLink></entry><entry><title>PDC 2008 Session Calendar Synchronization Tip</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/mQysWmundzo/PDC-2008-Session-Calendar-Synchronization-Tip.aspx" /><id>http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx</id><published>2008-10-24T13:35:55Z</published><updated>2008-10-24T13:35:55Z</updated><content type="html">&lt;p&gt;If you are attending &lt;a href="http://www.microsoftpdc.com/" target="_blank"&gt;PDC 2008&lt;/a&gt;, you may have noticed that on the &lt;a href="https://sessions.microsoftpdc.com/timeline.aspx" target="_blank"&gt;Sessions page&lt;/a&gt;, if you log in, you can chose the sessions you are interested in attending, along with a link so you can add it to your favorite calendar program.&amp;#160; The only problem is that one of my favorite calendar programs (Google Calendar) will throw an parsing error if you try to import it.&amp;#160; But, Outlook 2007 doesn’t seem to have a problem with it.&amp;#160; So I have a solution, just use &lt;a href="http://www.syncmycal.com/" target="_blank"&gt;SyncMyCal&lt;/a&gt;.&amp;#160; Scott Hanselman turned me onto this inexpensive tool, and I’ve got to say, it would be hard to live without it.&amp;#160; One of my problems with the way that Outlook subscribes to calendar feeds is that it create a brand new calendar in Outlook, and there isn’t an easy way to merge them with you main calendar.&amp;#160; So, what I do use SyncMyCal to handle the merges (plus I grant my family access to my Google Calendar, so they know what I’m up to).&lt;/p&gt;  &lt;p&gt;So here is the setup, Outlook imports my PDC Session Calendar.&amp;#160; I have SyncMyCal setup to push that calendar to my main Google Calendar.&amp;#160; Then I have SyncMyCal merge my main Google Calendar with my main Outlook Calendar.&amp;#160; If I wanted to, I could have sync’d the Outlook PDC Calendar to a new Google PDC Calendar, and then pull then merge that with my main Outlook Calendar, setting the category and even labeling them with a color, but I decided that was a little much.&lt;/p&gt;  &lt;p&gt;Once that is done, then I can sync my Outlook calendar with my phone, and I’m all set.&amp;#160; Got to love technology ;)&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx&amp;amp;;subject=PDC+2008+Session+Calendar+Synchronization+Tip" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx&amp;amp;;title=PDC+2008+Session+Calendar+Synchronization+Tip" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx&amp;amp;title=PDC+2008+Session+Calendar+Synchronization+Tip" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx&amp;amp;;title=PDC+2008+Session+Calendar+Synchronization+Tip" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx&amp;amp;;title=PDC+2008+Session+Calendar+Synchronization+Tip&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3663" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=mQysWmundzo:iZiiRbEHYg4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=mQysWmundzo:iZiiRbEHYg4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/mQysWmundzo" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><category term="PDC" scheme="http://donxml.com/allthingstechie/archive/tags/PDC/default.aspx" /><category term="Tech Ramblings" scheme="http://donxml.com/allthingstechie/archive/tags/Tech+Ramblings/default.aspx" /><feedburner:origLink>http://donxml.com/allthingstechie/archive/2008/10/24/PDC-2008-Session-Calendar-Synchronization-Tip.aspx</feedburner:origLink></entry><entry><title>Just Say No to Console App Demos</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/I2_ANDSNnUs/Just-Say-No-to-Console-App-Demos.aspx" /><id>http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx</id><published>2008-10-24T12:51:15Z</published><updated>2008-10-24T12:51:15Z</updated><content type="html">&lt;p&gt;It is a major pet peeve of mine; presenters that use Console Application Projects to demo some non-UI code.&amp;#160; That’s so 1990’s.&amp;#160; So, what should a presenter use?&amp;#160; Well, Test Projects, of course!&amp;#160; It is something that I think should be added to Scott Hanselman’s &lt;a href="http://www.hanselman.com/blog/11TopTipsForASuccessfulTechnicalPresentation.aspx" target="_blank"&gt;11 Top Tips for a Successful Technical Presentation&lt;/a&gt; (it sort of fits under Tip # 8).&amp;#160; At one time, when I would approach a known speaker about using Test Projects, the typical answer was that the majority of .Net developers don’t install NUnit, and MSTest is only available in Team System, so they would be using a tool that the masses don’t use.&amp;#160; My reply was that more developers should be using Test Projects, and we as presenters could influence them if we would just use them in or demos.&amp;#160;&amp;#160; Well, now that MSTest is now available in everything but the Express versions, that excuse is shot.&amp;#160; So, it comes down to old habits, and those are hard to break without a little incentive.&amp;#160; To provide that incentive, what I’d suggest that you do is the next time you are in a session where the presenter uses a console project to demo some code, when you fill out the eval form, leave a comment that would would prefer that they used a Test Project instead of a console application.&amp;#160; As a tech presenter, I really appreciate constructive comments from attendees, and I’m sure that if the presenter got enough requests to use Test Projects, they will make sure to get comfortable using them instead of console apps in their demos.&lt;/p&gt;  &lt;p&gt;I’ll be at PDC 2008, and I’ll be looking out for presentations that use console app demos, making sure to leave a comment in the eval.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx&amp;amp;;subject=Just+Say+No+to+Console+App+Demos" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx&amp;amp;;title=Just+Say+No+to+Console+App+Demos" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx&amp;amp;title=Just+Say+No+to+Console+App+Demos" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx&amp;amp;;title=Just+Say+No+to+Console+App+Demos" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx&amp;amp;;title=Just+Say+No+to+Console+App+Demos&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3661" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=I2_ANDSNnUs:dQy7JT5MDMI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=I2_ANDSNnUs:dQy7JT5MDMI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/I2_ANDSNnUs" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><category term=".Net" scheme="http://donxml.com/allthingstechie/archive/tags/.Net/default.aspx" /><category term="PDC" scheme="http://donxml.com/allthingstechie/archive/tags/PDC/default.aspx" /><feedburner:origLink>http://donxml.com/allthingstechie/archive/2008/10/24/Just-Say-No-to-Console-App-Demos.aspx</feedburner:origLink></entry><entry><title>Static Code Analysis and Custom FxCop Rules for Enterprise ASP.Net Development</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/3vMEE8VWUqU/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx" /><id>http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx</id><published>2008-06-19T00:40:31Z</published><updated>2008-06-19T00:40:31Z</updated><content type="html">&lt;p&gt;Over the last couple months I've been doing a bit of work with &lt;a href="http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx" target="_blank"&gt;FxCop&lt;/a&gt; and Static Code Analysis.&amp;#160; If you remember playing with FxCop back in the day, it was a cool tool to check for possible design, localization, performance, and security issues with your .Net code.&amp;#160; But, for most of us, that's where things stopped, playing with a cool tool and then forgetting about it.&amp;#160; Sure, Microsoft built it into VS 2005 as Visual Studio Code Analysis, but still most developers forget about it, and never turn it on.&amp;#160; Well, I've been on a Continuous Integration kick for over a year now (with &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET" target="_blank"&gt;CruiseControl.Net&lt;/a&gt; or TFS 2008, depending on the client), and it is easy to an things like FxCop and &lt;a href="http://www.ndepend.com/" target="_blank"&gt;NDepend&lt;/a&gt; to your build process.&amp;#160; Yes, there are a lot of pre-built rules out there, but for most of us, some of the rules are extremely valuable, but some are just annoying, and there are still a lot of personal best practices that you have developed over the years that don't have rules.&amp;#160; &lt;/p&gt;  &lt;p&gt;Well, that is where writing your own FxCop rules can come in handy.&amp;#160; It isn't the easiest thing to work with, since there is no official documentation of Microsoft.Cci (which is the heart and soul of FxCop).&amp;#160; But, Jason Kresowaty has created some &lt;a href="http://www.binarycoder.net/fxcop/html/index.html" target="_blank"&gt;helpful documentation&lt;/a&gt; (although not complete by any means), and he also created the extremely helpful &lt;a href="http://www.binarycoder.net/fxcop/" target="_blank"&gt;Introspector tool&lt;/a&gt; to go along with spelunking assemblies using the introspection object model.&amp;#160; After writing a couple of my own custom rules, I figured I should poke around and see if anyone has released some FxCop rule libraries, checking out CodePlex and SourceForge, but I didn't find any.&amp;#160; I did find one blog post by Richard Banks on a great &lt;a href="http://richardsbraindump.blogspot.com/2008/02/how-to-create-wcf-custom-code-analysis.html" target="_blank"&gt;WCF FxCop rule example, EnsureFaultContractsAreDeclared&lt;/a&gt;, and sure, the Patterns &amp;amp; Practices team releases custom rules as part of their Software Factories, but I thought that there would be more out there.&amp;#160; It seems like something that would be perfect for groups like ASP Insiders, Sharepoint MVPs, Connected Systems MVPs, etc. and they could band together and come up with some good rules to go along with all the best practices we seem to come up with.&lt;/p&gt;  &lt;p&gt;So, I'll try to start this thing rolling, and try to put together a bunch of rules around best practices for building Enterprise-ready ASP.Net applications.&amp;#160; But I can't do it alone, so I'm asking the community to help me out, and either leave their own ASP.Net rules as comments, or post them up on their blog (if you have one, and link back to this post).&amp;#160; I'll document them, and if we get enough traction, I'll start up a CodePlex project where we can coordinate this.&amp;#160; Here's an example:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Rule&lt;/strong&gt;: EnsureAspSessionVariablesAreSerializable       &lt;br /&gt;&lt;strong&gt;Name&lt;/strong&gt; - Asp.Net Session variables must be marked serializable      &lt;br /&gt;&lt;strong&gt;Description&lt;/strong&gt;: All session variables must be marked serializable if you will be using a SessionStateMode other than inproc      &lt;br /&gt;&lt;strong&gt;Resolution&lt;/strong&gt;: Mark the variable to be stored in session with the Serializable attribute&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I'm sure others have similar rules, that they use implicitly, and I'd like to gather them up, put them into rule libraries and then publish them on CodePlex.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx&amp;amp;;subject=Static+Code+Analysis+and+Custom+FxCop+Rules+for+Enterprise+ASP.Net+Development" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx&amp;amp;;title=Static+Code+Analysis+and+Custom+FxCop+Rules+for+Enterprise+ASP.Net+Development" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx&amp;amp;title=Static+Code+Analysis+and+Custom+FxCop+Rules+for+Enterprise+ASP.Net+Development" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx&amp;amp;;title=Static+Code+Analysis+and+Custom+FxCop+Rules+for+Enterprise+ASP.Net+Development" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx&amp;amp;;title=Static+Code+Analysis+and+Custom+FxCop+Rules+for+Enterprise+ASP.Net+Development&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3616" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=3vMEE8VWUqU:tf1Knqixuco:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=3vMEE8VWUqU:tf1Knqixuco:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/3vMEE8VWUqU" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><category term=".Net" scheme="http://donxml.com/allthingstechie/archive/tags/.Net/default.aspx" /><category term="Open Source" scheme="http://donxml.com/allthingstechie/archive/tags/Open+Source/default.aspx" /><feedburner:origLink>http://donxml.com/allthingstechie/archive/2008/06/18/Static-Code-Analysis-and-Custom-FxCop-Rules-for-Enterprise-ASP.Net-Development.aspx</feedburner:origLink></entry><entry><title>Cache Or Session State - Similar But Different</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/8Q8f_gZxTlc/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx" /><id>http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx</id><published>2008-06-06T21:32:52Z</published><updated>2008-06-06T21:32:52Z</updated><content type="html">&lt;p&gt;This week at TechEd Microsoft announce the &lt;a href="http://msdn.microsoft.com/en-us/data/cc655792.aspx" target="_blank"&gt;Velocity project&lt;/a&gt;, a distributed in-memory object caching system, which got folks like &lt;a href="http://www.25hoursaday.com/weblog/2008/06/06/VelocityADistributedInMemoryCacheFromMicrosoft.aspx" target="_blank"&gt;Dare&lt;/a&gt; and &lt;a href="http://simpable.com/code/velocity/" target="_blank"&gt;ScottW&lt;/a&gt; talking about using a distributed caching solution for boosting the performance of web sites. That got me thinking more about the differences between Cache and Session State.&amp;#160; Although they seem to be the same, and often caching solutions are used for storing session data, I'm not a big fan of putting session in a cache solution (and I really hate putting session in a relational database, since there is nothing relational about the data).&amp;#160; But before I describe my preferred solution, let's define the terms:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Cache&lt;/strong&gt; (via &lt;a href="http://en.wikipedia.org/wiki/Cache" target="_blank"&gt;Wikipedia&lt;/a&gt;) - a cache is a collection of data duplicating original values stored elsewhere or computed earlier, where the original data is expensive to fetch (owing to longer access time) or to compute, compared to the cost of reading the cache. In other words, a cache is a temporary storage area where frequently accessed data can be stored for rapid access. Once the data is stored in the cache, future use can be made by accessing the cached copy rather than re-fetching or recomputing the original data, so that the average access time is shorter. Cache, therefore, helps expedite data access that the CPU would otherwise need to fetch from main memory.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Session&lt;/strong&gt; (via &lt;a href="http://en.wikipedia.org/wiki/Session_%28computer_science%29" target="_blank"&gt;Wikipedia&lt;/a&gt;) - a session is a semi-permanent interactive information exchange, also known as a dialogue, a conversation or a meeting, between two or more communicating devices, or between a computer and user (see Login session). A session is set up or established at a certain point in time, and torn down at a later point in time. An established communication session may involve more than one message in each direction. A session is typically, but not always, stateful, meaning that at least one of the communicating parts need to save information about the session history in order to be able to communicate, as opposed to stateless communication, where the communication consists of independent requests with responses.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;HTTP session token&lt;/strong&gt; (via &lt;a href="http://en.wikipedia.org/wiki/Session_%28computer_science%29" target="_blank"&gt;Wikipedia&lt;/a&gt;) - A session token is a unique identifier (usually in the form of a hash generated by a hash function) that is generated and sent from a server to a client to identify the current interaction session. The client usually stores and sends the token as an HTTP cookie and/or sends it as a parameter in GET or POST queries. The reason to use session tokens is that the client only has to handle the identifier (a small piece of data which is otherwise meaningless and thus presents no security risk) - all session data is stored on the server (usually in a database, to which the client does not have direct access) linked to that identifier. Examples of the names that some programming languages use when naming their cookie include JSESSIONID (JSP), PHPSESSID (PHP), and ASPSESSIONID (Microsoft ASP). &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As the Wikipedia article mentioned, session data is usually stored in a database, which IMHO is the wrong thing to do.&amp;#160; So, you may think that I'd prefer to use a Distributed Cache, and Velocity does just that and lists it as one of its key features:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Provides tight integration with ASP.NET to be able to cache ASP.NET session data in the cache without having to write it to source databases. It can also be used as a cache for application data to be able to cache application data across the entire Web farm.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But, IMHO, using a caching engine for session, although better than a database, is still the wrong implementation for the problem.&amp;#160; I've mentioned before (but never in my blog), that it seems as though a message solution is a much better implementation for session data.&amp;#160; You see, what you are really doing when you writing some data out to session in a stateless system is sending a message to a future version of yourself.&amp;#160; Images of Star Trek: The Next Generation episode &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/USS_Bozeman" target="_blank"&gt;Cause and Effect&lt;/a&gt;&amp;quot; come to mind.&amp;#160; In that episode, the Enterprise is stuck in a time loop, where it keeps get destroyed, until Data sends a message to a future version of himself, and breaks the loop.&amp;#160; I learned the trick of using Message Queues for Session Data back in my mainframe days, and I've found that if something scaled for the mainframe, using the same techniques on other platforms is usually the best way.&amp;#160; Back on the Mainframe, CICS is the transaction service used in online systems, and works in a stateless manner, very similar to the web.&amp;#160; To send data between each instance of a screen, one of the primary techniques is to use a Temp Storage Queue, and a queue is created for each session, based on the session id.&lt;/p&gt;  &lt;p&gt;I've always wanted to try to do the same thing with ASP.Net, using MSMQ as the Message Queue, but until MSMQ 4.0 (released with Vista and Win2k8 Server), it really wasn't feasible.&amp;#160; Creating a new queue for each ASP.Net session wasn't a simple and efficient thing to do, so I never tried it.&amp;#160; With MSMQ 4.0, they have added a subqueues, which are implicitly created local queues that are logical partitions of a physical queue.&amp;#160; This way, I can create one or more message queues for an ASP.Net application, and easily have them &amp;quot;indexed&amp;quot; by a sessionid.&amp;#160; The downside of using MSMQ is that very few companies have a network admin staff that know how to support MSMQ.&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;I always wondered why the ASP.Net team never released a MSMQ session provider, so I'm going to have a go at it and see what sort of perf gains I can get over using SQL Server Mode, or maybe even Out-of-process Mode.&lt;/p&gt;  &lt;p&gt;The first issue I've run across is that System.Messaging wasn't updated in .Net 3.5 to take advantage of MSMQ 4.0.&amp;#160; Reading from a subqueue is the same as reading from a regular queue, but you can't write to a subqueue using the System.Messaging namespace.&amp;#160; So, I'll have to implement that myself, and I'll publish the code.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx&amp;amp;;subject=Cache+Or+Session+State+-+Similar+But+Different" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx&amp;amp;;title=Cache+Or+Session+State+-+Similar+But+Different" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx&amp;amp;title=Cache+Or+Session+State+-+Similar+But+Different" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx&amp;amp;;title=Cache+Or+Session+State+-+Similar+But+Different" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx&amp;amp;;title=Cache+Or+Session+State+-+Similar+But+Different&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3600" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=8Q8f_gZxTlc:bJQF7AIx4hw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=8Q8f_gZxTlc:bJQF7AIx4hw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/8Q8f_gZxTlc" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><feedburner:origLink>http://donxml.com/allthingstechie/archive/2008/06/06/Cache-Or-Session-State-_2D00_-Similar-But-Different.aspx</feedburner:origLink></entry><entry><title>New York City IT Architect Regional Conference</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/RcvNWyBEkAY/New-York-City-IT-Architect-Regional-Conference.aspx" /><id>http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx</id><published>2008-04-27T00:49:56Z</published><updated>2008-04-27T00:49:56Z</updated><content type="html">&lt;p&gt;The NYC IASA chapter is holding an &lt;a href="http://www.iasahome.org/web/itarc/nyc" target="_blank"&gt;IT Architect Regional Conference&lt;/a&gt; in New York City on May 22-23 at the NYC Microsoft office.&amp;#160; The speaker list is quite impressive, and has a couple local Microsoft MVPs among the list (Mark Pollack, Ambrose Little and Steve Forte), along with local Microsoft Architect Evangelist, Bill Zack and Keith Pijanowski.&amp;#160; There is a $100 discount if you &lt;a href="http://www.iasahome.org/web/itarc/nyc/registration" target="_blank"&gt;register by April 30th&lt;/a&gt;.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx&amp;amp;;subject=New+York+City+IT+Architect+Regional+Conference" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx&amp;amp;;title=New+York+City+IT+Architect+Regional+Conference" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx&amp;amp;title=New+York+City+IT+Architect+Regional+Conference" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx&amp;amp;;title=New+York+City+IT+Architect+Regional+Conference" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx&amp;amp;;title=New+York+City+IT+Architect+Regional+Conference&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3570" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=RcvNWyBEkAY:NGZqG4TOoys:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=RcvNWyBEkAY:NGZqG4TOoys:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/RcvNWyBEkAY" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><feedburner:origLink>http://donxml.com/allthingstechie/archive/2008/04/26/New-York-City-IT-Architect-Regional-Conference.aspx</feedburner:origLink></entry><entry><title>Mixing Object, Functional and Aspect Oriented Programming</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/F9pfabd3zrw/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx" /><id>http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx</id><published>2008-04-21T03:57:58Z</published><updated>2008-04-21T03:57:58Z</updated><content type="html">&lt;p&gt;I spent the last week in Seattle and Redmond, attending both the MVP Summit and the ALT.Net Conference, and spent the majority of time discussing the future of programming, both on the .Net platform and other platforms.&amp;#160; By Saturday night, my brain was pretty much on extreme overload.&amp;#160; One of the things I've been doing a lot of over the last few months is pondering the effect of mixing functional programming with object oriented programming.&amp;#160; I've learned that functional programming twists your developer mindset.&amp;#160; For years, I've been using object oriented programming, and have developed the habit of thinking objects, first.&amp;#160; Functional programming tends to get you thinking in terms of, well, functions, first.&amp;#160; I've also been thinking a lot about Domain Specific Languages (both internal and external), and how they map to our traditional programming paradigms.&amp;#160; So, late last night, my brain popped out this little nugget:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Within a DSL it would be cool if you could map its Nouns to Objects (described via OOP), its Verbs to Functions (described via FP), and its Adjectives and Adverbs to Aspects (via AOP).&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I have to do some research, but does this fit within the definition of a composable language?&amp;#160; I tried to fine a definition of what a composable language, but didn't seem to find one.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx&amp;amp;;subject=Mixing+Object%2c+Functional+and+Aspect+Oriented+Programming" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx&amp;amp;;title=Mixing+Object%2c+Functional+and+Aspect+Oriented+Programming" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx&amp;amp;title=Mixing+Object%2c+Functional+and+Aspect+Oriented+Programming" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx&amp;amp;;title=Mixing+Object%2c+Functional+and+Aspect+Oriented+Programming" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx&amp;amp;;title=Mixing+Object%2c+Functional+and+Aspect+Oriented+Programming&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3561" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=F9pfabd3zrw:lDdYlUYrS7s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=F9pfabd3zrw:lDdYlUYrS7s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/F9pfabd3zrw" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><category term=".Net" scheme="http://donxml.com/allthingstechie/archive/tags/.Net/default.aspx" /><category term=".Net Communities" scheme="http://donxml.com/allthingstechie/archive/tags/.Net+Communities/default.aspx" /><category term="LINQ VBx" scheme="http://donxml.com/allthingstechie/archive/tags/LINQ+VBx/default.aspx" /><feedburner:origLink>http://donxml.com/allthingstechie/archive/2008/04/20/Mixing-Object_2C00_-Functional-and-Aspect-Oriented-Programming.aspx</feedburner:origLink></entry><entry><title>VSLive San Francisco Workshop - LINQ - One Query Syntax To Rule Them All</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DonXmlAllThingsTechie/~3/GZ8sMLWxxT0/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx" /><id>http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx</id><published>2008-03-03T21:25:34Z</published><updated>2008-03-03T21:25:34Z</updated><content type="html">&lt;p&gt;Since I'm talking about conferences, I should also mention that I'll be giving a full day pre-conference workshop, &lt;a href="http://vslive.com/2008/sf/workshops.aspx#vpr4" target="_blank"&gt;LINQ &amp;#8212; One Query Syntax to Rule Them All&lt;/a&gt; at &lt;a href="http://vslive.com/2008/sf/default.aspx" target="_blank"&gt;VSLive! San Francisco 2008&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;By now you have probably already heard about LINQ and think it is all about querying SQL Server. Well, yes, with LINQ to SQL you can query SQL Server. But, LINQ is so much more. LINQ extends both C# and Visual Basic with native language syntax for queries, provides class libraries to take advantage of these capabilities, and you can even write your own query provider. In this workshop will cover the basics of how to use LINQ with in memory collections and the language constructs that make LINQ possible (for both C# 3.0 and Visual Basic 9.0). We will then explore the details of LINQ to SQL, LINQ to Entities and LINQ to XML, and even how to build your own query provider. Towards the end of the day we will go into best practices on where, when, how to use and take advantage of LINQ to SQL and LINQ to Entities. This workshop will use both C# 3.0 and Visual Basic 9.0 &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It has been quite a few years since I've been to San Fran, and unfortunately I will not be there more than a couple days.&amp;#160; Just enough time to fly in for the workshop and have a few beers.&amp;#160; If you'll be there, let me know.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx&amp;amp;;subject=VSLive+San+Francisco+Workshop+-+LINQ+-+One+Query+Syntax+To+Rule+Them+All" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx&amp;amp;;title=VSLive+San+Francisco+Workshop+-+LINQ+-+One+Query+Syntax+To+Rule+Them+All" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx&amp;amp;title=VSLive+San+Francisco+Workshop+-+LINQ+-+One+Query+Syntax+To+Rule+Them+All" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx&amp;amp;;title=VSLive+San+Francisco+Workshop+-+LINQ+-+One+Query+Syntax+To+Rule+Them+All" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx&amp;amp;;title=VSLive+San+Francisco+Workshop+-+LINQ+-+One+Query+Syntax+To+Rule+Them+All&amp;amp;;top=1" target="_blank" title = "Post http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://donxml.com/aggbug.aspx?PostID=3544" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=GZ8sMLWxxT0:XC5mNrIgQt0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?a=GZ8sMLWxxT0:XC5mNrIgQt0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DonXmlAllThingsTechie?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DonXmlAllThingsTechie/~4/GZ8sMLWxxT0" height="1" width="1"/&gt;</content><author><name>donxml</name><uri>http://donxml.com/members/donxml.aspx</uri></author><category term="LINQ" scheme="http://donxml.com/allthingstechie/archive/tags/LINQ/default.aspx" /><feedburner:origLink>http://donxml.com/allthingstechie/archive/2008/03/03/VSLive-San-Francisco-Workshop-_2D00_-LINQ-_2D00_-One-Query-Syntax-To-Rule-Them-All.aspx</feedburner:origLink></entry></feed>
