<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Clemens Vasters - Technology|CardSpace</title>
    <link>http://vasters.com/clemensv/</link>
    <description>Cloud Development and Alien Abductions</description>
    <language>en-us</language>
    <copyright>Clemens Vasters</copyright>
    <lastBuildDate>Thu, 03 Apr 2008 06:10:36 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.7067.0</generator>
    <managingEditor>cvasters@guhhome.com</managingEditor>
    <webMaster>cvasters@guhhome.com</webMaster>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=e59f4a38-8e07-401a-b291-3ab4a561a2ae</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,e59f4a38-8e07-401a-b291-3ab4a561a2ae.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,e59f4a38-8e07-401a-b291-3ab4a561a2ae.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=e59f4a38-8e07-401a-b291-3ab4a561a2ae</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Earlier today I hopefully gave a somewhat reasonable, simple answer to the question
"<a href="http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx">What
is a Claim?</a>" Let's try the same with "Token":
</p>
        <p>
In the WS-* security world, "Token" is really just a another name the security
geniuses decided to use for "Handy package for all sorts of security
stuff". The most popular type of token is the <a href="http://en.wikipedia.org/wiki/SAML">SAML</a> (just
say "samel") token. If the ladies and gentlemen designing and writing security platform
infrastructure and frameworks are doing a good job you might want to know about the
existence of such a thing, but otherwise be blissfully ignorant of all the gory details. 
</p>
        <p>
Tokens are meant to be a thing that you need to know about in much the same way you
need to know about ... ummm... rebate coupons you can cut out of your local newspaper
or all those funny books that you get in the mail. I have really no idea how the accounting
works behind the scenes between the manufacturers and the stores, but it really doesn't
interest me much, either. What matters to me is that we get $4 off that jumbo pack
of diapers and we go through a lot of those these days with a 9 month old baby here
at home. We cut out the coupon, present it at the store, four bucks saved. Works for
me.
</p>
        <p>
A token is the same kind of deal. You go to some (security) service, get a token,
and present that token to some other service. The other service takes a good look
at the token and figures whether it 'trusts' the token issuer and might then
do some further inspection; if all is well you get four bucks off. Or you get
to do the thing you want to do at the service. The latter is more likely, but I liked
the idea for a moment.
</p>
        <p>
Remember when I mentioned the surprising fact that <strong>people lie</strong> from
time to time when I wrote about <a href="http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx">claims</a>?
Well, that's where tokens come in. The security stuff in a token is there to keep
people honest and to make '<a href="http://dictionary.reference.com/search?q=assertion">assertions</a>'
about claims. The security dudes and dudettes will say "Err, that's not the whole
story", but for me it's good enough. It's actually pretty common (that'll be
their objection) that there are tokens that don't carry any claims and where
the security service effectively says "whoever brings this token is a fine person;
they are ok to get in". It's like having a really close buddy relationship with the
boss of the nightclub when you are having troubles with the monsters guarding the
door. I'm getting a bit ahead of myself here, though.
</p>
        <p>
In the post about claims I claimed that "I am authorized to approve corporate
acquisitions with a transaction volume of up to $5Bln". That's a pretty obvious lie.
If there was such a thing as a one-click shopping button for companies on some Microsoft
Intranet site (there isn't, don't get any ideas) and I were to push it, I surely
should not be authorized to execute the transaction. The imaginary "just
one click and you own Xigg" button would surely have some sort of authorization
mechanism on it. 
</p>
        <p>
I don't know what Xigg is assumed to be worth these days, but there is actually be
a second authorization gate to check. I might indeed be authorized to do one-click
shopping for corporate acquisitions, but even with my made-up $5Bln limit claim, Xigg
may just be worth more that I'm claiming I'm authorized to approve. I digress.
</p>
        <p>
How would the one-click-merger-approval service be secured? It would expect some sort
of token that absolutely, positively asserts that my claim "I am authorized to approve corporate
acquisitions with a transaction volume of up to $5Bln" is truthful and the one-click-merger-approval
service would have to absolutely trust the security service that is making that
assertion. The resulting token that I'm getting from the security service would contain
the claim as an attribute of the assertion and that assertion would be signed and
encrypted in mysterious (for me) yet very secure and interoperable ways, so that I
can't tamper with it as much as I look at the token while having it in hands.
</p>
        <p>
The service receiving the token is the only one able to crack the token (I'll get
to that point in a later post) and look at its internals and the asserted attributes.
So what if I were indeed authorized to spend a bit of Microsoft's reserves
and I were trying to acquire Xigg at the touch of a button and, for some reason I
wouldn't understand, the valuation were outside my acquisition limit? That's
the service's job. It'd look at my claim, understand that I can't spend more than
$5Bln and say "nope!" - and it would likely send email to SteveB under the covers.
Trouble.
</p>
        <p>
Bottom line: For a client application, a token is a collection of opaque (and
mysterious) security stuff. The token may contain an assertion (saying "yep,
that's actually true") about a claim or a set of claims that I am making. I shouldn't
have to care about the further details unless I'm writing a service and I'm interested
in some deeper inspection of the claims that have been asserted. I will
get to that.
</p>
        <p>
Before that, I notice that I talked quite a bit about some sort of "security service"
here. Next post...
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=e59f4a38-8e07-401a-b291-3ab4a561a2ae" />
      </body>
      <title>What is a Token?</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,e59f4a38-8e07-401a-b291-3ab4a561a2ae.aspx</guid>
      <link>http://vasters.com/clemensv/2008/04/03/What+Is+A+Token.aspx</link>
      <pubDate>Thu, 03 Apr 2008 06:10:36 GMT</pubDate>
      <description>&lt;p&gt;
Earlier today I hopefully gave a somewhat reasonable, simple answer to the question
"&lt;a href="http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx"&gt;What
is a Claim?&lt;/a&gt;" Let's try the same with "Token":
&lt;/p&gt;
&lt;p&gt;
In the WS-* security world, "Token" is really just a&amp;nbsp;another name the security
geniuses&amp;nbsp;decided to use&amp;nbsp;for "Handy package&amp;nbsp;for all sorts of security
stuff". The most popular type of token is the &lt;a href="http://en.wikipedia.org/wiki/SAML"&gt;SAML&lt;/a&gt; (just
say "samel") token. If the ladies and gentlemen designing and writing security platform
infrastructure and frameworks are doing a good job you might want to know about the
existence of such a thing, but otherwise be blissfully ignorant of all the gory details. 
&lt;/p&gt;
&lt;p&gt;
Tokens are meant to be a thing that you need to know about in much the same way you
need to know about ... ummm... rebate coupons you can cut out of your local newspaper
or all those funny books that you get in the mail. I have really no idea how the accounting
works behind the scenes between the manufacturers and the stores, but it really doesn't
interest me much, either. What matters to me is that we get $4 off that jumbo pack
of diapers and we go through a lot of those these days with a 9 month old baby here
at home. We cut out the coupon, present it at the store, four bucks saved. Works for
me.
&lt;/p&gt;
&lt;p&gt;
A token is the same kind of deal. You go to some (security) service, get a token,
and present that token to some other service. The other service takes a good look
at the token and figures whether it 'trusts' the token issuer and&amp;nbsp;might then
do some further inspection; if all is well you get four bucks off. Or&amp;nbsp;you get
to do the thing you want to do at the service. The latter is more likely, but I liked
the idea for a moment.
&lt;/p&gt;
&lt;p&gt;
Remember when I mentioned the surprising fact that &lt;strong&gt;people lie&lt;/strong&gt; from
time to time when I wrote about &lt;a href="http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx"&gt;claims&lt;/a&gt;?
Well, that's where tokens come in. The security stuff in a token is there to keep
people honest and to make '&lt;a href="http://dictionary.reference.com/search?q=assertion"&gt;assertions&lt;/a&gt;'
about claims. The security dudes and dudettes will say "Err, that's not the whole
story", but for me it's good enough.&amp;nbsp;It's actually pretty common (that'll be
their objection) that there are&amp;nbsp;tokens that don't carry any claims and where
the security service effectively says "whoever brings this token is a fine person;
they are ok to get in". It's like having a really close buddy relationship with the
boss of the nightclub when you are having troubles with the monsters guarding the
door. I'm getting a bit ahead of myself here, though.
&lt;/p&gt;
&lt;p&gt;
In the post about claims I claimed that "I am authorized to approve&amp;nbsp;corporate
acquisitions with a transaction volume of up to $5Bln". That's a pretty obvious lie.
If there was such a thing as a one-click shopping button for companies on some Microsoft
Intranet site (there isn't, don't get any ideas) and I were to push it, I&amp;nbsp;surely
should&amp;nbsp;not be authorized to execute the transaction.&amp;nbsp;The imaginary "just
one click and you&amp;nbsp;own Xigg" button would surely have some sort of authorization
mechanism on it. 
&lt;/p&gt;
&lt;p&gt;
I don't know what Xigg is assumed to be worth these days, but there is actually be
a second authorization gate to check. I might indeed be authorized to do one-click
shopping for corporate acquisitions, but even with my made-up $5Bln limit claim, Xigg
may just be worth more that I'm claiming I'm authorized to approve. I digress.
&lt;/p&gt;
&lt;p&gt;
How would the one-click-merger-approval service be secured? It would expect some sort
of token that absolutely, positively asserts that my claim "I am authorized to approve&amp;nbsp;corporate
acquisitions with a transaction volume of up to $5Bln" is truthful and&amp;nbsp;the one-click-merger-approval
service would have to absolutely trust the security service that&amp;nbsp;is making that
assertion. The resulting token that I'm getting from the security service would contain
the claim as an attribute of the assertion and that assertion would be signed and
encrypted in mysterious (for me) yet very secure and interoperable ways, so that I
can't tamper with it as much as I look at the token while having it in hands.
&lt;/p&gt;
&lt;p&gt;
The service receiving the token is the only one able to crack the token (I'll get
to that point in a later post) and look at its internals and the asserted attributes.
So what if I were indeed authorized to&amp;nbsp;spend&amp;nbsp;a bit of&amp;nbsp;Microsoft's&amp;nbsp;reserves
and I were trying to acquire Xigg at the touch of a button and, for some reason I
wouldn't understand,&amp;nbsp;the valuation were outside my acquisition limit? That's
the service's job. It'd look at my claim, understand that I can't spend more than
$5Bln and say "nope!" - and it would likely send email to SteveB under the covers.
Trouble.
&lt;/p&gt;
&lt;p&gt;
Bottom line: For a client application,&amp;nbsp;a token is a collection of opaque (and
mysterious) security stuff.&amp;nbsp;The token may contain&amp;nbsp;an assertion (saying "yep,
that's actually true") about a&amp;nbsp;claim or a set of claims that I am making. I shouldn't
have to care about the further details unless I'm writing a service and I'm interested
in some deeper&amp;nbsp;inspection of the claims that have been asserted.&amp;nbsp;I will
get to that.
&lt;/p&gt;
&lt;p&gt;
Before that, I notice that I talked quite a bit about some sort of "security service"
here. Next post...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=e59f4a38-8e07-401a-b291-3ab4a561a2ae" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,e59f4a38-8e07-401a-b291-3ab4a561a2ae.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>Technology/CardSpace</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=6efdfc92-27ac-4d51-8aa1-f187eba098d0</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=6efdfc92-27ac-4d51-8aa1-f187eba098d0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you ask any search engine "What is a Claim?" and you mean the sort of claim used in
the WS-* security space, you'll likely find an answer somewhere, but that answer
is just as likely buried in a sea of complex terminology that is only really comprehensible
if you have already wrapped your head around the details of the WS-* security model.
I would have thought that by now there would be a simple and not too technical explanation
of the concept that's easy to find on the Web, but I haven't really had success finding
one.  
</p>
        <p>
So "What is a Claim?" It's really simple.
</p>
        <p>
A <strong>claim</strong> is just a simple statement like "I am Clemens Vasters", or
"I am over 21 years of age", or "I am a Microsoft employee", or "I work in the Connected
Systems Division", or "I am authorized to approve corporate acquisitions with
a transaction volume of up to $5Bln". A <strong>claim set</strong> is just a bundle
of such claims. 
</p>
        <p>
When I walk up to a service with some client program and want to do something on the
service that requires authorization, the client program sends a claim set
along with the request. For the client to know what claims to send along, the
service lets it know about its requirements in its <strong>policy</strong>. 
</p>
        <p>
When a request comes in, this imaginary (U.S.) service looks at the request
knowing <em>"I'm a service for an online game  promoting alcoholic
beverages!". </em>It then it looks at the claim set, finds the <em>"I am over
21 years of age"</em> claim and thinks <em>"Alright, I think we got that covered"</em>. 
</p>
        <p>
The service didn't really care who was trying to get at the service. And it shouldn't.
To cover the liquor company's legal behind, they only need to know that you are over
21. They don't really need to know (and you probably don't want them to know) who is
talking to them. From the client's perspective that's a good thing, because the
client is now in a position to refuse giving out (m)any clues about the
user's identity and only provide the exact data needed to pass the authorization
gate. Mind that the claim isn't the date of birth for that exact reason. The claim
just says "over 21".
</p>
        <p>
