<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Yasser Shohoud</title><subtitle type="html">Yasser's personal space on the Web</subtitle><id>http://blogs.msdn.com/yassers/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/yassers/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2005-10-22T11:31:00Z</updated><entry><title>What I've Been Up To</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2009/02/17/what-i-ve-been-up-to.aspx" /><id>http://blogs.msdn.com/yassers/archive/2009/02/17/what-i-ve-been-up-to.aspx</id><published>2009-02-17T18:21:00Z</published><updated>2009-02-17T18:21:00Z</updated><content type="html">&lt;P&gt;I've been away from blogging for a loong time so have some catching up to do. I spent most of last year building out the new Dallas Microsoft Technology Center while delivering customer engagements and working on a few side projects. The MTC build out is mostly done (a few items remain but I'm spending little time on it) and has turned out pretty nice. You can see a synth of the reception area &lt;A href="http://photosynth.net/view.aspx?cid=6add77a4-8c7f-456b-a67f-421ed8ff1694&amp;amp;i=0:0:0&amp;amp;z=297.77916960193965&amp;amp;g=0&amp;amp;p=-2.55977e-014:3.17671e-014&amp;amp;m=false&amp;amp;c=0.00188016:0.0204435:-0.0100382&amp;amp;d=-1.04607:1.43433:1.43408" mce_href="http://photosynth.net/view.aspx?cid=6add77a4-8c7f-456b-a67f-421ed8ff1694&amp;amp;i=0:0:0&amp;amp;z=297.77916960193965&amp;amp;g=0&amp;amp;p=-2.55977e-014:3.17671e-014&amp;amp;m=false&amp;amp;c=0.00188016:0.0204435:-0.0100382&amp;amp;d=-1.04607:1.43433:1.43408"&gt;here&lt;/A&gt; but you really have to come visit and see it for yourself. Recently, the Dallas Morning News wrote a nice &lt;A href="http://www.dallasnews.com/sharedcontent/dws/news/city/irving/stories/020609dnbusbizsoftware.3a7d382.html" mce_href="http://www.dallasnews.com/sharedcontent/dws/news/city/irving/stories/020609dnbusbizsoftware.3a7d382.html"&gt;article&lt;/A&gt; about the Dallas MTC and what we do for customers. On Friday 2/13, we hosted a minority students day here in the Microsoft Las Colinas campus (see &lt;A href="http://seattlepi.nwsource.com/business/400099_msftbach14.html" mce_href="http://seattlepi.nwsource.com/business/400099_msftbach14.html"&gt;here&lt;/A&gt;) and we had the kids visit the MTC where we exposed them to different careers within the tech industry. It was a lot of fun and I was surprised a few times to find out that kids have used our technologies e.g. XBox 360, Zune, Windows movie maker (hey maybe we're doing good marketing with this age group after all!). The local NBC channel was here and some of us were on the news that night. &lt;BR&gt;Now that the facility is built, it's time to shape and define my team and make sure we stay sharp and on top of our game. As for what I'm doing now, I'm still doing customer engagements mostly around .NET architecture and development and SharePoint. I'm also getting a lot of exposure to infrastructure including server/storage hardware and networking as I manage the partners that provide us with equipment for our MTC. Just recently I was recruited to help build the next generation MTC tools on Dynamics CRM so I'm about to start learning CRM.&amp;nbsp;&amp;nbsp;&lt;BR&gt;Outside of work, I've started school again, this time for an MBA. My first course is on Operations Management which I'm finding&amp;nbsp;quite interesting thus far. I'm planning to be done in 3 years assuming I can take 5 courses per year which hopefully I can do. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9427879" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author></entry><entry><title>Big week for Dallas MTC</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2008/11/15/big-week-for-dallas-mtc.aspx" /><id>http://blogs.msdn.com/yassers/archive/2008/11/15/big-week-for-dallas-mtc.aspx</id><published>2008-11-15T21:27:00Z</published><updated>2008-11-15T21:27:00Z</updated><content type="html">&lt;P&gt;This week is shaping up to be a big week for the Dallas MTC. Monday we have our official launch party where we expect 285 attendees&amp;nbsp;from Micrsosoft and partners&amp;nbsp;(we've been operational since 10/6 but we're now making it official). Then Tuesday thru Thursday we have the World Wide MTC Summit where managers from all 16 world-wide MTCs get together to share best practices and plan for the year ahead. Thursday and Friday we have another major event with the MTC partners. Not to mention a few customer engagements going on next week as well. It'll be&amp;nbsp;crazy busy and lots of fun :-)&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9101478" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author></entry><entry><title>Getting back into blogging</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2008/11/07/getting-back-into-blogging.aspx" /><id>http://blogs.msdn.com/yassers/archive/2008/11/07/getting-back-into-blogging.aspx</id><published>2008-11-07T17:36:00Z</published><updated>2008-11-07T17:36:00Z</updated><content type="html">&lt;P&gt;It's been over a year since I last blogged over on yassers.com. I'm trying to get back into it now and will move my blog back here to MSDN blogs. I know what you're thinking: "he moves around too much" and I agree with you :-) Not only am I moving my blog for the second time in as many years, I've also physically moved twice in the last two years. The first move was when I moved from Seattle (where I worked on the WCF team) to Austin (where I worked on the Austin Microsoft Technology Center team). About a year after that, Microsoft decided to move the Austin MTC to Dallas for very good reasons. So I picked up and moved again to the Dallas area (I live in Grapevine, TX which is about 12 miles from the office in Irving, TX). &lt;/P&gt;
&lt;P&gt;I spent most of the last year building out the new MTC in Dallas and we just recently moved in. It's an awesome place to work and I'll be blogging about that more in the weeks to come. I also plan to blog about the various technologies we have at the MTC as well as some of the new technologies Microsoft is announcing. Thanks for reading!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9052302" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author></entry><entry><title>Blog moved</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2006/09/13/753068.aspx" /><id>http://blogs.msdn.com/yassers/archive/2006/09/13/753068.aspx</id><published>2006-09-14T04:34:00Z</published><updated>2006-09-14T04:34:00Z</updated><content type="html">I've moved my web site and blog to yassers.com. The blog&amp;nbsp;is at&amp;nbsp;&lt;A href="http://blog.yassers.com"&gt;http://blog.yassers.com&lt;/A&gt;. Some of the more recent entries on this blog (the ones included in this blogs current RSS feed) are duplicated there as well.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=753068" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author></entry><entry><title>What Exactly Is BizTalk?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2006/07/25/678105.aspx" /><id>http://blogs.msdn.com/yassers/archive/2006/07/25/678105.aspx</id><published>2006-07-25T21:21:00Z</published><updated>2006-07-25T21:21:00Z</updated><content type="html">&amp;nbsp;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; mso-outline-level: 1"&gt;I now work as a Technology Architect at the Microsoft Technology Center in Austin which is part of the Microsoft Sales org. In this role I help customers understand how to architect solutions to their business problems/needs using Microsoft technologies. As a result I'm learning a lot of technologies that, as a member of the WCF product team, I just wasn't focused on in the past few years. When I learn a new technology I like to start by coming up with (or learning) a short and accurate description of that technology's focus, i.e. what is it for?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; mso-outline-level: 1"&gt;One of the technologies I'm (re)learning is BizTalk Server. So I looked around for a short and accurate description of what BizTalk is. I knew what it was, but I wanted a 2 - 3 sentence description. I found some interesting documents like the &lt;A href="http://www.microsoft.com/biztalk/evaluation/overview/default.mspx?pf=true"&gt;BizTalk Overview&lt;/A&gt; and David Chappell's excellent &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/BTS06coredocs/html/011684a5-0aaf-4355-b6a6-d6fef5993863.asp"&gt;Understanding BizTalk Server 2006&lt;/A&gt; (a must read). While those docs offered valuable information, I couldn't find the sentences I was looking for. This is probably due in part to my coming from a development background and wanting to relate things back to the developer world. So I came up with this short and, in my opinion, accurate description:&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-STYLE: italic; FONT-FAMILY: Calibri; mso-outline-level: 1"&gt;BizTalk is to business process automation what Visual Studio and the .NET Framework are to application development. It is a runtime and tools that enable you to automate and manage business processes more productively. &lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; mso-outline-level: 1"&gt;That's basically it. If I only get 10 seconds to explain what BizTalk is to a customer, the above description is what I'm most comfortable with. If I have more time, I would elaborate on that description as follows.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; mso-outline-level: 1"&gt;The term "application development" is worth further exploration. Looking at the kinds of applications that people build with Visual Studio and the .NET Framework today, the vast majority are focused on specific tasks rather than end to end processes. Not to say that such applications are isolated, they're actually often connected to other apps or data sources via Web services or other means. But the focus of the app is to automate a particular task or set of related tasks and the connectivity serves that purpose. However the business reality is that businesses run on processes which span multiple tasks and of course people. So to automate a business process end-to-end you wind up wanting to connect some of the applications that were written to automate the tasks that make up that business process. As an example, consider the task of updating contact information in the company's address book for a newly hired employee. That employee may launch a .NET desktop app or go to an intranet Web site and enter they home address, cell phone number, emergency contact etc. Now zoom out and look at the big picture and what you see is an end-to-end on-boarding process that includes things like provisioning credentials, certificates, smart card, automatic deposit setup, hardware procurement, office furniture procurement, 401K account setup, setting up a mentor, and the variety of other things a new employee needs to get/set up. The address book update app automates one task in the end to end process but there's no app that automates the entire process.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;BizTalk Server allows you to connect existing apps that automate the various tasks of this process and automate the tasks or parts that don't yet have automation to form a complete end-to-end process automation solution. It also gives you an operational or runtime view of that automation allowing you to see all the moving parts from one vantage point and start/stop/change/maintain them.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri; mso-outline-level: 1"&gt;While it's certainly possible to build VS and .NET apps that automate end-to-end business processes, it's not the most productive use of the customer's/developer's time because they'd have to reinvent (or re-implement) several wheels in the process. It's a bit like building an document management Web site using nothing but ASP.NET: You can do it, but you can do it a lot better and faster if you used Windows SharePoint Services (WSS). The operations folks would also love you for it because of the management features they get out of the box with WSS.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=678105" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author></entry><entry><title>Living In Austin</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2006/06/25/646611.aspx" /><id>http://blogs.msdn.com/yassers/archive/2006/06/25/646611.aspx</id><published>2006-06-25T16:47:00Z</published><updated>2006-06-25T16:47:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;On Saturday 6/17 I boarded a flight from Seattle to Austin and I didn't have a return ticket. You see, for family reasons I moved to Austin and&amp;nbsp;joined the &lt;/FONT&gt;&lt;A href="http://download.microsoft.com/download/3/7/0/3704640b-3f39-4c40-9e73-7ffd3deab53f/MTC_Austin.pdf"&gt;&lt;FONT face=Arial size=2&gt;Microsoft Technology Center&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;. The goal of the MTC is to help customers map their business problems to solutions based on Microsoft products and services. MTC Architects work with customers in three primary ways: Strategy Briefings (1day), Architecture Design Sessions(2days), and Proof-of-Concept Workshop(2-3weeks). You can read more about these activities at the above link, but basically they are about giving the customer the big picture of Microsoft technologies that can help with their business problems, drilling deeper into customer needs and architecting a solution to meet those needs, and building a proof of concept of that solution with the customer's own developers.&lt;BR&gt;Needless to say, this role is quite different from my previous role on the WCF product team and I'm excited about that change and looking forward to spending a lot more time with customers and getting first hand experience with the customer-facing side of Microsoft. It's only been a week but I'm already having a ton of fun. For my first two weeks I'm shadowing &lt;A href="http://www.amazon.com/gp/product/0321130022/104-1609688-6822329?v=glance&amp;amp;n=283155"&gt;Christian Thilmany &lt;/A&gt;in a POC based on Windows Sharepoing Services and Microsoft Office Sharepoint Server. Both technologies and in&amp;nbsp;beta&amp;nbsp;and I have no prior hands-on experience with them so&amp;nbsp;I'm learning and having fun doing it.&amp;nbsp;In addition to the exciting&amp;nbsp;work, people on the MTC team have been warmly welcoming me and offering assistance whenever I need it. &lt;BR&gt;Besides the exciting new role and the great team, Austin has some bonus features. There are some really great schools here (we're looking to live in NW Austin around Canyon Vista Middle and&amp;nbsp;Westwood High Schools), UT Austin is a high ranking university, and the Austin live music scene provides some unique entertainment opportunities. Yesterday I discovered another bonus feature: Twisty roads. Moving here from Seattle's East Side (foot hills of the Cascades), I was worried I won't find good places to ride my &lt;A href="http://www.motorcycle.com/mo/mchonda/00929.html"&gt;bike&lt;/A&gt;. So yesterday I went out exploring and I found several well paved, twisty roads that were nearly empty at 5PM on a Saturday. In fact I got tired and turned back before the road showed any signs of ending. Turns out because Austin is in the Texas Hill Country, there are plenty of hills, canyons, and lakes and and abundance of twisty roads. Couple that with the drier and warmer weather, and you're pretty close to sport bike rider's heaven! I'm already loving it here.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=646611" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author></entry><entry><title>More on the WCF RSS Sample</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2006/06/21/641817.aspx" /><id>http://blogs.msdn.com/yassers/archive/2006/06/21/641817.aspx</id><published>2006-06-21T21:31:00Z</published><updated>2006-06-21T21:31:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;Last week we put up a sample named WCF RSS Toolkit on wcf.netfx3.com and I posted a sample service using it &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/yassers/archive/2006/06/15/632436.aspx"&gt;&lt;FONT face=Arial size=2&gt;here&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;. Since I wrote most of the toolkit’s code I thought I’d talk a bit about its goals, design and the future. There were two primary goals for this sample:&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;To explore/prototype RSS/Atom support in WCF and get customer feedback&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Provide a sample to show WCF developers how to expose a service as RSS and Atom over HTTP GET using WCF v1&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Note the “and” not “or” in #2, meaning the same service implementation can be exposed as RSS, Atom, or any other format simultaneously. If you know WCF, you’ll know this means generating multiple wire formats (RSS, Atom, whatever) from the same contract which can be done with some extensibility. The key is to not rely on the contract projecting the desired info set, rather to transform whatever info set projected by the contract to the desired info set. That transformation would be different depending on the desired wire format. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;To make it easier for developers to emit RSS and Atom, I defined a DataContract with some of the commonly used RSS/Atom data and I defined a transform from that DataContract’s info set to RSS and another transform to Atom. All of this is pluggable/replaceable: You can use your own DataContract if you like, the transforms will transform what they recognize and copy the rest out as extension elements. You can also plug in your own transform to support new formats. Since it’s source, it’s also customizable so you can modify the DataContract and/or the transform if you don’t like how I make DataContract members to RSS/Atom elements.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&amp;nbsp;There was also the HTTP GET part of the equation. WCF’s HTTP transport supports GET out of the box but there are other places in the stack that need to be extended for the scenarios I had in mind. For example, dispatching to the right operation based on the path segment following the endpoint’s address in the request URL. Also, parsing the request query string and decoding parameters from it. And of course, supporting ETag and Last-Modified HTTP header. All of these are commonly needed in RSS/Atom scenarios and&amp;nbsp;when we do build&amp;nbsp;RSS/Atom support into WCF, we will have these features. &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;For the sample however, the first two are included in the sample but the last one isn’t. The good news is that the WCF HTTP transport gives you full read/write access to HTTP headers via the Message properties HttpRequestMessageProperty and HttpResponseMessageProperty so you could build ETag support on top of the current WCF bits. In fact, one of the benefits of having the RSS toolkit sample source code is it gives you a starting point that you can take and modify with ETag support and other features you want. You can even publish you modified sample for the community to learn from and use. &lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=641817" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author></entry><entry><title>WCF RSS Sample</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2006/06/15/632436.aspx" /><id>http://blogs.msdn.com/yassers/archive/2006/06/15/632436.aspx</id><published>2006-06-15T19:22:00Z</published><updated>2006-06-15T19:22:00Z</updated><content type="html">&lt;p&gt;&lt;font face="Arial" size="2"&gt;Mark is &lt;a href="http://www.markbaker.ca/2002/09/Blog/2006/06/13#deliciousdistobj.Brain_Save_____...olkit"&gt;looking &lt;/a&gt;for some sample code for the recently released &lt;a href="http://wcf.netfx3.com/blogs/news_and_announcements/archive/2006/06/13/Windows-Communication-Foundation-RSS-Toolkit.aspx"&gt;WCF RSS Toolkit&lt;/a&gt;. I've put the readme up &lt;a href="http://www.learnxmlws.com/samples/rsstk/readme.htm"&gt;here&lt;/a&gt;. I won't repeat the whole readme here but here's a peek at the programming model. There are several shortcuts for feeds from databases and feeds using existing data types so you should really check out the readme.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Arial" size="2"&gt;An example service: &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; System;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; System.ServiceModel;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; System.Collections.Generic;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; Microsoft.ServiceModel.Samples.Syndication;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;namespace&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; Microsoft.ServiceModel.Samples.Syndication&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[&lt;span style="color: teal;"&gt;ServiceContract&lt;/span&gt;]&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;ItemListService&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: teal;"&gt;OperationContract&lt;/span&gt;]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: teal;"&gt;ContentFeed&lt;/span&gt;&amp;lt;&lt;span style="color: teal;"&gt;FeedItem&lt;/span&gt;&amp;gt; GetItemList()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//instantiate the feed&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: teal;"&gt;ContentFeed&lt;/span&gt;&amp;lt;&lt;span style="color: teal;"&gt;FeedItem&lt;/span&gt;&amp;gt; feed = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;ContentFeed&lt;/span&gt;&amp;lt;&lt;span style="color: teal;"&gt;FeedItem&lt;/span&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//populate the list of feed items&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;feed.FeedItems = GenerateItemList();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//set some feed-level properties&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;feed.FeedAuthor = &lt;span style="color: maroon;"&gt;&lt;a href="mailto:wcfuser@contoso.com"&gt;wcfuser@contoso.com&lt;/a&gt;&lt;/span&gt;;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; feed.FeedTitle = &lt;span style="color: maroon;"&gt;"WCF Item List!"&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;...&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//return the feed&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; feed;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal;"&gt;ItemList&lt;/span&gt;&amp;lt;&lt;span style="color: teal;"&gt;FeedItem&lt;/span&gt;&amp;gt; GenerateItemList()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal;"&gt;ItemList&lt;/span&gt;&amp;lt;&lt;span style="color: teal;"&gt;FeedItem&lt;/span&gt;&amp;gt; list = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;ItemList&lt;/span&gt;&amp;lt;&lt;span style="color: teal;"&gt;FeedItem&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal;"&gt;FeedItem&lt;/span&gt; item1 = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;FeedItem&lt;/span&gt;();&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;item1.ItemTitle = &lt;span style="color: maroon;"&gt;"This is item 1"&lt;/span&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;list.Add(item1);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; list;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Arial"&gt;To expose RSS, Atom and SOAP endpoints in code (see readme and samples in toolkit&amp;nbsp;for config-based and hosting in IIS examples):&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; System.ServiceModel;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; Microsoft.ServiceModel.Samples.Syndication;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New';"&gt;namespace&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt; Microsoft.ServiceModel.Samples.Syndication&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;Program&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;st1:place w:st="on"&gt;Main&lt;/st1:place&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] args)&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal;"&gt;ContentFeedHost&lt;/span&gt; host = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;ContentFeedHost&lt;/span&gt;(&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: teal;"&gt;ItemListService&lt;/span&gt;),&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: teal;"&gt;Uri&lt;/span&gt;(&lt;span style="color: maroon;"&gt;"http://localhost:8077/ItemListService"&lt;/span&gt;));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//endpoints defined in code&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: green;"&gt;&lt;font color="#008000"&gt;// RSS endpoint will be listening at &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;font color="#008000"&gt;//http://localhost:8077/ItemListService/rss&lt;/font&gt;&lt;/span&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;host.AddRssEndpoint(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: teal;"&gt;ItemListService&lt;/span&gt;), &lt;span style="color: maroon;"&gt;"rss"&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: green;"&gt;&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Atom endpoint will be listening at &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;font color="#008000"&gt;//http://localhost:8077/ItemListService/atom&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;host.AddAtomEndpoint(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: teal;"&gt;ItemListService&lt;/span&gt;), &lt;span style="color: maroon;"&gt;"atom"&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: green;"&gt;&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;WS-* SOAP endpoint will be listening at &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;font color="#008000"&gt;//http://localhost:8077/ItemListService/soap&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;host.AddServiceEndpoint(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: teal;"&gt;ItemListService&lt;/span&gt;), &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new WsHttpBinding(), &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style="color: maroon;"&gt;"soap"&lt;/span&gt;);&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;host.Open();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: maroon;"&gt;"Service started ..."&lt;/span&gt;);&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: maroon;"&gt;"Press [Enter] to exit"&lt;/span&gt;);&lt;br&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: teal;"&gt;Console&lt;/span&gt;.ReadLine();&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;host.Close();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New';"&gt;&lt;font face="Arial"&gt;&lt;strong&gt;Enjoy!&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=632436" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author></entry><entry><title>WCF Custom Channel Ecosystem</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2006/04/10/572130.aspx" /><id>http://blogs.msdn.com/yassers/archive/2006/04/10/572130.aspx</id><published>2006-04-10T15:05:00Z</published><updated>2006-04-10T15:05:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;Back in January, a few of us on the WCF team kicked off a side project dubbed "the channel ecosystem project". The goal is to&amp;nbsp;create a community and an ecosystem around&amp;nbsp;WCF custom channels. The first step was to make it easier for developers to build custom channels. To do this we decided to provide detailed documentation, samples, and a couple of tools. We've been creating this content over the last 3 - 4 months as a part-time effort next to our full-time jobs. Thanks to the hard work of many people, the content is now in a state where it can be shared with the world as a pre-release to solicit feedback. It's been published on &lt;A href="http://windowscommunication.net/customchannels/customchannels.htm"&gt;windowscommunication.net&lt;/A&gt;. The samples are also linked from the &lt;A href="http://windowscommunication.net/ControlGallery/default.aspx?Category=6&amp;amp;tabindex=2"&gt;samples gallery&lt;/A&gt;.&lt;BR&gt;We want to hear your feedback on this content as well as what else you'd like to see to help you build custom channels. Send feedback to ces at microsoft.com.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=572130" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author><category term="Technology" scheme="http://blogs.msdn.com/yassers/archive/tags/Technology/default.aspx" /></entry><entry><title>It's here</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2006/03/11/549763.aspx" /><id>http://blogs.msdn.com/yassers/archive/2006/03/11/549763.aspx</id><published>2006-03-12T08:35:00Z</published><updated>2006-03-12T08:35:00Z</updated><content type="html">I came home today to find a large box waiting for me; it's my new iMac G5! This is the 20" intel dual core version and it's absolutely stunning. 
Now I must admit that this is my first Apple computer. My first computer was a Texas Instruments TI 99/4A (complete with the Extended Basic cartridge). My second computer was a Commodore 128. After that it's been PCs, PS/2s. and more PCs. But now I own a Mac and I'm glad I do.
This computer is a pleasing to look at and fun to use. But the thing that's most amazing thus far is how easy it is to use evening for scenarios that I thought would be considered "advanced". 
It took less than 15 minutes from the minute I started opening the box till I was browsing the Web on my wireless LAN. I then decided to go all out and attempt to connect to my home file server to get to my music and photos. Now this is a task I don't take lightly. Every single time I try to do this with a new or newly reinstalled Windows computer it never works the first time. I typically have to do hacks like use the server's IP address or put an entry in the hosts file. 
Of course I expected it to be doubly hard on a Mac because I've never used one of these before and, well, it's a Mac so how could it possibly be easier to talk to a Windows server than from a Windows PC? Well, I fumbled along until I found the help, I searched for connecting to Windows PCs and I found a sequence of 3 steps that supposedly end in seeing the Windows PC and its shares.
Oddly enough, I followed those steps and there was my home server and its shares right there on my Mac! That's just amazing. Next, I decided to try and connect my cell phone and my wife's cell phone to the Mac using Bluetooth. Painlessly, everything worked the first time. This machine brings new meaning to the words "it just works". 
I put in The Matrix DVD and fiddled around with the iPod-shaped remote control. The 10' UI is smooth and clean and video playback on the 20" screen makes for a great viewing experience. But the built-in speakers are weak and have poor bass. Guess I need to buy a nicer pair of speakers.
Then my kids came and we played with the photo booth app. This is a little app that lets you take pictures with the built-in camera and apply one of about 20 silly effects. The app has a clever trick to make up for poor lighting: It uses the massive 20" LCD as a flash turning it bright white for a second while the camera takes a picture. My kids loved playing around and making silly faces. We then took the pictures into iPhoto and made a slideshow with transitions and music. Took two minutes and turned out great. Wow.  
Best of all, there are absolutely no wires except for the power cord (my wife is really impressed by that). I want to keep it clean so I'll look for a pair of wireless speakers. 
I'm looking forward to learning more about Mac OS/X and using it for all sorts of fun projects.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=549763" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author></entry><entry><title>Moving lots of data</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2006/01/21/515887.aspx" /><id>http://blogs.msdn.com/yassers/archive/2006/01/21/515887.aspx</id><published>2006-01-22T09:19:00Z</published><updated>2006-01-22T09:19:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;Recently I've been getting lots of questions about moving large files (or lots of data) between a WCF service and client. The question comes in multiple forms, e.g.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;How do I send a file that's many GB in size from the service to the client?&lt;BR&gt;Should I use MTOM to send large files?&lt;BR&gt;I have a huge object graph and I want to send it over the wire, how should I do it?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;So let's explore&amp;nbsp;the problems associated with moving lots of data and the solutions offered by WCF.&lt;BR&gt;&lt;STRONG&gt;Problem: Bandwidth Utilization&lt;/STRONG&gt;&lt;BR&gt;Sending gigabytes of data means lots of bandwidth usage. While that may not be a problem if it happens infrequently on a 100 Mbit or 1 Gigabit LAN, it is definitely an issue when bandwidth is scarce and/or is being paid for. In interop scenarios, where messages are encoded as text XML, the encoding of binary data using Base64 exacerbates the problem because it inflates the size by 1/3. There are&amp;nbsp;three solutions to this problem depending on your scenario. First, compression could really help especially if the data is text or gets encoded as text (using Base64). Compression/decompression can be&amp;nbsp;implemented using a custom WCF encoder/decoder (and IIS 6 offers built-in response compression). Second, you can avoid using text encoding when interop is not required. WCF provides a binary encoding which is far more bandwidth-efficient than the text encoding especially when sending binary data. Third, if you want interop and you need to send large binary content, you can use MTOM which allows you to send the binary content outside of the SOAP envelope (as a separate part of a multi-part MIME message) without Base64 encoding it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;Problem: Memory Utilization&lt;BR&gt;&lt;/STRONG&gt;By default, WCF buffers messages to support protocols like WS-ReliableMessaging and WS-Security that require buffered messages. For extremely large messages this can lead to out-of-memory conditions especially on servers that try to send or receive multiple of those messages simultaneously. Fortunately, WCF supports streaming on HTTP, TCP, and Named Pipes allowing you to send infinitely large messages without hitting out-of-memory exceptions (actually, message size is constrained to Int64.MaxValue or 9,223,372,036,854,775,807 but hopefully that's infinite as far as your app is concerned). &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Problem: Recovering from Failures&lt;BR&gt;&lt;/STRONG&gt;So what happens if half way through sending your 4GB stream the TCP connection fails? Well, your app must catch the exception and recover. If the other side has been processing the stream as it receives it (e.g. saving it to disk) you may be able to have the sending app coordinate with the receiving app to figure out what was the last received byte and restart from there.&lt;BR&gt;Another alternative is to use Reliable Messaging to recover from connection failures. RM will detect the failure and automatically re-establish a connection and resend the failed message. The problem here is that when you're streaming, the entire stream is one message so resending means basically starting over. Another problem, is that RM requires buffering (so it can resend on failure) so it doesn't work with streaming! The solution is to use chunking. This is where the sending application divides up the 4GB file into say 1 million messages each 4KB in size and sends them in buffered mode. The receiving application reconsitutes the file by appending all 1 million messages to form the original 4GB file. Here, RM buffers only a few of the 4KB messages at a time. In case of a failure, RM will automatically resend the 1 or few failed messages. The chunking/dechunking functionality can be encapsulated in a general purpose chunking channel that lets the applications program against a Stream and handles the chunking under the covers. This is what my sample chunking channel from PDC does. Note that because of the chunking and the protocol overhead added by RM, the resulting throughput is expected to be lower than direct streaming. However, you are getting reliability which comes in handy when the connection fails especially when you're almost done sending the 4GB and don't want to start all over!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;To summarize, my recommendations are:&lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;1. Use binary encoding if you have WCF on both sides or MTOM if you need interop. &lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;2. Consider compression if you are forced to use text encoding or if the data itself is highly compressible (e.g. large text data).&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;3. Use streaming, or if you want reliability, use chunking. One restriction to keep in mind is that to stream, there can be only one parameter (or return value, depending on which direction you're streaming) and it must be of a type that derives from System.IO.Stream.&lt;BR&gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT face=Arial size=2&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=515887" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author><category term="Technology" scheme="http://blogs.msdn.com/yassers/archive/tags/Technology/default.aspx" /></entry><entry><title>Meet the Channel Model: ICommunicationObject</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2006/01/08/510657.aspx" /><id>http://blogs.msdn.com/yassers/archive/2006/01/08/510657.aspx</id><published>2006-01-09T03:14:00Z</published><updated>2006-01-09T03:14:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Georgia size=5&gt;&lt;STRONG&gt;A Common a State Machine &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=3&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;Objects that deal with communication, e.g. sockets, usually present a state machine whose state transitions relate to allocating network resources, making or accepting connections, closing connections and aborting communication. The channel state machine provides a uniform model of the states of a communication object that abstracts the underlying implementation of that object. The interface provides a set of states, state transition methods, and state transition events. All channels, channel factories and channel listeners implement the channel state machine. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Georgia&gt;&lt;FONT size=4&gt;ICommunicationObject&lt;/FONT&gt; &lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Georgia&gt;ICommunicationObject is a CLR interface that describes the channel state machine contract:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;&lt;FONT face=Georgia&gt;public interface ICommunicationObject : IDisposable
{
    CommunicationState State { get; }

    event EventHandler Closed;
    event EventHandler Closing;
    event EventHandler Faulted;
    event EventHandler Opened;
    event EventHandler Opening;

    void Abort();

    void Close();
    void Close(TimeSpan timeout);
    IAsyncResult BeginClose(AsyncCallback callback, object state);
    IAsyncResult BeginClose(TimeSpan timeout, 
                            AsyncCallback callback, object state);
    void EndClose(IAsyncResult result);

    void Open();
    void Open(TimeSpan timeout);
    IAsyncResult BeginOpen(AsyncCallback callback, object state);
    IAsyncResult BeginOpen(TimeSpan timeout, 
                           AsyncCallback callback, object state);
    void EndOpen(IAsyncResult result);
}&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;The events Closed, Closing, Faulted, Opened and Opening signal an external observer after a state transition occurs.&lt;BR&gt;The methods Abort, Close, and Open (and their async equivalents) cause state transitions. &lt;BR&gt;The state property returns the current state as defined by CommunicationState:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;&lt;FONT face=Georgia&gt;public enum CommunicationState
{
    Created,
    Opening,
    Opened,
    Closing,
    Closed,
    Faulted
}
&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;An ICommunicationObject starts out in the Created state where it’s various properties can be configured. Once in the Opened state, the object is usable for sending and/or receiving messages but its properties are considered immutable. If an unrecoverable error occurs, the object transitions to the Faulted state where it can be inspected for information about the error and ultimately closed. When in the Closed state the object has essentially reached the end of the state machine. In general, once an object transitions from one state to the next, it does not go back to a previous state. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;States and Transition &lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;The figure below shows the ICommunicationObject states and state transitions. State transitions can be caused by calling one of the three methods: Abort, Open, or Close. They could also be caused by calling other implementation-specific methods. Transitioning to the Faulted state could happen as a result of errors while opening or after having opened the communication object. Every ICommunicationObject starts out in the Created state. In this state, an application can configure the object by setting its properties (e.g. setting the address of a channel listener by calling its SetUri method). Once an object is in a state other than Created, it is considered immutable. For example, calling SetUri on a channel listener in the Opened state should throw an InvalidOperationException. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;&lt;IMG src="http://www.learnxmlws.com/images/blog/ICommunicationObjectState.JPG"&gt; 
&lt;DIV&gt;&lt;FONT face=Georgia&gt;WCF provides an abstract base class named CommunicationObject which implements ICommunicationObject and acts as the base of all channel objects. That will be the subject of my next posting on the channel model.&lt;/FONT&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=510657" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author><category term="Technology" scheme="http://blogs.msdn.com/yassers/archive/tags/Technology/default.aspx" /></entry><entry><title>WCF Architecture Overview</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2005/12/29/508145.aspx" /><id>http://blogs.msdn.com/yassers/archive/2005/12/29/508145.aspx</id><published>2005-12-30T07:13:00Z</published><updated>2005-12-30T07:13:00Z</updated><content type="html">&lt;A href="http://www.learnxmlws.com/docs/WCFArchOverview.htm"&gt;&lt;FONT face=Arial size=2&gt;This&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt; is a document I wrote a while ago and has been sitting around waiting to be published. Well, it finally is! Enjoy.&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=508145" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author><category term="Technology" scheme="http://blogs.msdn.com/yassers/archive/tags/Technology/default.aspx" /></entry><entry><title>Looking for people who want to change the world</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2005/11/29/497997.aspx" /><id>http://blogs.msdn.com/yassers/archive/2005/11/29/497997.aspx</id><published>2005-11-29T22:31:00Z</published><updated>2005-11-29T22:31:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;We have a few open positions on&amp;nbsp;the Indigo (WCF)&amp;nbsp;team for people who want to change the world. In this role, you would get the opportunity to really change how millions of developers write distributed applications (if you're a distributed app developer yourself, you know that's a big part of &lt;EM&gt;your&lt;/EM&gt; world!). I'm not exaggerating here, we're not just talking tweaks or incremental improvements, I really mean &lt;EM&gt;significant&lt;/EM&gt; change. &lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;We're looking for program managers to help innovate, design, build and ship Indigo v1 and future versions/technologies in the distributed applications space. We have positions for both experienced folks and recent college grads. If you or someone you know is interested, just email me at &lt;A href="mailto:yassers@microsoft.com"&gt;yassers@microsoft.com&lt;/A&gt;.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=497997" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author><category term="Technology" scheme="http://blogs.msdn.com/yassers/archive/tags/Technology/default.aspx" /><category term="Personal" scheme="http://blogs.msdn.com/yassers/archive/tags/Personal/default.aspx" /></entry><entry><title>Meet the WCF Channel Model – Part 2</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/yassers/archive/2005/10/22/483810.aspx" /><id>http://blogs.msdn.com/yassers/archive/2005/10/22/483810.aspx</id><published>2005-10-22T21:31:00Z</published><updated>2005-10-22T21:31:00Z</updated><content type="html">&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;Most WCF developers won’t interact directly with channels or have to think about them much. The Service Model, WCF’s programming model, provides abstractions that layer on top of channels to give a “method and typed parameters” programming model. However, many developers will want to write custom channels for the reasons I mentioned in my &lt;/FONT&gt;&lt;a href="http://blogs.msdn.com/yassers/archive/2005/10/12/480175.aspx"&gt;&lt;FONT face=Arial size=2&gt;previous post&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=2&gt;. For those developers, it’s interesting to understand how the channels are used (indirectly) by a developer building a WCF service and/or client.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;WCF services and clients are based on the concept of endpoints. An endpoint consists of an address, a binding and a contract. The address is the endpoint’s network location (the where). The binding specifies how the endpoint communicates with the world (the how) and the contract is the collection of operations the endpoint exposes (the what). For the purpose of this discussion, the binding is the most interesting of the three. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;A service developer defines an endpoint by specifying its three components. For example:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;public static void Main()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;ServiceHost host = new ServiceHost(typeof(StreamServer));&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;host.AddEndpoint(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; typeof(IStreamService), &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT style="BACKGROUND-COLOR: #ffff00"&gt;new ChunkingTcpBinding(),&lt;/FONT&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new Uri("net.tcp://localhost/StreamService"));&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&lt;FONT style="BACKGROUND-COLOR: #ffff00"&gt;host.Open();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;Console.WriteLine("stream server started....");&lt;BR&gt;&amp;nbsp;Console.ReadLine();&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial&gt;The call to host.AddEndpoint defines the endpoint. The call to host.Open creates the channel stack that will listen for and process messages targeted at the endpoint. Each binding is really a collection of binding elements each contributing to building the channel stack. For example, this is the ChunkingTcpBinding: &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;public class ChunkingTcpBinding : Binding&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; public ChunkingTcpBinding()&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; public override BindingElementCollection CreateBindingElements()&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BindingElementCollection col = &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new BindingElementCollection();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ChunkingBindingElement cbe = new ChunkingBindingElement();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TcpTransportBindingElement tcp = &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new TcpTransportBindingElement();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tcp.TransferMode = TransferMode.Buffered;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tcp.MaxMessageSize = Int32.MaxValue;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; col.Add(cbe);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; col.Add(tcp);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return col.Clone();&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;BR&gt;}&lt;BR&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial&gt;Each binding element inherits from BindingElement which has a couple of interesting methods:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt;public abstract class BindingElement&lt;BR&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp; public virtual IChannelListener&amp;lt;TChannel&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BuildChannelListener&amp;lt;TChannel&amp;gt;(ChannelBuildContext context) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where TChannel : class, IChannel&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp; public virtual IChannelFactory&amp;lt;TChannel&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BuildChannelFactory&amp;lt;TChannel&amp;gt;(ChannelBuildContext context)&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;... other methods not shown ...&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;FONT color=#000000&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;The Service Model calls BuildChannelListener to get back a ChannelListener that is added to the channel stack to listen for incoming channels. Think of an incoming channel as an incoming connection request. Once established, it can be used for receiving messages. Here it is visually:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;IMG src="http://www.learnxmlws.com/images/blog/buildchannellistener.gif"&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Arial size=2&gt;On the send side (e.g. on the client side), the Service Model calls BuildChannelFactory to get back a ChannelFactory. A ChannelFactory is used to build a channel that can be used for sending messages. Here is this part visually:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.learnxmlws.com/images/blog/buildchannelfactory.gif"&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;You may be wondering why there are two factory abstractions: binding element and channelfactory/channellistener. Turns out there are different two categories of things one may want to do in a factory class that creates channels and those two categories are best separated in two factories. The categories are: programming model-specific work and channel-specific work. Programming model-specific work that belongs in binding elements includes things like varying behavior based on settings on the endpoint’s contract or implementation and reading from config. Channel-specific work that belongs in channel factories/listeners includes things like pooling resources across channels (e.g. network connections). &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;The next interesting thing to talk about is how channel factories create channels and the concept of channel shapes. That will be the subject of my next posting.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=483810" width="1" height="1"&gt;</content><author><name>yassers</name><uri>http://blogs.msdn.com/members/yassers.aspx</uri></author><category term="Technology" scheme="http://blogs.msdn.com/yassers/archive/tags/Technology/default.aspx" /></entry></feed>