Providing control over what claims are being sent to a service (I'm lumping websites,
SOAP, and REST services all in the same bucket here) is one of the key reasons
why Windows CardSpace exists, by the way. The service asks for a set of claims,
you get to see what is being asked for, and it's ultimately your personal, interactive decision
to provide or refuse to provide that information. 
</p>
        <p>
The only problem with relying on simple statements (claims) of that sort is that <strong>people
lie</strong>. When you go to the <a href="http://www.jackdaniels.com/">Jack Daniel's</a> website,
you are asked to enter your date of birth before you can proceed. In reality, it's
any date you like and an 10-year old kid is easily smart enough to figure that out. 
</p>
        <p>
All that complex security stuff is mostly there to keep people honest. Next time ...
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=6efdfc92-27ac-4d51-8aa1-f187eba098d0" />
      </body>
      <title>What is a Claim?</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx</guid>
      <link>http://vasters.com/clemensv/2008/04/02/What+Is+A+Claim.aspx</link>
      <pubDate>Wed, 02 Apr 2008 20:20:43 GMT</pubDate>
      <description>&lt;p&gt;
If you ask any search engine "What is a Claim?" and you mean the sort of claim used&amp;nbsp;in
the WS-* security space, you'll&amp;nbsp;likely find an answer somewhere, but that answer
is just as likely buried in a sea of complex terminology that is only really comprehensible
if you have already wrapped your head around the details of the WS-* security model.
I would have thought that by now there would be a simple and not too technical explanation
of the concept that's easy to find on the Web, but I haven't really had success finding
one.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
So "What is a Claim?" It's really simple.
&lt;/p&gt;
&lt;p&gt;
A &lt;strong&gt;claim&lt;/strong&gt; is just a simple statement like "I am Clemens Vasters", or
"I am over 21 years of age", or "I am a Microsoft employee", or "I work in the Connected
Systems Division", or "I am authorized to approve&amp;nbsp;corporate acquisitions with
a transaction volume of up to $5Bln". A &lt;strong&gt;claim set&lt;/strong&gt; is just a bundle
of such claims. 
&lt;/p&gt;
&lt;p&gt;
When I walk up to a service with some client program and want to do something on the
service that requires authorization,&amp;nbsp;the client program&amp;nbsp;sends a claim set
along with the request.&amp;nbsp;For the client to know what claims to send along, the
service&amp;nbsp;lets it know about its requirements in&amp;nbsp;its&amp;nbsp;&lt;strong&gt;policy&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
When a request comes in, this imaginary (U.S.) service&amp;nbsp;looks at&amp;nbsp;the request
knowing &lt;em&gt;"I'm a&amp;nbsp;service&amp;nbsp;for an online game&amp;nbsp; promoting&amp;nbsp;alcoholic
beverages!". &lt;/em&gt;It then it looks at the claim set,&amp;nbsp;finds the &lt;em&gt;"I am over
21 years of age"&lt;/em&gt; claim and&amp;nbsp;thinks &lt;em&gt;"Alright, I think we got that covered"&lt;/em&gt;. 
&lt;/p&gt;
&lt;p&gt;
The service&amp;nbsp;didn't really care who was trying to get at the service. And it shouldn't.
To cover the liquor company's legal behind, they only need to know that you are over
21. They don't really need to know (and you probably don't want them to know) who&amp;nbsp;is
talking to them.&amp;nbsp;From the client's perspective that's&amp;nbsp;a good thing, because&amp;nbsp;the
client is now in a position to&amp;nbsp;refuse giving out&amp;nbsp;(m)any clues about the
user's identity and only provide the exact data needed&amp;nbsp;to pass the authorization
gate. Mind that the claim isn't the date of birth for that exact reason. The claim
just says "over 21".
&lt;/p&gt;
&lt;p&gt;
Providing control over what claims are being sent to a service (I'm lumping websites,
SOAP, and REST services all in the same bucket here) is&amp;nbsp;one of the&amp;nbsp;key reasons
why Windows CardSpace exists, by the way. The service&amp;nbsp;asks for a set of claims,
you get to&amp;nbsp;see what is being asked for, and it's ultimately your personal, interactive&amp;nbsp;decision
to provide or refuse to provide that information. 
&lt;/p&gt;
&lt;p&gt;
The only problem with relying on simple statements (claims)&amp;nbsp;of that sort is that &lt;strong&gt;people
lie&lt;/strong&gt;.&amp;nbsp;When you go to the &lt;a href="http://www.jackdaniels.com/"&gt;Jack Daniel's&lt;/a&gt; website,
you are asked to enter your date of birth before you can proceed. In reality, it's
any date you like and an 10-year old kid is easily smart enough to figure that out. 
&lt;/p&gt;
&lt;p&gt;
All that complex security stuff is mostly there to keep people honest. Next time ...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=6efdfc92-27ac-4d51-8aa1-f187eba098d0" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,6efdfc92-27ac-4d51-8aa1-f187eba098d0.aspx</comments>
      <category>Architecture</category>
      <category>Architecture/SOA</category>
      <category>Technology/CardSpace</category>
      <category>Technology/WCF</category>
      <category>Technology/Web Services</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=3d060e11-9ec3-4cd9-a095-86651c0d5dac</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,3d060e11-9ec3-4cd9-a095-86651c0d5dac.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,3d060e11-9ec3-4cd9-a095-86651c0d5dac.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=3d060e11-9ec3-4cd9-a095-86651c0d5dac</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I highly recommend reading <a href="http://blogs.msdn.com/vbertocci/archive/2008/03/31/using-federatedidentity-net-managed-cards-with-biztalk-services-sdk.aspx">Vittorio's
most excellent and illuminating blog entry</a> for how to use the new features
we've added to BizTalk Identity Services for allowing you to use 3rd Party Managed
Cards. 
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=3d060e11-9ec3-4cd9-a095-86651c0d5dac" />
      </body>
      <title>Federated Identity with BizTalk Services</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,3d060e11-9ec3-4cd9-a095-86651c0d5dac.aspx</guid>
      <link>http://vasters.com/clemensv/2008/03/31/Federated+Identity+With+BizTalk+Services.aspx</link>
      <pubDate>Mon, 31 Mar 2008 19:08:04 GMT</pubDate>
      <description>&lt;p&gt;
I highly recommend reading &lt;a href="http://blogs.msdn.com/vbertocci/archive/2008/03/31/using-federatedidentity-net-managed-cards-with-biztalk-services-sdk.aspx"&gt;Vittorio's
most excellent and illuminating blog entry&lt;/a&gt; for how to use the new&amp;nbsp;features
we've added to BizTalk Identity Services for allowing you to use 3rd Party Managed
Cards. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=3d060e11-9ec3-4cd9-a095-86651c0d5dac" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,3d060e11-9ec3-4cd9-a095-86651c0d5dac.aspx</comments>
      <category>Technology/CardSpace</category>
      <category>Technology/ISB</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=798bbf5b-f9f9-45b9-87ba-f6a30c359af9</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,798bbf5b-f9f9-45b9-87ba-f6a30c359af9.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,798bbf5b-f9f9-45b9-87ba-f6a30c359af9.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=798bbf5b-f9f9-45b9-87ba-f6a30c359af9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p align="justify">
A flock of pigs has been doing aerobatics high up over Microsoft Campus in Redmond
in the past three weeks. Neither City of Redmond nor Microsoft spokespeople returned
calls requesting comments in time for this article. An Microsoft worker who requested
anonymity and has seen the pigs flying overhead commented that "they are as good as
the Blue Angels at Seafair, just funnier" and "they seem to circle over building 42
a lot, but I wouldn't know why". 
</p>
        <p>
In related news ... 
</p>
        <p align="justify">
We wrapped up the BizTalk Services "R11" CTP this last Thursday and put the latest
SDK release up on <a href="http://labs.biztalk.net/">http://labs.biztalk.net/</a>.
As you may or may not know, "BizTalk Services" is the codename for Microsoft's cloud-based
Identity and Connectivity services - with a significant set of further services in
the pipeline. The R11 release is a major milestone for the data center side of BizTalk
Services, but we've also added several new client-facing features, especially on the
Identity services. You can now authenticate using a certificate in addition to username
and CardSpace authentication, we have enabled support for 3rd party managed CardSpace
cards, and there is extended support for claims based authorization. 
</p>
        <p>
Now the surprising bit:
</p>
        <p align="justify">
Only about an hour before we locked down the SDK on Thursday, we checked a sample
into the samples tree that has a rather unusual set of prerequisites for something
coming out of Microsoft: 
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p align="justify">
Runtime: <a href="http://java.sun.com/javaee/">Java EE 5</a> on <a href="https://glassfish.dev.java.net/">Sun
Glassfish v2</a> + <a href="https://metro.dev.java.net/">Sun WSIT/Metro</a> (JAX-WS
extensions), Tool: <a href="http://netbeans.org">Netbeans 6.0 IDE</a>. 
</p>
        </blockquote>
        <p align="justify">
The sample shows how to use the BizTalk Services Identity Security Token Service (STS)
to secure the communication between a Java client and a Java service providing federated
authentication and claims-based authorization.
</p>
        <p align="justify">
The sample, which you can find in <em>./Samples/OtherPlatforms/StandaloneAccessControl/JavaEE5</em> once
you installed the SDK, is a pure Java sample not requiring any of our bits on either
the service or client side. The interaction with our services is purely happening
on the wire. 
</p>
        <p align="justify">
If you are a "Javahead", it might seem odd that we're shipping this sample inside
a Windows-only MSI installer and I will agree that that's odd. It's simply a function
of timing and the point in time when we knew that we could get it done (some more
on that below). For the next BizTalk Services SDK release I expect there to be an
additional .jar file for the Java samples.
</p>
        <p align="justify">
It's important to note that this isn't just a thing we did as a one-time thing and
because we could. We have done a significant amount of work on the backend protocol
implementations to start opening up a very broad set of scenarios on the BizTalk Services
Connectivity services for platforms other than .NET. We already have a set of additional
Java EE samples lined up for when we enable that functionality on the backend. However,
since getting security and identity working is a prerequisite for making all other
services work, that's where we started. There'll be more and there'll be more platform
and language choice than Java down the road. 
</p>
        <p align="justify">
Just to be perfectly clear: Around here we strongly believe that .NET and the Windows
Communication Foundation in particular is the most advanced platform to build services,
irrespective of whether they are of the WS-* or REST variety. If you care about my
personal opinion, I'll say that several months of research into the capabilities of
other platforms has only reaffirmed that belief for me and I don't even need to put
a Microsoft hat on to say that. 
</p>
        <p align="justify">
But we recognize and respect that there are a great variety of individual reasons
why people might not be using .NET and WCF. The obvious one is "platform". If you
run on Linux or Unix and/or if your deployment target is a Java Application Server,
then your platform is very likely not .NET. It's something else. If that's your
world, we still think that our services are something that's useful for your applications
and we want to show you why. And it is absolutely not enough for us to say "here is
the wire protocol documentation; go party!". Only Code is Truth.
</p>
        <p align="justify">
I'm also writing "Only Code is Truth" also because we've found - perhaps not too surprisingly
- that there is a significant difference between reading and implementing the WS-*
specs and having things actually work. And here I get to the point where a round of
public "Thank You" is due:
</p>
        <p align="justify">
The Metro team over at Sun Microsystems has made a very significant contribution to
making this all work. Before we started making changes to accommodate Java, there
would have been very little hope for anyone to get this seemingly simple
scenario to work. We had to make quite a few changes even though our service did follow
the specs. 
</p>
        <p align="justify">
While we were adjusting our backend STS accordingly, the Sun Metro team worked on
a set of issues that we identified on their end (with fantastic turnaround times)
and worked those into their public nightly builds. The Sun team also 'promoted' a
nightly build of Metro 1.2 to a semi-permanent <a href="https://metro.dev.java.net/servlets/ProjectDocumentList?folderID=8958&amp;expandFolder=8958&amp;folderID=7636">download
location</a> (the first 1.2 build that got that treatment), because it is the build
tested to successfully interop with our SDK release, even though that build is known
to have some regressions for some of their other test scenarios. As they work towards
wrapping up their 1.2 release and fix those other bugs, we’ll continue to test and
talk to help that the interop scenarios keep working. 
</p>
        <p align="justify">
As a result of this collaboration, Metro 1.2 is going to be a better and more interoperable
release for the Sun's customers and the greater Java community and BizTalk Services
as well as our future identity products will be better and more interoperable, too.
Win-Win. Thank you, Sun.
</p>
        <p align="justify">
As a goodie, I put some code into the Java sample that might be useful even if you
don't even care about our services. Since configuring the Java certificate stores
for standalone applications can be really painful, I added some simple code that's
using a week-old feature of the latest Metro 1.2 bits that allows configuring the
Truststores/Keystores dynamically and pull the stores from the client's .jar at runtime.
The code also has an authorization utility class that shows how to get and evaluate
claims on the service side by pulling the SAML token out of the context and pulling
the correct attributes from the token.
</p>
        <p>
Have fun.
</p>
        <p>
[By the way, this is not an April Fool's joke, in case you were wondering]<br /></p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=798bbf5b-f9f9-45b9-87ba-f6a30c359af9" />
      </body>
      <title>BizTalk Services "R11" CTP Comes with a Surprise</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,798bbf5b-f9f9-45b9-87ba-f6a30c359af9.aspx</guid>
      <link>http://vasters.com/clemensv/2008/03/31/BizTalk+Services+R11+CTP+Comes+With+A+Surprise.aspx</link>
      <pubDate>Mon, 31 Mar 2008 17:56:40 GMT</pubDate>
      <description>&lt;p align=justify&gt;
A flock of pigs has been doing aerobatics high up over Microsoft Campus in Redmond
in the past three weeks. Neither City of Redmond nor Microsoft spokespeople returned
calls requesting comments in time for this article. An Microsoft worker who requested
anonymity and has seen the pigs flying overhead commented that "they are as good as
the Blue Angels at Seafair, just funnier" and "they seem to circle over building 42
a lot, but I wouldn't know why". 
&lt;/p&gt;
&lt;p&gt;
In related news ... 
&lt;/p&gt;
&lt;p align=justify&gt;
We wrapped up the BizTalk Services "R11" CTP this last Thursday and put the latest
SDK release up on &lt;a href="http://labs.biztalk.net/"&gt;http://labs.biztalk.net/&lt;/a&gt;.
As you may or may not know, "BizTalk Services" is the codename for Microsoft's cloud-based
Identity and Connectivity services - with a significant set of further services in
the pipeline. The R11 release is a major milestone for the data center side of BizTalk
Services, but we've also added several new client-facing features, especially on the
Identity services. You can now authenticate using a certificate in addition to username
and CardSpace authentication, we have enabled support for 3rd party managed CardSpace
cards, and there is extended support for claims based authorization. 
&lt;/p&gt;
&lt;p&gt;
Now the surprising bit:
&lt;/p&gt;
&lt;p align=justify&gt;
Only about an hour before we locked down the SDK on Thursday, we checked a sample
into the samples tree that has a rather unusual set of prerequisites for something
coming out of Microsoft: 
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p align=justify&gt;
Runtime: &lt;a href="http://java.sun.com/javaee/"&gt;Java EE 5&lt;/a&gt; on &lt;a href="https://glassfish.dev.java.net/"&gt;Sun
Glassfish v2&lt;/a&gt; + &lt;a href="https://metro.dev.java.net/"&gt;Sun WSIT/Metro&lt;/a&gt; (JAX-WS
extensions), Tool: &lt;a href="http://netbeans.org"&gt;Netbeans 6.0 IDE&lt;/a&gt;. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p align=justify&gt;
The sample shows how to use the BizTalk Services Identity Security Token Service (STS)
to secure the communication between a Java client and a Java service providing federated
authentication and claims-based authorization.
&lt;/p&gt;
&lt;p align=justify&gt;
The sample, which you can find in &lt;em&gt;./Samples/OtherPlatforms/StandaloneAccessControl/JavaEE5&lt;/em&gt; once
you installed the SDK, is a pure Java sample not requiring any of our bits on either
the service or client side. The interaction with our services is purely happening
on the wire. 
&lt;/p&gt;
&lt;p align=justify&gt;
If you are a "Javahead", it might seem odd that we're shipping this sample inside
a Windows-only MSI installer and I will agree that that's odd. It's simply a function
of timing and the point in time when we knew that we could get it done (some more
on that below). For the next BizTalk Services SDK release I expect there to be an
additional .jar file for the Java samples.
&lt;/p&gt;
&lt;p align=justify&gt;
It's important to note that this isn't just a thing we did as a one-time thing and
because we could. We have done a significant amount of work on the backend protocol
implementations to start opening up a very broad set of scenarios on the BizTalk Services
Connectivity services for platforms other than .NET. We already have a set of additional
Java EE samples lined up for when we enable that functionality on the backend. However,
since getting security and identity working is a prerequisite for making all other
services work, that's where we started. There'll be more and there'll be more platform
and language choice than Java down the road. 
&lt;/p&gt;
&lt;p align=justify&gt;
Just to be perfectly clear: Around here we strongly believe that .NET and the Windows
Communication Foundation in particular is the most advanced platform to build services,
irrespective of whether they are of the WS-* or REST variety. If you care about my
personal opinion, I'll say that several months of research into the capabilities of
other platforms has only reaffirmed that belief for me and I don't even need to put
a Microsoft hat on to say that. 
&lt;/p&gt;
&lt;p align=justify&gt;
But we recognize and respect that there are a great variety of individual reasons
why people might not be using .NET and WCF. The obvious one is "platform". If you
run on Linux or Unix and/or if your deployment target is a Java Application Server,
then your platform is very likely not .NET. It's something else.&amp;nbsp;If that's your
world, we still think that our services are something that's useful for your applications
and we want to show you why. And it is absolutely not enough for us to say "here is
the wire protocol documentation; go party!". Only Code is Truth.
&lt;/p&gt;
&lt;p align=justify&gt;
I'm also writing "Only Code is Truth" also because we've found - perhaps not too surprisingly
- that there is a significant difference between reading and implementing the WS-*
specs and having things actually work. And here I get to the point where a round of
public "Thank You" is due:
&lt;/p&gt;
&lt;p align=justify&gt;
The Metro team over at Sun Microsystems has made a very significant contribution to
making this all work. Before we started making changes to accommodate Java, there
would have been&amp;nbsp;very little&amp;nbsp;hope for anyone to get this seemingly simple
scenario to work. We had to make quite a few changes even though our service did follow
the specs. 
&lt;/p&gt;
&lt;p align=justify&gt;
While we were adjusting our backend STS accordingly, the Sun Metro team worked on
a set of issues that we identified on their end (with fantastic turnaround times)
and worked those into their public nightly builds. The Sun team also 'promoted' a
nightly build of Metro 1.2 to a semi-permanent &lt;a href="https://metro.dev.java.net/servlets/ProjectDocumentList?folderID=8958&amp;amp;expandFolder=8958&amp;amp;folderID=7636"&gt;download
location&lt;/a&gt; (the first 1.2 build that got that treatment), because it is the build
tested to successfully interop with our SDK release, even though that build is known
to have some regressions for some of their other test scenarios. As they work towards
wrapping up their 1.2 release and fix those other bugs, we’ll continue to test and
talk to help that the interop scenarios keep working. 
&lt;/p&gt;
&lt;p align=justify&gt;
As a result of this collaboration, Metro 1.2 is going to be a better and more interoperable
release for the Sun's customers and the greater Java community and BizTalk Services
as well as our future identity products will be better and more interoperable, too.
Win-Win. Thank you, Sun.
&lt;/p&gt;
&lt;p align=justify&gt;
As a goodie, I put some code into the Java sample that might be useful even if you
don't even care about our services. Since configuring the Java certificate stores
for standalone applications can be really painful, I added some simple code that's
using a week-old feature of the latest Metro 1.2 bits that allows configuring the
Truststores/Keystores dynamically and pull the stores from the client's .jar at runtime.
The code also has an authorization utility class that shows how to get and evaluate
claims on the service side by pulling the SAML token out of the context and pulling
the correct attributes from the token.
&lt;/p&gt;
&lt;p&gt;
Have fun.
&lt;/p&gt;
&lt;p&gt;
[By the way, this is not an April Fool's joke, in case you were wondering]&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=798bbf5b-f9f9-45b9-87ba-f6a30c359af9" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,798bbf5b-f9f9-45b9-87ba-f6a30c359af9.aspx</comments>
      <category>Architecture</category>
      <category>IT Strategy</category>
      <category>Technology</category>
      <category>Technology/CardSpace</category>
      <category>Technology/ISB</category>
      <category>Technology/WCF</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=48f3d81b-61f9-4bd5-99d5-8624bfcd0b5e</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,48f3d81b-61f9-4bd5-99d5-8624bfcd0b5e.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,48f3d81b-61f9-4bd5-99d5-8624bfcd0b5e.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=48f3d81b-61f9-4bd5-99d5-8624bfcd0b5e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://winliveid.spaces.live.com/blog/cns!AEE1BB0D86E23AAC!931.entry">Check
this out</a>.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=48f3d81b-61f9-4bd5-99d5-8624bfcd0b5e" />
      </body>
      <title>LiveID + CardSpace</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,48f3d81b-61f9-4bd5-99d5-8624bfcd0b5e.aspx</guid>
      <link>http://vasters.com/clemensv/2007/08/28/LiveID+CardSpace.aspx</link>
      <pubDate>Tue, 28 Aug 2007 00:58:21 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://winliveid.spaces.live.com/blog/cns!AEE1BB0D86E23AAC!931.entry"&gt;Check
this out&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=48f3d81b-61f9-4bd5-99d5-8624bfcd0b5e" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,48f3d81b-61f9-4bd5-99d5-8624bfcd0b5e.aspx</comments>
      <category>Technology</category>
      <category>Technology/CardSpace</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=2bde249b-5996-4676-9d60-a0b44c7e33fb</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,2bde249b-5996-4676-9d60-a0b44c7e33fb.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,2bde249b-5996-4676-9d60-a0b44c7e33fb.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=2bde249b-5996-4676-9d60-a0b44c7e33fb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://hyperthink.net/blog/2007/05/05/Programmable+Web+Features+In+The+BizTalk+Services+SDK.aspx">Steve
Maine explains</a> what's in the newest revision of the BizTalk Services SDK, including
quite a few (standalone-) surprises for WCF and WF developers. In case you haven't
noticed, we've dropped a new and substantially expanded build of the SDK just a week
after we published the first SDK. 
</p>
        <p>
          <strong>Stop.</strong>
          <strong>Don't leave yet.</strong> Before you say "What do I
care about BizTalk?", you should know that while BizTalk has been more
or less associated with the BizTalk Server 200x product line in the past few
years, (Codename-) BizTalk Services is a complementary set of functionality that's
not only interesting to BizTalk Server customers, but really to all .NET developers. 
</p>
        <p>
Weird? Flip flopping? Confusing? No. The fact that <em>BizTalk</em> is not only
BizTalk Server isn't really new. When BizTalk came out back in 2000 and I was <a href="http://www.amazon.com/BizTalk-Server-2000-Beginners-Guide/dp/0072190116">very
closely looking at what's going on</a> (get it used for $2), the definition read
like this in the <a href="http://www.microsoft.com/presspass/press/2000/Jun00/Framework2PR.mspx">press
release</a>:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>The BizTalk Initiative represents the collective set of investments that Microsoft
is making to facilitate business process integration within and between organizations
using Internet-standard protocols and formats. It includes the BizTalk Framework,
the BizTalk.org community and business document library, as well as BizTalk Server
2000, a business process orchestration server and tools for developing, executing
and managing distributed business processes. These investments are being made in conjunction
with industry standards groups, technology and service providers, as well as key global
organizations. </em>
          </p>
        </blockquote>
        <p dir="ltr">
While the envisioned schema exchange BizTalk.org fell flat since industry-wide message-level-schema
standardization for "everything" more or less didn't happen in the way people initially
expected, what came out of this initiative as a significant element was that
the set of specifications then known as the BizTalk Framework 2.0 that acted as a
foundation for quite a few of the WS-* specifications and the BizTalk Server product
which evolved into a very successful and leading SOA/BPM suite that's soon seeing
its next release, <a href="http://www.microsoft.com/biztalk/default.mspx">BizTalk
Server 2006 R2</a>. Fast forward, read Steven Martin's <a href="http://blogs.msdn.com/stevemar/archive/2007/04/24/have-services-got-feedback.aspx">blog
entry</a> where he writes:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>[...] We see BizTalk Services as a complement to "traditional" BizTalk Server
uses on premise. As you need to coordinate SOA on a broader scale beyond the organization,
we see the introduction of hosted services as one way to help support federation of
business process, messaging, and identity across boundaries. Over time, we want to
ensure that BizTalk Server customers will be able to easily use the cloud services
in conjunction with their premise technology. [...]</em>
          </p>
        </blockquote>
        <p>
So all in all, a very sane way to think about BizTalk is that the software and
services we publish under that name are providing functionality for messaging,
process management and connectivity that go beyond the capability of the
core .NET Framework.
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=2bde249b-5996-4676-9d60-a0b44c7e33fb" />
      </body>
      <title>[WebGet] BizTalk</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,2bde249b-5996-4676-9d60-a0b44c7e33fb.aspx</guid>
      <link>http://vasters.com/clemensv/2007/05/07/WebGet+BizTalk.aspx</link>
      <pubDate>Mon, 07 May 2007 23:00:16 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://hyperthink.net/blog/2007/05/05/Programmable+Web+Features+In+The+BizTalk+Services+SDK.aspx"&gt;Steve
Maine explains&lt;/a&gt; what's in the newest revision of the BizTalk Services SDK, including
quite a few (standalone-) surprises for WCF and WF developers. In case you haven't
noticed, we've dropped a new and substantially expanded build of the SDK just a week
after we published the first SDK. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Stop.&lt;/strong&gt; &lt;strong&gt;Don't leave yet.&lt;/strong&gt; Before you say "What do I
care about&amp;nbsp;BizTalk?", you should know that&amp;nbsp;while&amp;nbsp;BizTalk&amp;nbsp;has been&amp;nbsp;more
or less&amp;nbsp;associated with the BizTalk Server 200x product line in the past few
years,&amp;nbsp;(Codename-) BizTalk Services is a complementary set of functionality that's
not only interesting to BizTalk Server customers, but really to all .NET developers. 
&lt;/p&gt;
&lt;p&gt;
Weird? Flip flopping? Confusing? No. The fact that &lt;em&gt;BizTalk&lt;/em&gt; is not&amp;nbsp;only
BizTalk Server isn't really new. When BizTalk came out back in 2000 and I was &lt;a href="http://www.amazon.com/BizTalk-Server-2000-Beginners-Guide/dp/0072190116"&gt;very
closely looking at what's going on&lt;/a&gt;&amp;nbsp;(get it used for $2), the definition read
like this in the &lt;a href="http://www.microsoft.com/presspass/press/2000/Jun00/Framework2PR.mspx"&gt;press
release&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;em&gt;The BizTalk Initiative represents the collective set of investments that Microsoft
is making to facilitate business process integration within and between organizations
using Internet-standard protocols and formats. It includes the BizTalk Framework,
the BizTalk.org community and business document library, as well as BizTalk Server
2000, a business process orchestration server and tools for developing, executing
and managing distributed business processes. These investments are being made in conjunction
with industry standards groups, technology and service providers, as well as key global
organizations. &lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr&gt;
While the envisioned schema exchange BizTalk.org fell flat since industry-wide message-level-schema
standardization for "everything" more or less didn't happen in the way people initially
expected, what came out of this&amp;nbsp;initiative as a significant element was that
the set of specifications then known as the BizTalk Framework 2.0 that acted as a
foundation for quite a few of the WS-* specifications and the BizTalk Server product
which evolved into a&amp;nbsp;very successful and leading SOA/BPM suite that's soon seeing
its next release,&amp;nbsp;&lt;a href="http://www.microsoft.com/biztalk/default.mspx"&gt;BizTalk
Server 2006 R2&lt;/a&gt;. Fast forward, read Steven Martin's &lt;a href="http://blogs.msdn.com/stevemar/archive/2007/04/24/have-services-got-feedback.aspx"&gt;blog
entry&lt;/a&gt; where he writes:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;em&gt;[...] We see BizTalk Services as a complement to "traditional" BizTalk Server
uses on premise. As you need to coordinate SOA on a broader scale beyond the organization,
we see the introduction of hosted services as one way to help support federation of
business process, messaging, and identity across boundaries. Over time, we want to
ensure that BizTalk Server customers will be able to easily use the cloud services
in conjunction with their premise technology. [...]&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So all in all,&amp;nbsp;a very sane way to think about BizTalk is that the software and
services we&amp;nbsp;publish under that name are providing&amp;nbsp;functionality for messaging,
process management&amp;nbsp;and&amp;nbsp;connectivity that go beyond the capability of the
core .NET Framework.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=2bde249b-5996-4676-9d60-a0b44c7e33fb" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,2bde249b-5996-4676-9d60-a0b44c7e33fb.aspx</comments>
      <category>Technology/BizTalk</category>
      <category>Technology/CardSpace</category>
      <category>Technology/ISB</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=603e2393-c8de-40dd-b2e9-88f504b44149</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,603e2393-c8de-40dd-b2e9-88f504b44149.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,603e2393-c8de-40dd-b2e9-88f504b44149.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=603e2393-c8de-40dd-b2e9-88f504b44149</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I wrote a slightly Twitter-inspired, fun app over the weekend that's using the BizTalk
Services Connectivity service and relay. In the spirit of Software+Services I'm going
to give you half of it [for now] ;-)   You must have the <a href="http://labs.biztalk.net/downloads.aspx">BizTalk
Services SDK</a> installed to run the sample.
</p>
        <p>
The server app, which I'm keeping to myself for the next few days as part of
the experiment, is an extension (add-in) to Windows Live Messenger. The
Messenger add-in monitors all chats with <a href="mailto:tweetiebot@hotmail.com">tweetiebot@hotmail.com</a> and
keeps circular buffer with the last 40 incoming messages. Using the client (which
is in the attached archive), you can get a list of "Tweets" and add a new one (same
as chatting)
</p>
        <p>
[<font color="#2b91af">ServiceContract</font>(Name = <font color="#a31515">"TweetieBot"</font>,
Namespace = <font color="#a31515"><a href="http://samples.vasters.com/2007/05/tweetiebot">http://samples.vasters.com/2007/05/tweetiebot</a></font>)]<br /><font color="#0000ff">public</font><font color="#0000ff">interface</font><font color="#2b91af">ITweetieBot<br /></font>{<br />
  [<font color="#2b91af">OperationContract</font>]<br /><font color="#2b91af">  IList</font>&lt;<font color="#2b91af">Tweet</font>&gt;
GetTweets(<font color="#2b91af">DateTime</font>? since);<br />
  [<font color="#2b91af">OperationContract</font>]<br /><font color="#0000ff">  void</font> Tweet(<font color="#0000ff">string</font> nickname, <font color="#0000ff">string</font> text);<br />
}
</p>
        <p>
or you can subscribe to new tweets and get them as they arrive
</p>
        <p>
[<font color="#2b91af">ServiceContract</font>(Name = <font color="#a31515">"TweetieEvents"</font>,
Namespace = <font color="#a31515"><a href="http://samples.vasters.com/2007/05/tweetiebot">http://samples.vasters.com/2007/05/tweetiebot</a></font>)]<br /><font color="#0000ff">public</font><font color="#0000ff">interface</font><font color="#2b91af">ITweetieEvents<br /></font>{<br />
  [<font color="#2b91af">OperationContract</font>(IsOneWay=<font color="#0000ff">true</font>)]<br /><font color="#0000ff">  void</font> OnTweet(<font color="#2b91af">Tweet</font> tweet);<br />
}
</p>
        <p>
The client application hooks up to the client (that lives right on my desktop machine)
through the BizTalk Services ISB and the server fires events back through the
ISB relay into the client as new tweets arrive. So when you run the attached client
app, you'll find that it starts with a dump of the current log of the bot and then
keeps spitting out events as they arrive. 
</p>
        <p>
The client is actually pretty simple. The <em>EventsClient</em> is the subscriber
for the pub/sub service (ConnectionMode.RelayMulticast) that writes out the received
events to the console. The rest all happens in <em>Main</em> (parsing an validating
the command line argument) and in <em>Run</em>.
</p>
        <p>
          <span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: Courier New; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-no-proof: yes">
            <font size="2">   
class</font>
          </span>
          <span style="FONT-SIZE: 12pt; FONT-FAMILY: Courier New; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-no-proof: yes">
            <font color="#000000" size="2">
            </font>
            <span style="COLOR: #2b91af">
              <font size="2">Program<br /></font>
            </span>
            <font size="2">
              <font color="#000000">
                <span style="mso-spacerun: yes">    </span>{<br /><span style="mso-spacerun: yes">        </span></font>
              <span style="COLOR: blue">class</span>
              <font color="#000000">
              </font>
              <span style="COLOR: #2b91af">EventsClient</span>
              <font color="#000000"> : </font>
            </font>
            <span style="COLOR: #2b91af">
              <font size="2">ITweetieEvents<br /></font>
            </span>
            <font size="2">
              <font color="#000000">
                <span style="mso-spacerun: yes">        </span>{<br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: blue">public</span>
              <font color="#000000">
              </font>
              <span style="COLOR: blue">void</span>
              <font color="#000000"> OnTweet(</font>
              <span style="COLOR: #2b91af">Tweet</span>
            </font>
            <font size="2">
              <font color="#000000"> tweet)<br /><span style="mso-spacerun: yes">            </span>{<br /><span style="mso-spacerun: yes">                </span></font>
              <span style="COLOR: #2b91af">Console</span>
              <font color="#000000">.WriteLine(</font>
              <span style="COLOR: #a31515">"[{0}]
{1}:{2}"</span>
            </font>
            <font size="2">
              <font color="#000000">, tweet.Time, tweet.User,
tweet.Text);<br /><span style="mso-spacerun: yes">            </span>}<br /><span style="mso-spacerun: yes">        </span>}<br /><br /><span style="mso-spacerun: yes">        </span></font>
              <span style="COLOR: blue">static</span>
              <font color="#000000">
              </font>
              <span style="COLOR: blue">void</span>
              <font color="#000000"> Main(</font>
              <span style="COLOR: blue">string</span>
            </font>
            <font size="2">
              <font color="#000000">[]
args)<br /><span style="mso-spacerun: yes">        </span>{<br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: blue">string</span>
              <font color="#000000"> usageMessage
= </font>
              <span style="COLOR: #a31515">"Usage: IMBotClient &lt;messenger-email-address&gt;"</span>
            </font>
            <font size="2">
              <font color="#000000">;<br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: blue">if</span>
            </font>
            <font size="2">
              <font color="#000000"> (args.Length
== 0)<br /><span style="mso-spacerun: yes">            </span>{<br /><span style="mso-spacerun: yes">                </span></font>
              <span style="COLOR: #2b91af">Console</span>
            </font>
            <font color="#000000">
              <font size="2">.WriteLine(usageMessage);<br /><span style="mso-spacerun: yes">            </span>}<br /><span style="mso-spacerun: yes">            </span></font>
            </font>
            <span style="COLOR: blue">
              <font size="2">else<br /></font>
            </span>
            <font size="2">
              <font color="#000000">
                <span style="mso-spacerun: yes">            </span>{<br /><span style="mso-spacerun: yes">                </span></font>
              <span style="COLOR: blue">if</span>
              <font color="#000000"> (!</font>
              <span style="COLOR: #2b91af">Regex</span>
              <font color="#000000">.IsMatch(args[0], </font>
              <span style="COLOR: #a31515">@"^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))$"</span>
            </font>
            <font size="2">
              <font color="#000000">))<br /><span style="mso-spacerun: yes">                </span>{<br /><span style="mso-spacerun: yes">                    </span></font>
              <span style="COLOR: #2b91af">Console</span>
            </font>
            <font size="2">
              <font color="#000000">.WriteLine(usageMessage);<br /><span style="mso-spacerun: yes">                    </span></font>
              <span style="COLOR: #2b91af">Console</span>
              <font color="#000000">.WriteLine(</font>
              <span style="COLOR: #a31515">"'{0}'
is not a valid email address"</span>
            </font>
            <font color="#000000">
              <font size="2">);<br /><span style="mso-spacerun: yes">                </span>}<br /><span style="mso-spacerun: yes">                </span></font>
            </font>
            <span style="COLOR: blue">
              <font size="2">else<br /></font>
            </span>
            <font size="2">
              <font color="#000000">
                <span style="mso-spacerun: yes">                </span>{<br /><span style="mso-spacerun: yes">                    </span>Run(args[0]);<br /><span style="mso-spacerun: yes">                </span>}<br /><span style="mso-spacerun: yes">            </span>}<br /><span style="mso-spacerun: yes">        </span>}<br /><br /><span style="mso-spacerun: yes">        </span></font>
              <span style="COLOR: blue">private</span>
              <font color="#000000">
              </font>
              <span style="COLOR: blue">static</span>
              <font color="#000000">
              </font>
              <span style="COLOR: blue">void</span>
              <font color="#000000"> Run(</font>
              <span style="COLOR: blue">string</span>
            </font>
            <font size="2">
              <font color="#000000"> emailAddress)<br /><span style="mso-spacerun: yes">        </span>{<br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: #2b91af">EndpointAddress</span>
              <font color="#000000"> serviceAddress
= 
<br />
                </font>
              <span style="COLOR: blue">new</span>
              <font color="#000000">
              </font>
              <span style="COLOR: #2b91af">EndpointAddress</span>
              <font color="#000000">(</font>
              <span style="COLOR: #2b91af">String</span>
              <font color="#000000">.Format(</font>
              <span style="COLOR: #2b91af">String</span>
              <font color="#000000">.Format(</font>
              <span style="COLOR: #a31515">"sb://{0}/services/tweetiebot/{1}/service"</span>
              <font color="#000000">, <br />
                                    </font>
              <span style="COLOR: #2b91af">RelayBinding</span>
              <font color="#000000">.DefaultRelayHostName, </font>
              <span style="COLOR: #2b91af">Uri</span>
            </font>
            <font size="2">
              <font color="#000000">.EscapeDataString(emailAddress))));<br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: #2b91af">EndpointAddress</span>
              <font color="#000000"> eventsAddress
= 
<br />
                </font>
              <span style="COLOR: blue">new</span>
              <font color="#000000">
              </font>
              <span style="COLOR: #2b91af">EndpointAddress</span>
              <font color="#000000">(</font>
              <span style="COLOR: #2b91af">String</span>
              <font color="#000000">.Format(</font>
              <span style="COLOR: #2b91af">String</span>
              <font color="#000000">.Format(</font>
              <span style="COLOR: #a31515">"sb://{0}/services/tweetiebot/{1}/events"</span>
              <font color="#000000">, 
<br />
                                    </font>
              <span style="COLOR: #2b91af">RelayBinding</span>
              <font color="#000000">.DefaultRelayHostName, </font>
              <span style="COLOR: #2b91af">Uri</span>
            </font>
            <font size="2">
              <font color="#000000">.EscapeDataString(emailAddress))));<br /><br /><span style="mso-spacerun: yes"><font face="Verdana" color="#003300">The URI scheme
for services that hook into the ISB is "sb:" and the default address of the relay
is encoded in the SDK assemblies. We set up two endpoints here. One for the client
channel to fetch the initial list and one for the event subscriber. </font></span></font>
            </font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 12pt; FONT-FAMILY: Courier New; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-no-proof: yes">
            <font size="2">
              <font color="#000000">
                <span style="mso-spacerun: yes">            </span>
              </font>
              <span style="COLOR: #2b91af">RelayBinding</span>
              <font color="#000000"> relayBinding
= </font>
              <span style="COLOR: blue">new</span>
              <font color="#000000">
              </font>
              <span style="COLOR: #2b91af">RelayBinding</span>
            </font>
            <font size="2">
              <font color="#000000">();<br /><span style="mso-spacerun: yes">     </span></font>
            </font>
            <font size="2">
              <font color="#000000">
                <br />
                <span style="mso-spacerun: yes">      </span>
                <span style="mso-spacerun: yes">      </span>
              </font>
              <span style="COLOR: #2b91af">ServiceHost</span>
              <font color="#000000"> eventsHost
= </font>
              <span style="COLOR: blue">new</span>
              <font color="#000000">
              </font>
              <span style="COLOR: #2b91af">ServiceHost</span>
              <font color="#000000">(</font>
              <span style="COLOR: blue">typeof</span>
              <font color="#000000">(</font>
              <span style="COLOR: #2b91af">EventsClient</span>
            </font>
            <font size="2">
              <font color="#000000">));<br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: #2b91af">RelayBinding</span>
              <font color="#000000"> eventBinding
= </font>
              <span style="COLOR: blue">new</span>
              <font color="#000000">
              </font>
              <span style="COLOR: #2b91af">RelayBinding</span>
              <font color="#000000">(</font>
              <span style="COLOR: #2b91af">RelayConnectionMode</span>
            </font>
            <font size="2">
              <font color="#000000">.RelayedMulticast);<br /><span style="mso-spacerun: yes">            </span>eventsHost.AddServiceEndpoint(</font>
              <span style="COLOR: blue">typeof</span>
              <font color="#000000">(</font>
              <span style="COLOR: #2b91af">ITweetieEvents</span>
            </font>
            <font size="2">
              <font color="#000000">),
eventBinding, eventsAddress.ToString());<br /><span style="mso-spacerun: yes">            </span>eventsHost.Open();<br /><br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: #2b91af">ChannelFactory</span>
              <font color="#000000">&lt;</font>
              <span style="COLOR: #2b91af">TweetieBotChannel</span>
              <font color="#000000">&gt;
channelFactory = </font>
              <span style="COLOR: blue">new</span>
              <font color="#000000">
              </font>
              <span style="COLOR: #2b91af">ChannelFactory</span>
              <font color="#000000">&lt;</font>
              <span style="COLOR: #2b91af">TweetieBotChannel</span>
            </font>
            <font size="2">
              <font color="#000000">&gt;(relayBinding,
serviceAddress);<br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: #2b91af">TweetieBotChannel</span>
            </font>
            <font size="2">
              <font color="#000000"> channel
= channelFactory.CreateChannel();<br /><span style="mso-spacerun: yes">            </span>channel.Open();<br /><br /><span style="mso-spacerun: yes"><span style="mso-spacerun: yes"><font face="Verdana" color="#003300">The
two *.Open() calls will each prompt for a CardSpace authentication, so you will have
to be <a href="https://identity.biztalk.net/MemberRegister.aspx">registered</a> to
run the sample. Once you have opened the channels (and my service is
running), you'll be able to pull the list of current tweets. Meanwhile, whenever
a new event pops up, the <em>EventsClient</em> above will write out a new line.</font></span></span></font>
            </font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 12pt; FONT-FAMILY: Courier New; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-no-proof: yes">
            <font size="2">
              <font color="#000000">
                <span style="mso-spacerun: yes">            </span>
              </font>
              <span style="COLOR: #2b91af">IList</span>
              <font color="#000000">&lt;</font>
              <span style="COLOR: #2b91af">Tweet</span>
            </font>
            <font size="2">
              <font color="#000000">&gt;
tweets = channel.GetTweets(lastTime);<br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: blue">foreach</span>
              <font color="#000000"> (</font>
              <span style="COLOR: #2b91af">Tweet</span>
              <font color="#000000"> tweet </font>
              <span style="COLOR: blue">in</span>
            </font>
            <font size="2">
              <font color="#000000"> tweets)<br /><span style="mso-spacerun: yes">            </span>{<br /><span style="mso-spacerun: yes">                </span></font>
              <span style="COLOR: #2b91af">Console</span>
              <font color="#000000">.WriteLine(</font>
              <span style="COLOR: #a31515">"[{0}]
{1}:{2}"</span>
            </font>
            <font size="2">
              <font color="#000000">, tweet.Time, tweet.User,
tweet.Text);<br /><span style="mso-spacerun: yes">            </span>}<br /><br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: #2b91af">Console</span>
              <font color="#000000">.WriteLine(</font>
              <span style="COLOR: #a31515">"Press
ENTER to quit at any time"</span>
            </font>
            <font size="2">
              <font color="#000000">);<br /><span style="mso-spacerun: yes">            </span></font>
              <span style="COLOR: #2b91af">Console</span>
            </font>
            <font color="#000000" size="2">.ReadLine();<br /><br /><span style="mso-spacerun: yes">            </span>eventsHost.Close();<br /><span style="mso-spacerun: yes">            </span>channel.Close();<br /><span style="mso-spacerun: yes">            </span>channelFactory.Close();<br /><span style="mso-spacerun: yes">      </span><span style="mso-spacerun: yes">  </span>}<span style="mso-spacerun: yes">        </span></font>
          </span>
        </p>
        <span style="FONT-SIZE: 12pt; FONT-FAMILY: Courier New; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-no-proof: yes">
          <font color="#000000" size="2">
            <span style="mso-spacerun: yes">
            </span>
            <p>
              <br />
              <span style="mso-spacerun: yes">
                <span style="mso-spacerun: yes">
                  <span style="mso-spacerun: yes">
                    <font face="Verdana" color="#003300">So
when you run the app, you can chat (anyone can, you don't need to be a buddy) <a href="mailto:tweetiebot@hotmail.com">tweetiebot@hotmail.com</a> through
Live Messenger and you'll see your chat lines (and potentially others') popping out
as events from the service bus. </font>
                  </span>
                </span>
              </span>
            </p>
            <p>
              <span style="mso-spacerun: yes">
                <span style="mso-spacerun: yes">
                  <span style="mso-spacerun: yes">
                    <font face="Verdana" color="#003300">To
run the sample with my bot, you need to call the client with "IMBotClient tweetiebot@hotmail.com"
and select your BizTalk Services Information Card twice as you are prompted.</font>
                  </span>
                </span>
              </span>
            </p>
            <p>
              <span style="mso-spacerun: yes">
                <span style="mso-spacerun: yes">
                  <span style="mso-spacerun: yes">
                    <font face="Verdana" color="#003300">
                      <strong>Privacy
notice</strong>: I'm anonymizing the name of the contact only insofar as I'm clipping
anything including and following the "at" sign of the user that chats the
bot. So whatever you say is published as "<em>emailname</em>: text line"</font>
                  </span>
                </span>
              </span>
            </p>
          </font>
        </span>
        <a href="http://friends.newtelligence.net/clemensv/content/binary/IMBotClient.zip">IMBotClient.zip
(3.61 KB)</a>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=603e2393-c8de-40dd-b2e9-88f504b44149" />
      </body>
      <title>Some fun with the BizTalk Services ISB</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,603e2393-c8de-40dd-b2e9-88f504b44149.aspx</guid>
      <link>http://vasters.com/clemensv/2007/05/07/Some+Fun+With+The+BizTalk+Services+ISB.aspx</link>
      <pubDate>Mon, 07 May 2007 21:00:21 GMT</pubDate>
      <description>&lt;p&gt;
I wrote a slightly Twitter-inspired, fun app over the weekend that's using the BizTalk
Services Connectivity service and relay. In the spirit of Software+Services I'm going
to give you half of it [for now] ;-)&amp;nbsp;&amp;nbsp; You must have the &lt;a href="http://labs.biztalk.net/downloads.aspx"&gt;BizTalk
Services SDK&lt;/a&gt; installed to run the sample.
&lt;/p&gt;
&lt;p&gt;
The server app, which I'm keeping&amp;nbsp;to myself for the next few days as part of
the experiment,&amp;nbsp;is an extension (add-in) to Windows Live Messenger.&amp;nbsp;The
Messenger add-in monitors all chats&amp;nbsp;with&amp;nbsp;&lt;a href="mailto:tweetiebot@hotmail.com"&gt;tweetiebot@hotmail.com&lt;/a&gt;&amp;nbsp;and
keeps circular buffer with the last 40 incoming messages. Using the client (which
is in the attached archive), you can get a list of "Tweets" and add a new one (same
as chatting)
&lt;/p&gt;
&lt;p&gt;
[&lt;font color=#2b91af&gt;ServiceContract&lt;/font&gt;(Name = &lt;font color=#a31515&gt;"TweetieBot"&lt;/font&gt;,
Namespace = &lt;font color=#a31515&gt;&lt;a href="http://samples.vasters.com/2007/05/tweetiebot"&gt;http://samples.vasters.com/2007/05/tweetiebot&lt;/a&gt;&lt;/font&gt;)]&lt;br&gt;
&lt;font color=#0000ff&gt;public&lt;/font&gt; &lt;font color=#0000ff&gt;interface&lt;/font&gt; &lt;font color=#2b91af&gt;ITweetieBot&lt;br&gt;
&lt;/font&gt;{&lt;br&gt;
&amp;nbsp; [&lt;font color=#2b91af&gt;OperationContract&lt;/font&gt;]&lt;br&gt;
&lt;font color=#2b91af&gt;&amp;nbsp; IList&lt;/font&gt;&amp;lt;&lt;font color=#2b91af&gt;Tweet&lt;/font&gt;&amp;gt; GetTweets(&lt;font color=#2b91af&gt;DateTime&lt;/font&gt;?
since);&lt;br&gt;
&amp;nbsp; [&lt;font color=#2b91af&gt;OperationContract&lt;/font&gt;]&lt;br&gt;
&lt;font color=#0000ff&gt;&amp;nbsp; void&lt;/font&gt; Tweet(&lt;font color=#0000ff&gt;string&lt;/font&gt; nickname, &lt;font color=#0000ff&gt;string&lt;/font&gt; text);&lt;br&gt;
}
&lt;/p&gt;
&lt;p&gt;
or you can subscribe to new tweets and get them as they arrive
&lt;/p&gt;
&lt;p&gt;
[&lt;font color=#2b91af&gt;ServiceContract&lt;/font&gt;(Name = &lt;font color=#a31515&gt;"TweetieEvents"&lt;/font&gt;,
Namespace = &lt;font color=#a31515&gt;&lt;a href="http://samples.vasters.com/2007/05/tweetiebot"&gt;http://samples.vasters.com/2007/05/tweetiebot&lt;/a&gt;&lt;/font&gt;)]&lt;br&gt;
&lt;font color=#0000ff&gt;public&lt;/font&gt; &lt;font color=#0000ff&gt;interface&lt;/font&gt; &lt;font color=#2b91af&gt;ITweetieEvents&lt;br&gt;
&lt;/font&gt;{&lt;br&gt;
&amp;nbsp; [&lt;font color=#2b91af&gt;OperationContract&lt;/font&gt;(IsOneWay=&lt;font color=#0000ff&gt;true&lt;/font&gt;)]&lt;br&gt;
&lt;font color=#0000ff&gt;&amp;nbsp; void&lt;/font&gt; OnTweet(&lt;font color=#2b91af&gt;Tweet&lt;/font&gt; tweet);&lt;br&gt;
}
&lt;/p&gt;
&lt;p&gt;
The client application hooks up to the client (that lives right on my desktop machine)
through the BizTalk Services ISB and the&amp;nbsp;server fires events back through the
ISB relay into the client as new tweets arrive. So when you run the attached client
app, you'll find that it starts with a dump of the current log of the bot and then
keeps spitting out events as they arrive. 
&lt;/p&gt;
&lt;p&gt;
The client is actually pretty simple. The &lt;em&gt;EventsClient&lt;/em&gt; is the subscriber
for the pub/sub service (ConnectionMode.RelayMulticast) that writes out the received
events to the console.&amp;nbsp;The rest all happens in &lt;em&gt;Main&lt;/em&gt; (parsing an validating
the command line argument) and in &lt;em&gt;Run&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: Courier New; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;font size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
class&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: Courier New; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;&lt;font size=2&gt;Program&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;class&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;EventsClient&lt;/span&gt;&lt;font color=#000000&gt; : &lt;/font&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;&lt;font size=2&gt;ITweetieEvents&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;&lt;font color=#000000&gt; OnTweet(&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Tweet&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt; tweet)&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;&lt;font color=#000000&gt;.WriteLine(&lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"[{0}]
{1}:{2}"&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;, tweet.Time, tweet.User, tweet.Text);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;&lt;font color=#000000&gt; Main(&lt;/font&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;[]
args)&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;font color=#000000&gt; usageMessage
= &lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"Usage: IMBotClient &amp;lt;messenger-email-address&amp;gt;"&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;;&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt; (args.Length
== 0)&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;&lt;/font&gt;&lt;font color=#000000&gt;&lt;font size=2&gt;.WriteLine(usageMessage);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&lt;font size=2&gt;else&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;font color=#000000&gt; (!&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Regex&lt;/span&gt;&lt;font color=#000000&gt;.IsMatch(args[0], &lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;@"^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))$"&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;))&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;.WriteLine(usageMessage);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;&lt;font color=#000000&gt;.WriteLine(&lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"'{0}'
is not a valid email address"&lt;/span&gt;&lt;/font&gt;&lt;font color=#000000&gt;&lt;font size=2&gt;);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&lt;font size=2&gt;else&lt;br&gt;
&lt;/font&gt;&lt;/span&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Run(args[0]);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;&lt;font color=#000000&gt; Run(&lt;/font&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt; emailAddress)&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;EndpointAddress&lt;/span&gt;&lt;font color=#000000&gt; serviceAddress
= 
&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; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;EndpointAddress&lt;/span&gt;&lt;font color=#000000&gt;(&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;String&lt;/span&gt;&lt;font color=#000000&gt;.Format(&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;String&lt;/span&gt;&lt;font color=#000000&gt;.Format(&lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"sb://{0}/services/tweetiebot/{1}/service"&lt;/span&gt;&lt;font color=#000000&gt;,&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;RelayBinding&lt;/span&gt;&lt;font color=#000000&gt;.DefaultRelayHostName, &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Uri&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;.EscapeDataString(emailAddress))));&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;EndpointAddress&lt;/span&gt;&lt;font color=#000000&gt; eventsAddress
= 
&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; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;EndpointAddress&lt;/span&gt;&lt;font color=#000000&gt;(&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;String&lt;/span&gt;&lt;font color=#000000&gt;.Format(&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;String&lt;/span&gt;&lt;font color=#000000&gt;.Format(&lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"sb://{0}/services/tweetiebot/{1}/events"&lt;/span&gt;&lt;font color=#000000&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; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;RelayBinding&lt;/span&gt;&lt;font color=#000000&gt;.DefaultRelayHostName, &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Uri&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;.EscapeDataString(emailAddress))));&lt;br&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;font face=Verdana color=#003300&gt;The URI scheme for
services that hook into the ISB is "sb:" and the default address of the relay is encoded
in the SDK assemblies. We set up two endpoints here. One for the client channel to
fetch the initial list and one for the event subscriber.&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: Courier New; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;RelayBinding&lt;/span&gt;&lt;font color=#000000&gt; relayBinding
= &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;RelayBinding&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;();&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;ServiceHost&lt;/span&gt;&lt;font color=#000000&gt; eventsHost
= &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;ServiceHost&lt;/span&gt;&lt;font color=#000000&gt;(&lt;/font&gt;&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;&lt;font color=#000000&gt;(&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;EventsClient&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;));&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;RelayBinding&lt;/span&gt;&lt;font color=#000000&gt; eventBinding
= &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;RelayBinding&lt;/span&gt;&lt;font color=#000000&gt;(&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;RelayConnectionMode&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;.RelayedMulticast);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;eventsHost.AddServiceEndpoint(&lt;/font&gt;&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;&lt;font color=#000000&gt;(&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;ITweetieEvents&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;),
eventBinding, eventsAddress.ToString());&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;eventsHost.Open();&lt;br&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;ChannelFactory&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;TweetieBotChannel&lt;/span&gt;&lt;font color=#000000&gt;&amp;gt;
channelFactory = &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;ChannelFactory&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;TweetieBotChannel&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;&amp;gt;(relayBinding,
serviceAddress);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;TweetieBotChannel&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt; channel
= channelFactory.CreateChannel();&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;channel.Open();&lt;br&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face=Verdana color=#003300&gt;The
two *.Open() calls will each prompt for a CardSpace authentication, so you will have
to be &lt;a href="https://identity.biztalk.net/MemberRegister.aspx"&gt;registered&lt;/a&gt; to
run the sample.&amp;nbsp;Once&amp;nbsp;you have&amp;nbsp;opened the channels (and my service is
running), you'll be able to pull the list of current tweets.&amp;nbsp;Meanwhile, whenever
a new event pops up, the &lt;em&gt;EventsClient&lt;/em&gt; above will write out a new line.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: Courier New; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;IList&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Tweet&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;&amp;gt;
tweets = channel.GetTweets(lastTime);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt;&lt;font color=#000000&gt; (&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Tweet&lt;/span&gt;&lt;font color=#000000&gt; tweet &lt;/font&gt;&lt;span style="COLOR: blue"&gt;in&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt; tweets)&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;&lt;font color=#000000&gt;.WriteLine(&lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"[{0}]
{1}:{2}"&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;, tweet.Time, tweet.User, tweet.Text);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;&lt;font color=#000000&gt;.WriteLine(&lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"Press
ENTER to quit at any time"&lt;/span&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;);&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;.ReadLine();&lt;br&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;eventsHost.Close();&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;channel.Close();&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;channelFactory.Close();&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;}&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: Courier New; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;&lt;font color=#000000 size=2&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt; 
&lt;p&gt;
&lt;br&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face=Verdana color=#003300&gt;So
when you run the app, you can chat (anyone can, you don't need to be a buddy) &lt;a href="mailto:tweetiebot@hotmail.com"&gt;tweetiebot@hotmail.com&lt;/a&gt; through
Live Messenger and you'll see your chat lines (and potentially others') popping out
as events from the service bus. &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face=Verdana color=#003300&gt;To
run the sample with my bot, you need to call the client with "IMBotClient tweetiebot@hotmail.com"
and select your BizTalk Services Information Card twice as you are prompted.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="mso-spacerun: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face=Verdana color=#003300&gt;&lt;strong&gt;Privacy
notice&lt;/strong&gt;: I'm anonymizing the name of the contact only insofar as I'm clipping
anything&amp;nbsp;including and following&amp;nbsp;the "at" sign of the user that chats the
bot. So whatever you say is published as "&lt;em&gt;emailname&lt;/em&gt;: text line"&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/font&gt;&lt;/span&gt;&gt;
&lt;a href="http://friends.newtelligence.net/clemensv/content/binary/IMBotClient.zip"&gt;IMBotClient.zip
(3.61 KB)&lt;/a&gt;&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=603e2393-c8de-40dd-b2e9-88f504b44149" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,603e2393-c8de-40dd-b2e9-88f504b44149.aspx</comments>
      <category>Technology</category>
      <category>Technology/BizTalk</category>
      <category>Technology/CardSpace</category>
      <category>Technology/ISB</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=22aef11a-20e4-4583-ae05-8ad0c15c7526</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,22aef11a-20e4-4583-ae05-8ad0c15c7526.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,22aef11a-20e4-4583-ae05-8ad0c15c7526.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=22aef11a-20e4-4583-ae05-8ad0c15c7526</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For those of you who couldn't make it to MIX, here are the (Silverlight-) videos of
the talks from the Connected Systems Division deep-linked to <a href="http://sessions.visitmix.com">sessions.visitmix.com</a></p>
        <ul>
          <li>
            <a href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/Default.html?title=DEV03 - Navigating the Programmable Web&amp;speakers=Don Box, Steve Maine&amp;source=videos/DEV03.wmv" target="_blank">Don
Box, Steve Maine: <strong>Navigating the Programmable Web</strong></a>
          </li>
          <li>
            <a href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/Default.html?title=XBD07 - Enable Windows CardSpace and Information Cards in Your Web Site&amp;speakers=Garrett Serack, Mike Jones, Pat Felsted&amp;source=videos/XBD07.wmv" target="_blank">Garrett
Serack, Mike Jones, Pat Felsted: <strong>Enable Windows CardSpace and Information
Cards on Your Web Site</strong></a>
          </li>
          <li>
            <a href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/Default.html?title=PAN03 - PANEL DISCUSSION: Digital Identity and the Psychology of Security&amp;speakers=Kaliya Hamlin, Kim Cameron, Laurie Rae, Marc Canter, Scott Kveton&amp;source=videos/PAN03.wmv" target="_blank">Kim
Cameron and Panel: <strong>Digital Identity and the Psychology of Security</strong></a>
          </li>
        </ul>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=22aef11a-20e4-4583-ae05-8ad0c15c7526" />
      </body>
      <title>Connected Systems @MIX: The Videos</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,22aef11a-20e4-4583-ae05-8ad0c15c7526.aspx</guid>
      <link>http://vasters.com/clemensv/2007/05/05/Connected+Systems+MIX+The+Videos.aspx</link>
      <pubDate>Sat, 05 May 2007 04:07:23 GMT</pubDate>
      <description>&lt;p&gt;
For those of you who couldn't make it to MIX, here are the (Silverlight-) videos of
the talks from the Connected Systems Division deep-linked to &lt;a href="http://sessions.visitmix.com"&gt;sessions.visitmix.com&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/Default.html?title=DEV03 - Navigating the Programmable Web&amp;amp;speakers=Don Box, Steve Maine&amp;amp;source=videos/DEV03.wmv" target=_blank&gt;Don
Box, Steve Maine: &lt;strong&gt;Navigating the Programmable Web&lt;/strong&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/Default.html?title=XBD07 - Enable Windows CardSpace and Information Cards in Your Web Site&amp;amp;speakers=Garrett Serack, Mike Jones, Pat Felsted&amp;amp;source=videos/XBD07.wmv" target=_blank&gt;Garrett
Serack, Mike Jones, Pat Felsted: &lt;strong&gt;Enable Windows CardSpace and Information
Cards on Your Web Site&lt;/strong&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://int1.fp.sandpiper.net/soma/applications/silverlight/v1/Default.html?title=PAN03 - PANEL DISCUSSION: Digital Identity and the Psychology of Security&amp;amp;speakers=Kaliya Hamlin, Kim Cameron, Laurie Rae, Marc Canter, Scott Kveton&amp;amp;source=videos/PAN03.wmv" target=_blank&gt;Kim
Cameron and Panel: &lt;strong&gt;Digital Identity and the Psychology of Security&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=22aef11a-20e4-4583-ae05-8ad0c15c7526" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,22aef11a-20e4-4583-ae05-8ad0c15c7526.aspx</comments>
      <category>Talks</category>
      <category>Technology</category>
      <category>Technology/CardSpace</category>
      <category>Technology/WCF</category>
    </item>
    <item>
      <trackback:ping>http://vasters.com/clemensv/Trackback.aspx?guid=4ee51b44-49bd-4b10-8960-74fe1af93f3f</trackback:ping>
      <pingback:server>http://vasters.com/clemensv/pingback.aspx</pingback:server>
      <pingback:target>http://vasters.com/clemensv/PermaLink,guid,4ee51b44-49bd-4b10-8960-74fe1af93f3f.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://vasters.com/clemensv/CommentView,guid,4ee51b44-49bd-4b10-8960-74fe1af93f3f.aspx</wfw:comment>
      <wfw:commentRss>http://vasters.com/clemensv/SyndicationService.asmx/GetEntryCommentsRss?guid=4ee51b44-49bd-4b10-8960-74fe1af93f3f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Before I continue pointing out SDK samples, why not take a look at a great end-to-end
.NET Framework 3.0 demo first? It's been out there for a while and hence this isn't
really news, but in case you've not seen it (or the latest revision of it) go
check out <a href="http://www.dinnernow.net">DinnerNow</a>. The demo covers WCF, Workflow,
CardSpace and PowerShell. Awesome piece of work from our Evangelism team. 
</p>
        <img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=4ee51b44-49bd-4b10-8960-74fe1af93f3f" />
      </body>
      <title>Dinner Now</title>
      <guid isPermaLink="false">http://vasters.com/clemensv/PermaLink,guid,4ee51b44-49bd-4b10-8960-74fe1af93f3f.aspx</guid>
      <link>http://vasters.com/clemensv/2007/04/02/Dinner+Now.aspx</link>
      <pubDate>Mon, 02 Apr 2007 19:46:26 GMT</pubDate>
      <description>&lt;p&gt;
Before I continue pointing out SDK samples, why not take a look at a&amp;nbsp;great end-to-end
.NET Framework 3.0 demo first? It's been out there for a while and hence this isn't
really news, but in case you've not seen it (or the latest revision of it)&amp;nbsp;go
check out &lt;a href="http://www.dinnernow.net"&gt;DinnerNow&lt;/a&gt;. The demo covers WCF, Workflow,
CardSpace and PowerShell. Awesome piece of work from our Evangelism team. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vasters.com/clemensv/aggbug.ashx?id=4ee51b44-49bd-4b10-8960-74fe1af93f3f" /&gt;</description>
      <comments>http://vasters.com/clemensv/CommentView,guid,4ee51b44-49bd-4b10-8960-74fe1af93f3f.aspx</comments>
      <category>Technology/WCF</category>
      <category>Technology/Workflow</category>
      <category>Technology/CardSpace</category>
    </item>
  </channel>
</rss>