<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>Matevž Gačnik's Weblog - Web Services</title>
    <link>https://www.request-response.com/blog/</link>
    <description>Technology Philanthropy</description>
    <image>
      <url>http://www.request-response.com/blog/images/favicon.jpg</url>
      <title>Matevž Gačnik's Weblog - Web Services</title>
      <link>https://www.request-response.com/blog/</link>
    </image>
    <language>en-us</language>
    <copyright>Matevz Gacnik</copyright>
    <lastBuildDate>Wed, 05 Oct 2011 09:17:31 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8102.813</generator>
    <managingEditor>matevz.gacnik@gmail.com</managingEditor>
    <webMaster>matevz.gacnik@gmail.com</webMaster>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=7af864af-2514-4b2e-861f-ec58fabb0df9</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,7af864af-2514-4b2e-861f-ec58fabb0df9.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,7af864af-2514-4b2e-861f-ec58fabb0df9.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7af864af-2514-4b2e-861f-ec58fabb0df9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is the content from my <a href="http://www.bleedingedge.si">Bleeding Edge</a> talk
on <strong>pub/sub broker</strong> design and implementation.
</p>
        <p align="left">
          <img src="images/be2011logo.png" />
        </p>
        <p>
Due to constraints of the project (European Commission, funded by EU) I cannot publicly
distribute the implementation code at this time. <strike>I plan to do it after the
review process is done.</strike> It has been advised, that this probably won't be
the case.
</p>
        <p>
Specifically, this is:
</p>
        <ul>
          <li>
A message based pub/sub broker 
</li>
          <li>
Can use typed messages 
</li>
          <li>
Can be extended 
</li>
          <li>
Can communicate with anyone 
</li>
          <li>
Supports push and pull models 
</li>
          <li>
Can call you back 
</li>
          <li>
Service based 
</li>
          <li>
Fast (in memory) 
</li>
          <li>
Is currently fed by the Twitter gardenhose stream, for your pleasure</li>
        </ul>
        <p>
Anyway, I can discuss the implementation and design decisions, so here's the PPT (in
slovene only).
</p>
        <p>
Downloads: <a href="http://downloads.request-response.com/be2011ppt.zip">Bleeding
Edge 2011, PPTs</a><br />
Demo front-end: <a href="http://pubsub.gama-system.com/reflex/client">Here</a></p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=7af864af-2514-4b2e-861f-ec58fabb0df9" />
      </body>
      <title>Bleeding Edge: Pub/Sub Broker Design</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,7af864af-2514-4b2e-861f-ec58fabb0df9.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,7af864af-2514-4b2e-861f-ec58fabb0df9.aspx</link>
      <pubDate>Wed, 05 Oct 2011 09:17:31 GMT</pubDate>
      <description>&lt;p&gt;
This is the content from my &lt;a href="http://www.bleedingedge.si"&gt;Bleeding Edge&lt;/a&gt; talk
on &lt;strong&gt;pub/sub broker&lt;/strong&gt; design and implementation.
&lt;/p&gt;
&lt;p align=left&gt;
&lt;img src="images/be2011logo.png"&gt;
&lt;/p&gt;
&lt;p&gt;
Due to constraints of the project (European Commission, funded by EU) I cannot publicly
distribute the implementation code at this time. &lt;strike&gt;I plan to do it after the
review process is done.&lt;/strike&gt; It has been advised, that this probably won't be
the case.
&lt;/p&gt;
&lt;p&gt;
Specifically, this is:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
A message based pub/sub broker 
&lt;li&gt;
Can use typed messages 
&lt;li&gt;
Can be extended 
&lt;li&gt;
Can communicate with anyone 
&lt;li&gt;
Supports push and pull models 
&lt;li&gt;
Can call you back 
&lt;li&gt;
Service based 
&lt;li&gt;
Fast (in memory) 
&lt;li&gt;
Is currently fed by the Twitter gardenhose stream, for your pleasure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Anyway, I can discuss the implementation and design decisions, so here's the PPT (in
slovene only).
&lt;/p&gt;
&lt;p&gt;
Downloads: &lt;a href="http://downloads.request-response.com/be2011ppt.zip"&gt;Bleeding
Edge 2011, PPTs&lt;/a&gt;
&lt;br&gt;
Demo front-end: &lt;a href="http://pubsub.gama-system.com/reflex/client"&gt;Here&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=7af864af-2514-4b2e-861f-ec58fabb0df9" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,7af864af-2514-4b2e-861f-ec58fabb0df9.aspx</comments>
      <category>.NET 4.0 - General</category>
      <category>.NET 4.0 - WCF</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=e855a729-04c4-4504-b20d-037bd13f0ec2</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,e855a729-04c4-4504-b20d-037bd13f0ec2.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,e855a729-04c4-4504-b20d-037bd13f0ec2.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e855a729-04c4-4504-b20d-037bd13f0ec2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
There are a couple situations where one might use <font face="Courier New">svcutil.exe</font> in
command prompt vs. Add Service Reference in Visual Studio.
</p>
        <p>
At <em>least</em> a couple.
</p>
        <p>
I don't know who (or why) made a decision not to support namespace-less proxy generation
in  Visual Studio. It's a fact that if you make a service reference, you <strong>have
to specify a nested namespace</strong>.
</p>
        <p>
On the other end, there is an option to make the proxy class either public or internal,
which enables one to hide it from the outside world.
</p>
        <p>
That's a design flaw. There are numerous cases, where you would not want to create
another [1] namespace, because you are designing an object model that needs to be
clean.
</p>
        <p>
          <font size="1">[1] This is only limited to local type system namespace declarations
- it does not matter what you are sending over the wire.</font>
        </p>
        <p>
Consider the following namespace and class hierarchy that uses a service proxy (<font face="Courier New">MyNamespace.Service</font> class
uses it):
</p>
        <p>
          <img src="http://www.request-response.com/blog/images/namespace4.png" />
        </p>
        <p>
Suppose that the <font face="Courier New">Service</font> class uses a WCF service,
which synchronizes articles and comments with another system. If you use Add Web Reference,
there is no way to hide the generated service namespace. One would probably define <font face="Courier New">MyNamespace.MyServiceProxy</font> as
a namespace and declared a using statement in <font face="Courier New">MyNamespace.MyService</font> scope
with:
</p>
        <p>
          <font face="Courier New">using MyNamespace.MyServiceProxy;</font>
        </p>
        <p>
This results in a dirty object model - your clients will see your internals and that
shouldn't be an option.
</p>
        <p>
          <img src="http://www.request-response.com/blog/images/namespace1.png" />
        </p>
        <p>
Your class hierarchy now has another namespace, called <font face="Courier New">MyNamespace.ServiceProxy</font>,
which is actually only used inside the <font face="Courier New">MyNamespace.Service</font> class.
</p>
        <p>
What one can do is insist that the generated classes are marked <font face="Courier New">internal</font>,
hiding the classes from the outside world, but still leaving an empty namespace visible
for instantiating assemblies.
</p>
        <p>
          <img src="http://www.request-response.com/blog/images/namespace3.png" />
        </p>
        <p>
Leaving only the namespace visible, with no public classes in it is pure cowardness. 
</p>
        <p>
Not good.
</p>
        <p>
Since there is no <font face="Courier New">internal</font> namespace modifier in .NET,
you have no other way of hiding your namespace, even if you demand internal classes
to be generated by the Add Service Reference dialog.
</p>
        <p>
So, <font face="Courier New">svcutil.exe</font> to the rescue:
</p>
        <p>
          <font face="Courier New">svcutil.exe &lt;metadata endpoint&gt;<br />
   /namespace:*, MyNamespace<br />
   /internal 
<br />
   /out:ServiceProxyClass.cs</font>
        </p>
        <p>
The <font face="Courier New">/namespace</font> option allows you to map between XML
and CLR namespace declarations. The preceding examples maps all (therefore <font face="Courier New">*</font>)
existing XML namespaces in service metadata to <font face="Courier New">MyNamespace</font> CLR
namespace.
</p>
        <p>
The example will generate a service proxy class, mark it <font face="Courier New">internal</font> and
put it into the desired namespace.
</p>
        <p>
Your object model will look like this:
</p>
        <p>
          <img src="http://www.request-response.com/blog/images/namespace2.png" />
        </p>
        <p>
Currently, this is the only way to hide the internals of service communication with
a proxy and still being able to keep your object model clean.
</p>
        <p>
Note that this is useful when you want to wrap an existing service proxy or hide a
certain already supported service implementation detail in your object model. Since
your client code does <em>not need</em> to have access to complete service proxy (or
you want to enhance it), it shouldn't be a problem to hide it completely.
</p>
        <p>
Considering options during proxy generation, per method access modifiers would be
beneficial too.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=e855a729-04c4-4504-b20d-037bd13f0ec2" />
      </body>
      <title>Designing Clean Object Models with SvcUtil.exe</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,e855a729-04c4-4504-b20d-037bd13f0ec2.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,e855a729-04c4-4504-b20d-037bd13f0ec2.aspx</link>
      <pubDate>Fri, 10 Apr 2009 21:06:43 GMT</pubDate>
      <description>&lt;p&gt;
There are a couple situations where one might use &lt;font face="Courier New"&gt;svcutil.exe&lt;/font&gt; in
command prompt vs. Add Service Reference in Visual Studio.
&lt;/p&gt;
&lt;p&gt;
At &lt;em&gt;least&lt;/em&gt; a couple.
&lt;/p&gt;
&lt;p&gt;
I don't know who (or why) made a decision not to support namespace-less proxy generation
in&amp;nbsp; Visual Studio. It's a fact that if you make a service reference, you &lt;strong&gt;have
to specify a nested namespace&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
On the other end, there is an option to make the proxy class either public or internal,
which enables one to hide it from the outside world.
&lt;/p&gt;
&lt;p&gt;
That's a design flaw. There are numerous cases, where you would not want to create
another [1] namespace, because you are designing an object model that needs to be
clean.
&lt;/p&gt;
&lt;p&gt;
&lt;font size=1&gt;[1] This is only limited to local type system namespace declarations
- it does not matter what you are sending over the wire.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Consider the following namespace and class hierarchy that uses a service proxy (&lt;font face="Courier New"&gt;MyNamespace.Service&lt;/font&gt; class
uses it):
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.request-response.com/blog/images/namespace4.png"&gt;
&lt;/p&gt;
&lt;p&gt;
Suppose that the &lt;font face="Courier New"&gt;Service&lt;/font&gt; class uses a WCF service,
which synchronizes articles and comments with another system. If you use Add Web Reference,
there is no way to hide the generated service namespace. One would probably define &lt;font face="Courier New"&gt;MyNamespace.MyServiceProxy&lt;/font&gt; as
a namespace and declared a using statement in &lt;font face="Courier New"&gt;MyNamespace.MyService&lt;/font&gt; scope
with:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;using MyNamespace.MyServiceProxy;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
This results in a dirty object model - your clients will see your internals and that
shouldn't be an option.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.request-response.com/blog/images/namespace1.png"&gt;
&lt;/p&gt;
&lt;p&gt;
Your class hierarchy now has another namespace, called &lt;font face="Courier New"&gt;MyNamespace.ServiceProxy&lt;/font&gt;,
which is actually only used inside the &lt;font face="Courier New"&gt;MyNamespace.Service&lt;/font&gt; class.
&lt;/p&gt;
&lt;p&gt;
What one can do is insist that the generated classes are marked &lt;font face="Courier New"&gt;internal&lt;/font&gt;,
hiding the classes from the outside world, but still leaving an empty namespace visible
for instantiating assemblies.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.request-response.com/blog/images/namespace3.png"&gt;
&lt;/p&gt;
&lt;p&gt;
Leaving only the namespace visible, with no public classes in it is pure cowardness. 
&lt;/p&gt;
&lt;p&gt;
Not good.
&lt;/p&gt;
&lt;p&gt;
Since there is no &lt;font face="Courier New"&gt;internal&lt;/font&gt; namespace modifier in .NET,
you have no other way of hiding your namespace, even if you demand internal classes
to be generated by the Add Service Reference dialog.
&lt;/p&gt;
&lt;p&gt;
So, &lt;font face="Courier New"&gt;svcutil.exe&lt;/font&gt; to the rescue:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;svcutil.exe &amp;lt;metadata endpoint&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; /namespace:*, MyNamespace&lt;br&gt;
&amp;nbsp;&amp;nbsp; /internal 
&lt;br&gt;
&amp;nbsp;&amp;nbsp; /out:ServiceProxyClass.cs&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
The &lt;font face="Courier New"&gt;/namespace&lt;/font&gt; option allows you to map between XML
and CLR namespace declarations. The preceding examples maps all (therefore &lt;font face="Courier New"&gt;*&lt;/font&gt;)
existing XML namespaces in service metadata to &lt;font face="Courier New"&gt;MyNamespace&lt;/font&gt; CLR
namespace.
&lt;/p&gt;
&lt;p&gt;
The example will generate a service proxy class, mark it &lt;font face="Courier New"&gt;internal&lt;/font&gt; and
put it into the desired namespace.
&lt;/p&gt;
&lt;p&gt;
Your object model will look like this:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.request-response.com/blog/images/namespace2.png"&gt;
&lt;/p&gt;
&lt;p&gt;
Currently, this is the only way to hide the internals of service communication with
a proxy and still being able to keep your object model clean.
&lt;/p&gt;
&lt;p&gt;
Note that this is useful when you want to wrap an existing service proxy or hide a
certain already supported service implementation detail in your object model. Since
your client code does &lt;em&gt;not need&lt;/em&gt; to have access to complete service proxy (or
you want to enhance it), it shouldn't be a problem to hide it completely.
&lt;/p&gt;
&lt;p&gt;
Considering options during proxy generation, per method access modifiers would be
beneficial too.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=e855a729-04c4-4504-b20d-037bd13f0ec2" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,e855a729-04c4-4504-b20d-037bd13f0ec2.aspx</comments>
      <category>.NET 3.5 - WCF</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=3e45c176-f86b-4b60-b0a5-9425631e2438</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,3e45c176-f86b-4b60-b0a5-9425631e2438.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,3e45c176-f86b-4b60-b0a5-9425631e2438.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3e45c176-f86b-4b60-b0a5-9425631e2438</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm sorry it took a week, but here we go.
</p>
        <p>
This is my exit content from <a href="http://www.bleedingedge.si/">Bleeding Edge 2008</a>.
I'm also posting complete conference contents, just in case.
</p>
        <p>
          <img src="http://www.request-response.com/blog/content/binary/be2008.jpg" />
        </p>
        <p>
Thanks go out to <a href="http://blogs.solidq.com/EN/dzupancic/default.aspx">Dušan</a>, <a href="http://blogs.solidq.com/EN/dsarka/default.aspx">Dejan</a>, <a href="http://www.mihavalencic.com/?p=124">Miha</a>, <a href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/10/03/Material-from-my-_2200_Make-ORM-applications-more-secure_2F00_Naredimo-ORM-aplikacije-varnej_6101_e_2200_-presentation.aspx">Miha</a> and <a href="http://www.krneki.net/blog/">Miha</a>.
</p>
        <p>
Downloads:
</p>
        <ul>
          <li>
Middle Tier Design Unleashed: <a href="http://downloads.request-response.com/BleedingEdge2008_MiddleTier.zip">PPT
&amp; Code</a></li>
          <li>
Complete Conference: <a href="http://downloads.request-response.com/BleedingEdge2008.zip">PPT
&amp; Code</a></li>
        </ul>
        <p>
          <font color="#808080" size="1">Remark: PPT in Slovene only. Code international.</font>
        </p>
        <p>
Thank you for attending. Hope to see you next year!
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3e45c176-f86b-4b60-b0a5-9425631e2438" />
      </body>
      <title>Bleeding Edge 2008: Postback</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,3e45c176-f86b-4b60-b0a5-9425631e2438.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,3e45c176-f86b-4b60-b0a5-9425631e2438.aspx</link>
      <pubDate>Thu, 09 Oct 2008 19:42:02 GMT</pubDate>
      <description>&lt;p&gt;
I'm sorry it took a week, but here we go.
&lt;/p&gt;
&lt;p&gt;
This is my exit content from &lt;a href="http://www.bleedingedge.si/"&gt;Bleeding Edge 2008&lt;/a&gt;.
I'm also posting complete conference contents, just in case.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.request-response.com/blog/content/binary/be2008.jpg"&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks go out to &lt;a href="http://blogs.solidq.com/EN/dzupancic/default.aspx"&gt;Dušan&lt;/a&gt;, &lt;a href="http://blogs.solidq.com/EN/dsarka/default.aspx"&gt;Dejan&lt;/a&gt;, &lt;a href="http://www.mihavalencic.com/?p=124"&gt;Miha&lt;/a&gt;, &lt;a href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2008/10/03/Material-from-my-_2200_Make-ORM-applications-more-secure_2F00_Naredimo-ORM-aplikacije-varnej_6101_e_2200_-presentation.aspx"&gt;Miha&lt;/a&gt; and &lt;a href="http://www.krneki.net/blog/"&gt;Miha&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Downloads:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Middle Tier Design Unleashed: &lt;a href="http://downloads.request-response.com/BleedingEdge2008_MiddleTier.zip"&gt;PPT
&amp;amp; Code&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Complete Conference: &lt;a href="http://downloads.request-response.com/BleedingEdge2008.zip"&gt;PPT
&amp;amp; Code&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;font color=#808080 size=1&gt;Remark: PPT in Slovene only. Code international.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Thank you for attending. Hope to see you next year!
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3e45c176-f86b-4b60-b0a5-9425631e2438" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,3e45c176-f86b-4b60-b0a5-9425631e2438.aspx</comments>
      <category>CLR</category>
      <category>Conferences</category>
      <category>Microsoft</category>
      <category>Web Services</category>
      <category>Work</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=ff5fab81-affb-4b2b-aa67-c80bdfc86cbd</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,ff5fab81-affb-4b2b-aa67-c80bdfc86cbd.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,ff5fab81-affb-4b2b-aa67-c80bdfc86cbd.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ff5fab81-affb-4b2b-aa67-c80bdfc86cbd</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In WCF, collection data that is passed through the service boundary goes through a <em>type
filter </em>- meaning you will not necessarily get the <em>intrinsic service side
type</em> on the client, even if you're <strong>expecting it</strong>.
</p>
        <p>
No matter if you throw back an <font face="Courier New">int[]</font> or <font face="Courier New">List&lt;int&gt;,</font> you
will get the <font face="Courier New">int[]</font> by default on the client.
</p>
        <p>
The main reason is that there is no representation for <font face="Courier New">System.Collections.Generic.List</font> or <font face="Courier New">System.Collection.Generic.LinkedList</font> in
service metadata. The concept of <font face="Courier New">System.Collection.Generic.List&lt;int&gt;</font> for
example, actually does not have a different semantic meaning from an <em>integer array</em> -
it's still a list of <em>ints</em> - but will allow you to program against it with
ease.
</p>
        <p>
Though, if one asks nicely, <strong>it is possible</strong> to guarantee the preferred
collection type on the client proxy in certain scenarios.
</p>
        <p>
Unidimensional collections, like <font face="Courier New">List&lt;T&gt;</font>, <font face="Courier New">LinkedList&lt;T&gt;</font> or <font face="Courier New">SortedList&lt;T&gt;</font> are
always exposed as <font face="Courier New">T</font> arrays in the client proxy. <font face="Courier New">Dictionary&lt;K,
V&gt;</font>, though, is regened on the client via an annotation hint in WSDL (XSD
if we are precise). More on that later.
</p>
        <p>
Let's look into it.
</p>
        <p>
WCF infrastructure bends over backwards to simplify client development. If the service
side contains a really serializable collection (marked with <font face="Courier New">[Serializable]</font>,
not <font face="Courier New">[DataContract]</font>) that is also concrete (not an
interface), and has an <font face="Courier New">Add</font> method with the following
signatures...
</p>
        <p>
          <font face="Courier New">public void Add(object obj);<br />
public void Add(T item); </font>
        </p>
        <p>
... then WCF will serialize the data to an array of the collections type.
</p>
        <p>
Too complicated? Consider the following:
</p>
        <p>
          <font face="Courier New">[ServiceContract]<br />
interface ICollect<br />
{<br />
   [OperationContract]<br />
   public void AddCoin(Coin coin);</font>
        </p>
        <p>
          <font face="Courier New">   [OperationContract]<br />
   public List&lt;Coin&gt; GetCoins();<br />
}</font>
        </p>
        <p>
Since the <font face="Courier New">List&lt;T&gt;</font> supports a <font face="Courier New">void
Add&lt;T&gt;</font> method and is marked with <font face="Courier New">[Serializable]</font>,
the following wire representation will be passed to the client:
</p>
        <p>
          <font face="Courier New">[ServiceContract]<br />
interface ICollect<br />
{<br />
  [OperationContract]<br />
  void AddCoin(Coin coin);</font>
        </p>
        <p>
          <font face="Courier New">  [OperationContract]<br />
  Coin[] GetCoins();<br />
}<br /></font>
          <font size="1">
            <br />
Note: <font face="Courier New">Coin</font> class should be marked either with a <font face="Courier New">[DataContract]</font> or <font face="Courier New">[Serializable]</font> in
this case.</font>
        </p>
        <p>
So what happens if one wants the same contract <em>on the client proxy and the service</em>?
There is an option in the WCF proxy generator, <font face="Courier New">svcutil.exe</font> to
force generation of class definitions with a specific collection type.
</p>
        <p>
Use the following for <font face="Courier New">List&lt;T&gt;</font>:
</p>
        <p>
          <font face="Courier New">svcutil.exe http://service/metadata/address<br />
  /collectionType:System.Collections.Generic.List`1<br /><br /></font>
          <font size="1">Note: <font face="Courier New">List`1</font> uses back quote,
not normal single quote character.</font>
        </p>
        <p>
What the <font face="Courier New">/collectionType</font> (short <font face="Courier New">/ct</font>)
does, is forces generation of strongly typed collection types. It will generate the
holy grail on the client:
</p>
        <p>
          <font face="Courier New">[ServiceContract]<br />
interface ICollect<br />
{<br />
  [OperationContract]<br />
  void AddCoin(Coin coin);</font>
        </p>
        <p>
          <font face="Courier New">  [OperationContract]<br />
  List&lt;Coin&gt; GetCoins();<br />
}</font>
        </p>
        <p>
In Visual Studio 2008, you will even have an option to specify which types you want
to use as <em>collection types</em> and <em>dictionary collection types</em>, as in
the following picture:
</p>
        <p>
          <img src="http://www.request-response.com/blog/images/vs2008servicereference.jpg" />
        </p>
        <p>
On the other hand, dictionary collections, as in <font face="Courier New">System.Collections.Generic.Dictionary&lt;K,
V&gt;</font> collections, will go through to the client no matter what you specify
as a <font face="Courier New">/ct</font> parameter (or don't at all).
</p>
        <p>
If you define the following on the service side...
</p>
        <p>
          <font face="Courier New">[OperationContract]<br />
Dictionary&lt;string, int&gt; GetFoo();</font>
        </p>
        <p>
... this will get generated on the client:
</p>
        <p>
          <font face="Courier New">[OperationContract]<br />
Dictionary&lt;string, int&gt; GetFoo();</font>
        </p>
        <p>
          <strong>Why?</strong>
        </p>
        <p>
Because using <font face="Courier New">System.Collections.Generic.Dictionary</font> probably
means <strong>you</strong> know there is no guarantee that client side representation
will be possible if you are using an alternative platform. There is no way to meaningfully
convey the semantics of a .NET dictionary class using WSDL/XSD. 
</p>
        <p>
          <strong>So, how does the client know?</strong>
        </p>
        <p>
In fact, the values are serialized as <strong>joined name value pair elements</strong> as
the following schema says:
</p>
        <p>
          <font face="Courier New">&lt;xs:complexType name="ArrayOfKeyValueOfstringint"&gt;<br /><font color="#a52a2a">  &lt;xs:annotation&gt;<br />
    &lt;xs:appinfo&gt;<br />
      &lt;IsDictionary<br />
        xmlns="</font></font>
          <font face="Courier New" color="#a52a2a">http://schemas.microsoft.com/2003/10/Serialization/</font>
          <font face="Courier New">
            <font color="#a52a2a">"&gt;<br />
        true<br />
      &lt;/IsDictionary&gt; 
<br />
    &lt;/xs:appinfo&gt;<br />
  &lt;/xs:annotation&gt;<br /></font>  &lt;xs:sequence&gt;<br />
    &lt;xs:element minOccurs="0" maxOccurs="unbounded"<br />
      name="KeyValueOfstringint"&gt;<br />
      &lt;xs:complexType&gt;<br />
        &lt;xs:sequence&gt;<br />
          &lt;xs:element name="Key" nillable="true"
type="xs:string" /&gt; 
<br />
          &lt;xs:element name="Value"
type="xs:int" /&gt; 
<br />
        &lt;/xs:sequence&gt;<br />
      &lt;/xs:complexType&gt;<br />
    &lt;/xs:element&gt;<br />
  &lt;/xs:sequence&gt;<br />
&lt;/xs:complexType&gt;<br />
&lt;xs:element name="ArrayOfKeyValueOfstringint"<br />
  nillable="true" type="tns:ArrayOfKeyValueOfstringint" /&gt;<br /><br /></font>
          <font size="1">Note: You can find this schema under <font face="Courier New">types</font> definition
of the metadata endpoint. Usually <font face="Courier New">?xsd=xsd2</font>, instead
of <font face="Courier New">?wsdl</font> will suffice.</font>
        </p>
        <p>
As in:
</p>
        <p>
          <font face="Courier New">&lt;GetFooResponse&gt;<br />
  &lt;KeyValueOfstringint&gt;<br />
    &lt;Key&gt;one&lt;/Key&gt;<br />
    &lt;Value&gt;1&lt;/Value&gt;</font>
        </p>
        <p>
          <font face="Courier New">    &lt;Key&gt;two&lt;/Key&gt;<br />
    &lt;Value&gt;2&lt;/Value&gt;</font>
        </p>
        <p>
          <font face="Courier New">    &lt;!-- ... --&gt;</font>
        </p>
        <p>
          <font face="Courier New">    &lt;Key&gt;N&lt;/Key&gt;<br />
    &lt;Value&gt;N&lt;/Value&gt;<br />
  &lt;/KeyValueOfstringint&gt;<br />
&lt;GetFooResponse&gt;</font>
        </p>
        <p>
The meaningful part of type service-to-client-transportation resides in <font face="Courier New">&lt;xs:annotation&gt;</font> element,
specifically in <font face="Courier New">/xs:annotation/xs:appinfo/IsDictionary</font> element,
which defines that this complex type represents a <font face="Courier New">System.Collections.Generic.Dictionary</font> class. <a href="http://www.w3.org/TR/xmlschema-0/#CommVers">Annotation</a> elements
in XML Schema are parser specific and do not convey any structure/data type semantics,
but are there <em>for the receiver to interpret</em>.
</p>
        <p>
This must be one of the <strong>most excellent school cases</strong> of using XML
Schema <a href="http://www.w3.org/TR/xmlschema-0/#CommVers">annotations</a>. It allows
the well-informed client (as in .NET client, VS 2008 or <font face="Courier New">svcutil.exe</font>)
to utilize the semantic meaning if it understands it. If not, no harm is done since
the best possible representation, in a form of joined name value pairs still goes
through to the client.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=ff5fab81-affb-4b2b-aa67-c80bdfc86cbd" />
      </body>
      <title>WCF: Passing Collections Through Service Boundaries, Why and How</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,ff5fab81-affb-4b2b-aa67-c80bdfc86cbd.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,ff5fab81-affb-4b2b-aa67-c80bdfc86cbd.aspx</link>
      <pubDate>Thu, 27 Sep 2007 21:04:47 GMT</pubDate>
      <description>&lt;p&gt;
In WCF, collection data that is passed through the service boundary goes through a &lt;em&gt;type
filter &lt;/em&gt;- meaning you will not necessarily get the &lt;em&gt;intrinsic service side
type&lt;/em&gt; on the client, even if you're &lt;strong&gt;expecting it&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
No matter if you throw back an &lt;font face="Courier New"&gt;int[]&lt;/font&gt; or &lt;font face="Courier New"&gt;List&amp;lt;int&amp;gt;,&lt;/font&gt; you
will get the &lt;font face="Courier New"&gt;int[]&lt;/font&gt; by default on the client.
&lt;/p&gt;
&lt;p&gt;
The main reason is that there is no representation for &lt;font face="Courier New"&gt;System.Collections.Generic.List&lt;/font&gt; or &lt;font face="Courier New"&gt;System.Collection.Generic.LinkedList&lt;/font&gt; in
service metadata. The concept of &lt;font face="Courier New"&gt;System.Collection.Generic.List&amp;lt;int&amp;gt;&lt;/font&gt; for
example, actually does not have a different semantic meaning from an &lt;em&gt;integer array&lt;/em&gt; -
it's still a list of &lt;em&gt;ints&lt;/em&gt; - but will allow you to program against it with
ease.
&lt;/p&gt;
&lt;p&gt;
Though, if one asks nicely, &lt;strong&gt;it is possible&lt;/strong&gt; to guarantee the preferred
collection type on the client proxy in certain scenarios.
&lt;/p&gt;
&lt;p&gt;
Unidimensional collections, like &lt;font face="Courier New"&gt;List&amp;lt;T&amp;gt;&lt;/font&gt;, &lt;font face="Courier New"&gt;LinkedList&amp;lt;T&amp;gt;&lt;/font&gt; or &lt;font face="Courier New"&gt;SortedList&amp;lt;T&amp;gt;&lt;/font&gt; are
always exposed as &lt;font face="Courier New"&gt;T&lt;/font&gt; arrays in the client proxy. &lt;font face="Courier New"&gt;Dictionary&amp;lt;K,
V&amp;gt;&lt;/font&gt;, though, is regened on the client via an annotation hint in WSDL (XSD
if we are precise). More on that later.
&lt;/p&gt;
&lt;p&gt;
Let's look into it.
&lt;/p&gt;
&lt;p&gt;
WCF infrastructure bends over backwards to simplify client development. If the service
side contains a really serializable collection (marked with &lt;font face="Courier New"&gt;[Serializable]&lt;/font&gt;,
not &lt;font face="Courier New"&gt;[DataContract]&lt;/font&gt;) that is also concrete (not an
interface), and has an &lt;font face="Courier New"&gt;Add&lt;/font&gt; method with the following
signatures...
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;public void Add(object obj);&lt;br&gt;
public void Add(T item); &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
... then WCF will serialize the data to an array of the collections type.
&lt;/p&gt;
&lt;p&gt;
Too complicated? Consider the following:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[ServiceContract]&lt;br&gt;
interface ICollect&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp; [OperationContract]&lt;br&gt;
&amp;nbsp;&amp;nbsp; public void AddCoin(Coin coin);&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp; [OperationContract]&lt;br&gt;
&amp;nbsp;&amp;nbsp; public List&amp;lt;Coin&amp;gt; GetCoins();&lt;br&gt;
}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Since the &lt;font face="Courier New"&gt;List&amp;lt;T&amp;gt;&lt;/font&gt; supports a &lt;font face="Courier New"&gt;void
Add&amp;lt;T&amp;gt;&lt;/font&gt; method and is marked with &lt;font face="Courier New"&gt;[Serializable]&lt;/font&gt;,
the following wire representation will be passed to the client:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[ServiceContract]&lt;br&gt;
interface ICollect&lt;br&gt;
{&lt;br&gt;
&amp;nbsp; [OperationContract]&lt;br&gt;
&amp;nbsp; void AddCoin(Coin coin);&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp; [OperationContract]&lt;br&gt;
&amp;nbsp; Coin[] GetCoins();&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;&lt;font size=1&gt;
&lt;br&gt;
Note: &lt;font face="Courier New"&gt;Coin&lt;/font&gt; class should be marked either with a &lt;font face="Courier New"&gt;[DataContract]&lt;/font&gt; or &lt;font face="Courier New"&gt;[Serializable]&lt;/font&gt; in
this case.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
So what happens if one wants the same contract &lt;em&gt;on the client proxy and the service&lt;/em&gt;?
There is an option in the WCF proxy generator, &lt;font face="Courier New"&gt;svcutil.exe&lt;/font&gt; to
force generation of class definitions with a specific collection type.
&lt;/p&gt;
&lt;p&gt;
Use the following for &lt;font face="Courier New"&gt;List&amp;lt;T&amp;gt;&lt;/font&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;svcutil.exe http://service/metadata/address&lt;br&gt;
&amp;nbsp; /collectionType:System.Collections.Generic.List`1&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font size=1&gt;Note: &lt;font face="Courier New"&gt;List`1&lt;/font&gt; uses back quote,
not normal single quote character.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
What the &lt;font face="Courier New"&gt;/collectionType&lt;/font&gt; (short &lt;font face="Courier New"&gt;/ct&lt;/font&gt;)
does, is forces generation of strongly typed collection types. It will generate the
holy grail on the client:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[ServiceContract]&lt;br&gt;
interface ICollect&lt;br&gt;
{&lt;br&gt;
&amp;nbsp; [OperationContract]&lt;br&gt;
&amp;nbsp; void AddCoin(Coin coin);&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp; [OperationContract]&lt;br&gt;
&amp;nbsp; List&amp;lt;Coin&amp;gt; GetCoins();&lt;br&gt;
}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
In Visual Studio 2008, you will even have an option to specify which types you want
to use as &lt;em&gt;collection types&lt;/em&gt; and &lt;em&gt;dictionary collection types&lt;/em&gt;, as in
the following picture:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.request-response.com/blog/images/vs2008servicereference.jpg"&gt;
&lt;/p&gt;
&lt;p&gt;
On the other hand, dictionary collections, as in &lt;font face="Courier New"&gt;System.Collections.Generic.Dictionary&amp;lt;K,
V&amp;gt;&lt;/font&gt; collections, will go through to the client no matter what you specify
as a &lt;font face="Courier New"&gt;/ct&lt;/font&gt; parameter (or don't at all).
&lt;/p&gt;
&lt;p&gt;
If you define the following on the service side...
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[OperationContract]&lt;br&gt;
Dictionary&amp;lt;string, int&amp;gt; GetFoo();&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
... this will get generated on the client:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[OperationContract]&lt;br&gt;
Dictionary&amp;lt;string, int&amp;gt; GetFoo();&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Why?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Because using &lt;font face="Courier New"&gt;System.Collections.Generic.Dictionary&lt;/font&gt; probably
means &lt;strong&gt;you&lt;/strong&gt; know there is no guarantee that client side representation
will be possible if you are using an alternative platform. There is no way to meaningfully
convey the semantics of a .NET dictionary class using WSDL/XSD. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;So, how does the client know?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
In fact, the values are serialized as &lt;strong&gt;joined name value pair elements&lt;/strong&gt; as
the following schema says:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;xs:complexType name="ArrayOfKeyValueOfstringint"&amp;gt;&lt;br&gt;
&lt;font color=#a52a2a&gt;&amp;nbsp; &amp;lt;xs:annotation&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xs:appinfo&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;IsDictionary&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns="&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" color=#a52a2a&gt;http://schemas.microsoft.com/2003/10/Serialization/&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#a52a2a&gt;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; true&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/IsDictionary&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xs:appinfo&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/xs:annotation&amp;gt;&lt;br&gt;
&lt;/font&gt;&amp;nbsp; &amp;lt;xs:sequence&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xs:element minOccurs="0" maxOccurs="unbounded"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name="KeyValueOfstringint"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xs:complexType&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xs:sequence&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xs:element name="Key" nillable="true"
type="xs:string" /&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xs:element name="Value"
type="xs:int" /&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xs:sequence&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xs:complexType&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xs:element&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/xs:sequence&amp;gt;&lt;br&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br&gt;
&amp;lt;xs:element name="ArrayOfKeyValueOfstringint"&lt;br&gt;
&amp;nbsp; nillable="true" type="tns:ArrayOfKeyValueOfstringint" /&amp;gt;&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font size=1&gt;Note: You can find this schema under &lt;font face="Courier New"&gt;types&lt;/font&gt; definition
of the metadata endpoint. Usually &lt;font face="Courier New"&gt;?xsd=xsd2&lt;/font&gt;, instead
of &lt;font face="Courier New"&gt;?wsdl&lt;/font&gt; will suffice.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
As in:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;GetFooResponse&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;KeyValueOfstringint&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Key&amp;gt;one&amp;lt;/Key&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Value&amp;gt;1&amp;lt;/Value&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Key&amp;gt;two&amp;lt;/Key&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Value&amp;gt;2&amp;lt;/Value&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- ... --&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Key&amp;gt;N&amp;lt;/Key&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Value&amp;gt;N&amp;lt;/Value&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/KeyValueOfstringint&amp;gt;&lt;br&gt;
&amp;lt;GetFooResponse&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
The meaningful part of type service-to-client-transportation resides in &lt;font face="Courier New"&gt;&amp;lt;xs:annotation&amp;gt;&lt;/font&gt; element,
specifically in &lt;font face="Courier New"&gt;/xs:annotation/xs:appinfo/IsDictionary&lt;/font&gt; element,
which defines that this complex type represents a &lt;font face="Courier New"&gt;System.Collections.Generic.Dictionary&lt;/font&gt; class. &lt;a href="http://www.w3.org/TR/xmlschema-0/#CommVers"&gt;Annotation&lt;/a&gt; elements
in XML Schema are parser specific and do not convey any structure/data type semantics,
but are there &lt;em&gt;for the receiver to interpret&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
This must be one of the &lt;strong&gt;most excellent school cases&lt;/strong&gt; of using XML
Schema &lt;a href="http://www.w3.org/TR/xmlschema-0/#CommVers"&gt;annotations&lt;/a&gt;. It allows
the well-informed client (as in .NET client, VS 2008 or &lt;font face="Courier New"&gt;svcutil.exe&lt;/font&gt;)
to utilize the semantic meaning if it understands it. If not, no harm is done since
the best possible representation, in a form of joined name value pairs still goes
through to the client.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=ff5fab81-affb-4b2b-aa67-c80bdfc86cbd" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,ff5fab81-affb-4b2b-aa67-c80bdfc86cbd.aspx</comments>
      <category>.NET 3.0 - WCF</category>
      <category>.NET 3.5 - WCF</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=ab874bc2-1546-48d1-a8aa-46f0bf876d93</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,ab874bc2-1546-48d1-a8aa-46f0bf876d93.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,ab874bc2-1546-48d1-a8aa-46f0bf876d93.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ab874bc2-1546-48d1-a8aa-46f0bf876d93</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm a huge fan of document style parameter models when implementing a public, programmatic <a href="http://en.wikipedia.org/wiki/Facade_pattern">façade</a> to
a business functionality that often changes.
</p>
        <p>
          <font face="Courier New">public interface IDocumentParameterModel<br />
{<br />
   [OperationContract]<br />
   [FaultContract(typeof(XmlInvalidException))]<br />
   XmlDocument Process(XmlDocument doc);<br />
}</font>
        </p>
        <p>
This contract defines a simple method, called <font face="Courier New">Process</font>,
which processes the input document. The idea is to define the <a href="http://www.w3.org/TR/xmlschema-1/">document
schema</a> and validate inbound XML documents, while throwing exceptions on <em>validation
errors</em>. The processing semantics is arbitrary and can support any kind of action,
depending on the defined <em>invoke document </em>schema.
</p>
        <p>
A simple instance document which validates against a version 1.0 <em>processing schema</em> could
look like this:
</p>
        <p>
          <font face="Courier New">&lt;?xml version="1.0?&gt;<br />
&lt;Process xmlns="http://www.gama-system.com/process10.xsd" version="1.0"&gt;<br />
   &lt;Instruction&gt;Add&lt;/Instruction&gt;<br />
   &lt;Parameter1&gt;10&lt;/Parameter1&gt;<br />
   &lt;Parameter2&gt;21&lt;/Parameter2&gt;<br />
&lt;/Process&gt;</font>
        </p>
        <p>
Another processing instruction, supported in version 1.1 of the <em>processing schema</em>,
with different semantics could be:
</p>
        <p>
          <font face="Courier New">&lt;?xml version="1.0?&gt;<br />
&lt;Process xmlns="http://www.gama-system.com/process11.xsd" version="1.1"&gt;<br />
   &lt;Instruction&gt;Store&lt;/Instruction&gt;<br />
   &lt;Content&gt;77u/PEFwcGxpY2F0aW9uIHhtbG5zPSJod...mdVcCI&lt;/Content&gt;<br />
&lt;/Process&gt;</font>
        </p>
        <p>
Note that the default XML namespace changed, but that is <strong>not a norm</strong>.
It only allows you to automate schema retrieval using the schema repository (think <font face="Courier New">System.Xml.Schema.XmlSchemaSet</font>),
load all supported schemas and validate automatically.
</p>
        <p>
          <font face="Courier New">public class ProcessService : IDocumentParameterModel<br />
{<br />
   public XmlDocument Process(XmlDocument doc)<br />
   {<br />
      XmlReaderSettings sett = new XmlReaderSettings();</font>
        </p>
        <p>
          <font face="Courier New">
            <strong>      sett.Schemas.Add(&lt;document
namespace 1&gt;, &lt;schema uri 1&gt;);<br />
      ...<br />
      sett.Schemas.Add(&lt;document namespace n&gt;, &lt;schema
uri n&gt;);</strong>
          </font>
        </p>
        <p>
          <font face="Courier New">      sett.ValidationType = ValidationType.Schema;<br />
      sett.ValidationEventHandler += new 
<br />
         ValidationEventHandler(XmlInvalidHandler);<br /></font>
          <font face="Courier New">      XmlReader books = XmlReader.Create(doc.OuterXml,
sett);<br /></font>
          <font face="Courier New">      while (books.Read())
{ }</font>
        </p>
        <p>
          <font face="Courier New">      // processing goes here<br />
      ...<br />
   }</font>
        </p>
        <p>
          <font face="Courier New">   static void XmlInvalidHandler(object sender,
ValidationEventArgs e)<br />
   {<br />
      if (e.Severity == XmlSeverityType.Error)<br />
         throw new XmlInvalidException(e.Message);<br />
   }<br />
}</font>
        </p>
        <p>
The main benefit of this approach is <em>decoupling</em> the parameter model and method
processing version from the <em>communication contract</em>. A service maintainer
has an option to change the terms of processing over time, while supporting older
version-aware document instances.
</p>
        <p>
This notion is of course most beneficial in situations where your processing syntax <strong>changes
frequently</strong> and has complex validation schemas. A simple case presented here
is informational only.
</p>
        <p>
So, how do we validate?
</p>
        <ul>
          <li>
We need to check the instance document version first. This is especially true in cases
where the document is <em>not qualified with a different namespace</em> when the version
changes.</li>
          <li>
We grab the appropriate schema or schema set</li>
          <li>
We validate the inbound XML document, throw a typed <font face="Courier New">XmlInvalidException</font> if
invalid</li>
          <li>
We process the call</li>
        </ul>
        <p>
The service side is quite straightforward.
</p>
        <p>
Let's look at the <strong>client</strong> and what are the options for painless generation
of service calls using this mechanism.
</p>
        <p>
Generally, one can always produce an instance <em>invoke document</em> by hand on
the client. <em>By hand</em> meaning using <font face="Courier New">System.Xml</font> classes
and DOM concepts. Since this is higly error prone and gets tedious with increasing
complexity, there is a notion of a schema compiler, which automatically translates
your XML Schema into the CLR type system. <font face="Courier New">Xsd.exe</font> and <font face="Courier New">XmlSerializer</font> are
your friends. 
</p>
        <p>
If your schema requires parts of the instance document to be digitally signed or encrypted,
you will need to adorn the serializer output with some manual DOM work. This might
also be a reason to use the third option.
</p>
        <p>
The third, and easiest option for the general developer, is to provide a <strong>local
object model</strong>, which serializes the requests on the client. This is an example:
</p>
        <p>
          <font face="Courier New">ProcessInstruction pi = new ProcessInstruction();<br />
pi.Instruction = "Add";<br />
pi.Parameter1 = 10;<br />
pi.Parameter2 = 21;<br />
pi.Sign(cert); // pi.Encrypt(cert);<br />
pi.Serialize();<br />
proxy.Process(pi.SerializedForm);</font>
        </p>
        <p>
The main benefit of this approach comes down to having an option on the server and
the client. Client developers have three different levels of complexity for generating
service calls. The model allows them to be as close to the wire as they see fit. Or
they can be abstracted completely from the wire representation if you provide a local
object model to access your services.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=ab874bc2-1546-48d1-a8aa-46f0bf876d93" />
      </body>
      <title>Approaches to Document Style Parameter Models</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,ab874bc2-1546-48d1-a8aa-46f0bf876d93.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,ab874bc2-1546-48d1-a8aa-46f0bf876d93.aspx</link>
      <pubDate>Mon, 24 Sep 2007 10:19:10 GMT</pubDate>
      <description>&lt;p&gt;
I'm a huge fan of document style parameter models when implementing a public, programmatic &lt;a href="http://en.wikipedia.org/wiki/Facade_pattern"&gt;façade&lt;/a&gt; to
a business functionality that often changes.
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;public interface IDocumentParameterModel&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp; [OperationContract]&lt;br&gt;
&amp;nbsp;&amp;nbsp; [FaultContract(typeof(XmlInvalidException))]&lt;br&gt;
&amp;nbsp;&amp;nbsp; XmlDocument Process(XmlDocument doc);&lt;br&gt;
}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
This contract defines a simple method, called &lt;font face="Courier New"&gt;Process&lt;/font&gt;,
which processes the input document. The idea is to define the &lt;a href="http://www.w3.org/TR/xmlschema-1/"&gt;document
schema&lt;/a&gt; and validate inbound XML documents, while throwing exceptions on &lt;em&gt;validation
errors&lt;/em&gt;. The processing semantics is arbitrary and can support any kind of action,
depending on the defined &lt;em&gt;invoke document &lt;/em&gt;schema.
&lt;/p&gt;
&lt;p&gt;
A simple instance document which validates against a version 1.0 &lt;em&gt;processing schema&lt;/em&gt; could
look like this:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;?xml version="1.0?&amp;gt;&lt;br&gt;
&amp;lt;Process xmlns="http://www.gama-system.com/process10.xsd" version="1.0"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;Instruction&amp;gt;Add&amp;lt;/Instruction&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;Parameter1&amp;gt;10&amp;lt;/Parameter1&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;Parameter2&amp;gt;21&amp;lt;/Parameter2&amp;gt;&lt;br&gt;
&amp;lt;/Process&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Another processing instruction, supported in version 1.1 of the &lt;em&gt;processing schema&lt;/em&gt;,
with different semantics could be:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;?xml version="1.0?&amp;gt;&lt;br&gt;
&amp;lt;Process xmlns="http://www.gama-system.com/process11.xsd" version="1.1"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;Instruction&amp;gt;Store&amp;lt;/Instruction&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;Content&amp;gt;77u/PEFwcGxpY2F0aW9uIHhtbG5zPSJod...mdVcCI&amp;lt;/Content&amp;gt;&lt;br&gt;
&amp;lt;/Process&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Note that the default XML namespace changed, but that is &lt;strong&gt;not a norm&lt;/strong&gt;.
It only allows you to automate schema retrieval using the schema repository (think &lt;font face="Courier New"&gt;System.Xml.Schema.XmlSchemaSet&lt;/font&gt;),
load all supported schemas and validate automatically.
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;public class ProcessService : IDocumentParameterModel&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp; public XmlDocument Process(XmlDocument doc)&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlReaderSettings sett = new XmlReaderSettings();&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sett.Schemas.Add(&amp;lt;document
namespace 1&amp;gt;, &amp;lt;schema uri 1&amp;gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sett.Schemas.Add(&amp;lt;document namespace n&amp;gt;, &amp;lt;schema
uri n&amp;gt;);&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sett.ValidationType = ValidationType.Schema;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sett.ValidationEventHandler += new 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ValidationEventHandler(XmlInvalidHandler);&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlReader books = XmlReader.Create(doc.OuterXml,
sett);&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (books.Read())
{ }&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // processing goes here&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;
&amp;nbsp;&amp;nbsp; }&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp; static void XmlInvalidHandler(object sender,
ValidationEventArgs e)&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (e.Severity == XmlSeverityType.Error)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new XmlInvalidException(e.Message);&lt;br&gt;
&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
The main benefit of this approach is &lt;em&gt;decoupling&lt;/em&gt; the parameter model and method
processing version from the &lt;em&gt;communication contract&lt;/em&gt;. A service maintainer
has an option to change the terms of processing over time, while supporting older
version-aware document instances.
&lt;/p&gt;
&lt;p&gt;
This notion is of course most beneficial in situations where your processing syntax &lt;strong&gt;changes
frequently&lt;/strong&gt; and has complex validation schemas. A simple case presented here
is informational only.
&lt;/p&gt;
&lt;p&gt;
So, how do we validate?
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
We need to check the instance document version first. This is especially true in cases
where the document is &lt;em&gt;not qualified with a different namespace&lt;/em&gt; when the version
changes.&lt;/li&gt;
&lt;li&gt;
We grab the appropriate schema or schema set&lt;/li&gt;
&lt;li&gt;
We validate the inbound XML document, throw a typed &lt;font face="Courier New"&gt;XmlInvalidException&lt;/font&gt; if
invalid&lt;/li&gt;
&lt;li&gt;
We process the call&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The service side is quite straightforward.
&lt;/p&gt;
&lt;p&gt;
Let's look at the &lt;strong&gt;client&lt;/strong&gt; and what are the options for painless generation
of service calls using this mechanism.
&lt;/p&gt;
&lt;p&gt;
Generally, one can always produce an instance &lt;em&gt;invoke document&lt;/em&gt; by hand on
the client. &lt;em&gt;By hand&lt;/em&gt; meaning using &lt;font face="Courier New"&gt;System.Xml&lt;/font&gt; classes
and DOM concepts. Since this is higly error prone and gets tedious with increasing
complexity, there is a notion of a schema compiler, which automatically translates
your XML Schema into the CLR type system. &lt;font face="Courier New"&gt;Xsd.exe&lt;/font&gt; and &lt;font face="Courier New"&gt;XmlSerializer&lt;/font&gt; are
your friends. 
&lt;/p&gt;
&lt;p&gt;
If your schema requires parts of the instance document to be digitally signed or encrypted,
you will need to adorn the serializer output with some manual DOM work. This might
also be a reason to use the third option.
&lt;/p&gt;
&lt;p&gt;
The third, and easiest option for the general developer, is to provide a &lt;strong&gt;local
object model&lt;/strong&gt;, which serializes the requests on the client. This is an example:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;ProcessInstruction pi = new ProcessInstruction();&lt;br&gt;
pi.Instruction = "Add";&lt;br&gt;
pi.Parameter1 = 10;&lt;br&gt;
pi.Parameter2 = 21;&lt;br&gt;
pi.Sign(cert); // pi.Encrypt(cert);&lt;br&gt;
pi.Serialize();&lt;br&gt;
proxy.Process(pi.SerializedForm);&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
The main benefit of this approach comes down to having an option on the server and
the client. Client developers have three different levels of complexity for generating
service calls. The model allows them to be as close to the wire as they see fit. Or
they can be abstracted completely from the wire representation if you provide a local
object model to access your services.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=ab874bc2-1546-48d1-a8aa-46f0bf876d93" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,ab874bc2-1546-48d1-a8aa-46f0bf876d93.aspx</comments>
      <category>.NET 3.0 - WCF</category>
      <category>.NET 3.5 - WCF</category>
      <category>Architecture</category>
      <category>Web Services</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=bca19fa8-7ba8-43d8-873e-3a8cf03335cb</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,bca19fa8-7ba8-43d8-873e-3a8cf03335cb.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,bca19fa8-7ba8-43d8-873e-3a8cf03335cb.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=bca19fa8-7ba8-43d8-873e-3a8cf03335cb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Based on my <a href="http://www.request-response.com/blog/PermaLink,guid,c421ff72-d5bc-4b5f-8c52-ed5e73e8dd00.aspx">previous
post</a>, I managed to get <strong>distributed transaction</strong> scenario
working using <a href="http://wcf.netfx3.com/">WCF</a>, <a href="http://www.w3.org/TR/soap12-mtom/">MTOM</a> and <a href="http://www.ibm.com/developerworks/library/specification/ws-tx/">WS-AtomicTransactions</a>.
</p>
        <p>
This means that you have the option to transport <em>arbitrary files</em>, using transactional <strong>ACID</strong> semantics,
from the client, over HTTP and MTOM.
</p>
        <p>
The idea is to integrate a distributed transaction with <a href="http://msdn2.microsoft.com/En-US/library/aa365456.aspx">TxF</a>,
or NTFS file system transaction. This only works on Windows Server 2008 (Longhorn
Server) and Windows Vista. 
</p>
        <p>
Download: <a href="http://www.request-response.com/blog/content/binary/txf_wcf.zip">Sample
code</a></p>
        <p>
If the client starts a transaction then <em>all files</em> within it should be stored
on the server. If something fails or client does not commit, <em>no harm is done</em>.
The beauty of this is that it's all seamlessly integrated into the current communication/OS
stack.
</p>
        <p>
This is <strong>shipping technology</strong>; you just have to dive a little deeper
to use it.
</p>
        <p>
Here's the scenario:<br /><br /><img src="http://www.request-response.com/blog/images/txf_wcf1.jpg" /></p>
        <p>
There are a couple of issues that need to be addressed before we move to the implementation:
</p>
        <ul>
          <li>
            <strong>You should use the managed wrapper included <a href="http://www.request-response.com/blog/content/binary/txf_wcf.zip">here</a><br /></strong>There is support for <font face="Courier New">TransactedFile</font> and <font face="Courier New">TransactedDirectory</font> built
it. Next version of <a href="http://msdn2.microsoft.com/en-us/library/ms756482.aspx">VistaBridge</a> samples
will include an updated version of this wrapper.<br /><br /></li>
          <li>
            <strong>Limited distributed transactions support on a system drive<br /></strong>There is no way to get DTC a superior access coordinator<em></em>role for <a href="http://msdn2.microsoft.com/En-US/library/aa365456.aspx">TxF</a> on
the system drive (think <font face="Courier New">c:\</font> system drive). This is
a major downside in the current implementation of <a href="http://msdn2.microsoft.com/En-US/library/aa365456.aspx">TxF</a>,
since I would prefer that system/boot files would be transaction-locked anyway. You
have two options if you want to run the <a href="http://www.request-response.com/blog/content/binary/txf_wcf.zip">following
sample</a>:<br /><br /><ul><li><strong>Define secondary resource manager for your directory</strong><br />
This allows system drive resource manager to still protect system files, but creates
a secondary resource manager for the specified directory. Do this: 
<ul><li><font face="Courier New">fsutil resource create c:\txf</font></li><li><font face="Courier New">fsutil resource start c:\txf<br /></font>You can query your new secondary resource manager by <font face="Courier New">fsutil
resource info c:\txf</font>.<br /><br /></li></ul></li><li><strong>Use another partition<br /></strong>Any partition outside the system partition is ok. You cannot use network
shares, but <em>USB keys will work</em>. Plug it in and change the paths as defined
at the end of this post.</li></ul></li>
        </ul>
        <p>
OK, here we go.
</p>
        <p>
Here's the service contract:
</p>
        <p>
          <font face="Courier New">[ServiceContract(SessionMode = SessionMode.Allowed)]<br />
interface ITransportFiles<br />
{<br />
   [OperationContract]<br />
   [TransactionFlow(TransactionFlowOption.Allowed)]<br />
   byte[] GetFile(string name);</font>
        </p>
        <p>
          <font face="Courier New">   [OperationContract]<br />
   [TransactionFlow(TransactionFlowOption.Allowed)]<br />
   void PutFile(byte[] data, string name);<br />
} </font>
        </p>
        <p>
We allow the sessionful binding (it's not <em>required</em>, though) and allow transactions
to flow from the client side. Again, transactions are not <em>mandatory</em>, since
client may opt-out of using them and just transport files without a transaction.
</p>
        <p>
The provided transport mechanism uses <a href="http://www.w3.org/TR/soap12-mtom/">MTOM</a>,
since the contract's parameter model is appropriate for it and because it's much more
effective transferring binary data.
</p>
        <p>
So here's the service config:
</p>
        <p>
          <font face="Courier New">&lt;system.serviceModel&gt;<br />
  &lt;bindings&gt;<br />
    &lt;wsHttpBinding&gt;<br /><strong>      &lt;binding name="MTOMBinding"<br />
          transactionFlow="true"<br />
          messageEncoding="Mtom"<br />
          maxReceivedMessageSize="10485760"&gt;<br />
        &lt;readerQuotas maxArrayLength="10485760"/&gt;</strong><br />
      &lt;/binding&gt;<br />
    &lt;/wsHttpBinding&gt;<br />
  &lt;/bindings&gt;<br />
  &lt;services&gt;<br />
    &lt;service name="WCFService.TransportService"&gt;<br />
      &lt;host&gt;<br />
        &lt;baseAddresses&gt;<br />
          &lt;add baseAddress="</font>
          <font face="Courier New">http://localhost:555/transportservice"</font>
          <font face="Courier New">&gt;<br />
        &lt;/baseAddresses&gt;<br />
      &lt;/host&gt;<br />
      &lt;endpoint address=""<br />
          binding="wsHttpBinding"<br /><strong>          bindingConfiguration="MTOMBinding"<br /></strong>          contract="WCFService.ITransportFiles"/&gt;<br />
    &lt;/service&gt;<br />
  &lt;/services&gt;<br />
&lt;/system.serviceModel&gt;</font>
        </p>
        <p>
Here, <font face="Courier New">MTOMBinding</font> is being used to specify <a href="http://www.w3.org/TR/soap12-mtom/">MTOM</a> wire
encoding. Also, quotas and <font face="Courier New">maxReceivedMessageSize</font> attribute
is being adjusted to 10 MB, since we are probably transferring larger binary files.
</p>
        <p>
Service implementation is straight forward:
</p>
        <p>
          <font face="Courier New">[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]<br />
class TransportService : ITransportFiles<br />
{<br />
    [OperationBehavior(TransactionScopeRequired = true)]<br /><strong>    public byte[] GetFile(string name)<br /></strong>    {<br />
        Console.WriteLine("GetFile: {0}", name);<br />
        Console.WriteLine("Distributed Tx ID: {0}",<br />
          Transaction.Current.TransactionInformation.DistributedIdentifier);<br />
        return ReadFully(TransactedFile.Open(@"C:\TxF\Service\"
+ name,<br />
          FileMode.Open, FileAccess.Read,
FileShare.Read), 0);<br />
    }</font>
        </p>
        <p>
          <font face="Courier New">    [OperationBehavior(TransactionScopeRequired
= true)]<br /><strong>    public void PutFile(byte[] data, string filename)<br /></strong>    {<br />
        Console.WriteLine("PutFile: {0}", filename);<br />
        Console.WriteLine("Distributed Tx ID: {0}",<br />
          Transaction.Current.TransactionInformation.DistributedIdentifier);</font>
        </p>
        <p>
          <font face="Courier New">        using (BinaryWriter
bw = new BinaryWriter(<br />
            TransactedFile.Open(@"C:\TxF\Service\"
+ filename,<br />
              FileMode.Create,
FileAccess.Write, FileShare.Write)))<br />
        {<br />
            bw.Write(data,
0, data.Length);<br />
            
<br />
            // clean up<br />
            bw.Flush();<br />
        }<br />
    }<br />
}</font>
        </p>
        <p>
Client does four things:
</p>
        <ol>
          <li>
Sends three files (client - server) - no transaction 
</li>
          <li>
Gets three files (server - client) - no transaction 
</li>
          <li>
Sends three files (client - server) - distributed transaction, all or nothing 
</li>
          <li>
Gets three files (server - client) - distributed transaction, all or nothing</li>
        </ol>
        <p>
Before you run:
</p>
        <ul>
          <li>
Decide on the secondary resource manager option (system drive, enable it using <font face="Courier New">fsutil.exe</font>)
or use another partition (USB key) 
</li>
          <li>
Change the paths to your scenario. The sample uses <font face="Courier New">C:\TxF</font>, <font face="Courier New">C:\TxF\Service</font> and <font face="Courier New">C:\TxF\Client</font> and
a secondary resource manager. Create these directories before running the sample.</li>
        </ul>
        <p>
Download: <a href="http://www.request-response.com/blog/content/binary/txf_wcf.zip">Sample
code</a></p>
        <p>
          <font color="#a9a9a9" size="1">This sample is provided without any warranty. It's
a sample, so don't use it in production environments.</font>
        </p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=bca19fa8-7ba8-43d8-873e-3a8cf03335cb" />
      </body>
      <title>Managed TxF: Distributed Transactions and Transactional NTFS</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,bca19fa8-7ba8-43d8-873e-3a8cf03335cb.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,bca19fa8-7ba8-43d8-873e-3a8cf03335cb.aspx</link>
      <pubDate>Mon, 23 Jul 2007 20:54:13 GMT</pubDate>
      <description>&lt;p&gt;
Based on my &lt;a href="http://www.request-response.com/blog/PermaLink,guid,c421ff72-d5bc-4b5f-8c52-ed5e73e8dd00.aspx"&gt;previous
post&lt;/a&gt;, I&amp;nbsp;managed to get &lt;strong&gt;distributed transaction&lt;/strong&gt; scenario
working using &lt;a href="http://wcf.netfx3.com/"&gt;WCF&lt;/a&gt;, &lt;a href="http://www.w3.org/TR/soap12-mtom/"&gt;MTOM&lt;/a&gt; and &lt;a href="http://www.ibm.com/developerworks/library/specification/ws-tx/"&gt;WS-AtomicTransactions&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
This means that you have the option to transport &lt;em&gt;arbitrary files&lt;/em&gt;, using transactional &lt;strong&gt;ACID&lt;/strong&gt; semantics,
from the client, over HTTP and MTOM.
&lt;/p&gt;
&lt;p&gt;
The idea is to integrate a distributed transaction with &lt;a href="http://msdn2.microsoft.com/En-US/library/aa365456.aspx"&gt;TxF&lt;/a&gt;,
or NTFS file system transaction. This only works on Windows Server 2008 (Longhorn
Server) and Windows Vista. 
&lt;/p&gt;
&lt;p&gt;
Download: &lt;a href="http://www.request-response.com/blog/content/binary/txf_wcf.zip"&gt;Sample
code&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If the client starts a transaction then &lt;em&gt;all files&lt;/em&gt; within it should be stored
on the server. If something fails or client does not commit, &lt;em&gt;no harm is done&lt;/em&gt;.
The beauty of this is that it's all seamlessly integrated into the current communication/OS
stack.
&lt;/p&gt;
&lt;p&gt;
This is &lt;strong&gt;shipping technology&lt;/strong&gt;; you just have to dive a little deeper
to use it.
&lt;/p&gt;
&lt;p&gt;
Here's the scenario:&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.request-response.com/blog/images/txf_wcf1.jpg"&gt;
&lt;/p&gt;
&lt;p&gt;
There are a couple of issues that need to be addressed before we move to the implementation:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You should use the managed wrapper included &lt;a href="http://www.request-response.com/blog/content/binary/txf_wcf.zip"&gt;here&lt;/a&gt;
&lt;br&gt;
&lt;/strong&gt;There is support for &lt;font face="Courier New"&gt;TransactedFile&lt;/font&gt; and &lt;font face="Courier New"&gt;TransactedDirectory&lt;/font&gt; built
it. Next version of &lt;a href="http://msdn2.microsoft.com/en-us/library/ms756482.aspx"&gt;VistaBridge&lt;/a&gt; samples
will include an updated version of this wrapper.&lt;br&gt;
&lt;br&gt;
&lt;li&gt;
&lt;strong&gt;Limited distributed transactions support on a system drive&lt;br&gt;
&lt;/strong&gt;There is no way to get DTC a superior access coordinator&lt;em&gt; &lt;/em&gt;role for &lt;a href="http://msdn2.microsoft.com/En-US/library/aa365456.aspx"&gt;TxF&lt;/a&gt; on
the system drive (think &lt;font face="Courier New"&gt;c:\&lt;/font&gt; system drive). This is
a major downside in the current implementation of &lt;a href="http://msdn2.microsoft.com/En-US/library/aa365456.aspx"&gt;TxF&lt;/a&gt;,
since I would prefer that system/boot files would be transaction-locked anyway. You
have two options if you want to run the &lt;a href="http://www.request-response.com/blog/content/binary/txf_wcf.zip"&gt;following
sample&lt;/a&gt;:&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Define secondary resource manager for your directory&lt;/strong&gt;
&lt;br&gt;
This allows system drive resource manager to still protect system files, but creates
a secondary resource manager for the specified directory. Do this: 
&lt;ul&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;fsutil resource create c:\txf&lt;/font&gt; 
&lt;li&gt;
&lt;font face="Courier New"&gt;fsutil resource start c:\txf&lt;br&gt;
&lt;/font&gt;You can query your new secondary resource manager by &lt;font face="Courier New"&gt;fsutil
resource info c:\txf&lt;/font&gt;.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
&lt;strong&gt;Use another partition&lt;br&gt;
&lt;/strong&gt;Any partition outside the system partition is ok. You cannot use network
shares, but &lt;em&gt;USB keys will work&lt;/em&gt;. Plug it in and change the paths as defined
at the end of this post.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
OK, here we go.
&lt;/p&gt;
&lt;p&gt;
Here's the service contract:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[ServiceContract(SessionMode = SessionMode.Allowed)]&lt;br&gt;
interface ITransportFiles&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp; [OperationContract]&lt;br&gt;
&amp;nbsp;&amp;nbsp; [TransactionFlow(TransactionFlowOption.Allowed)]&lt;br&gt;
&amp;nbsp;&amp;nbsp; byte[] GetFile(string name);&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp; [OperationContract]&lt;br&gt;
&amp;nbsp;&amp;nbsp; [TransactionFlow(TransactionFlowOption.Allowed)]&lt;br&gt;
&amp;nbsp;&amp;nbsp; void PutFile(byte[] data, string name);&lt;br&gt;
}&amp;nbsp;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
We allow the sessionful binding (it's not &lt;em&gt;required&lt;/em&gt;, though) and allow transactions
to flow from the client side. Again, transactions are not &lt;em&gt;mandatory&lt;/em&gt;, since
client may opt-out of using them and just transport files without a transaction.
&lt;/p&gt;
&lt;p&gt;
The provided transport mechanism uses &lt;a href="http://www.w3.org/TR/soap12-mtom/"&gt;MTOM&lt;/a&gt;,
since the contract's parameter model is appropriate for it and because it's much more
effective transferring binary data.
&lt;/p&gt;
&lt;p&gt;
So here's the service config:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;system.serviceModel&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;bindings&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsHttpBinding&amp;gt;&lt;br&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;binding name="MTOMBinding"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; transactionFlow="true"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; messageEncoding="Mtom"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxReceivedMessageSize="10485760"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;readerQuotas maxArrayLength="10485760"/&amp;gt;&lt;/strong&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/binding&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/wsHttpBinding&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/bindings&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;services&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service name="WCFService.TransportService"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;host&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;baseAddresses&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add baseAddress="&lt;/font&gt;&lt;font face="Courier New"&gt;http://localhost:555/transportservice"&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/baseAddresses&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/host&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address=""&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; binding="wsHttpBinding"&lt;br&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration="MTOMBinding"&lt;br&gt;
&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contract="WCFService.ITransportFiles"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/services&amp;gt;&lt;br&gt;
&amp;lt;/system.serviceModel&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Here, &lt;font face="Courier New"&gt;MTOMBinding&lt;/font&gt; is being used to specify &lt;a href="http://www.w3.org/TR/soap12-mtom/"&gt;MTOM&lt;/a&gt; wire
encoding. Also, quotas and &lt;font face="Courier New"&gt;maxReceivedMessageSize&lt;/font&gt; attribute
is being adjusted to 10 MB, since we are probably transferring larger binary files.
&lt;/p&gt;
&lt;p&gt;
Service implementation is straight forward:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]&lt;br&gt;
class TransportService : ITransportFiles&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [OperationBehavior(TransactionScopeRequired = true)]&lt;br&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public byte[] GetFile(string name)&lt;br&gt;
&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("GetFile: {0}", name);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Distributed Tx ID: {0}",&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction.Current.TransactionInformation.DistributedIdentifier);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ReadFully(TransactedFile.Open(@"C:\TxF\Service\"
+ name,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileMode.Open, FileAccess.Read,
FileShare.Read), 0);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [OperationBehavior(TransactionScopeRequired
= true)]&lt;br&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void PutFile(byte[] data, string filename)&lt;br&gt;
&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("PutFile: {0}", filename);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Distributed Tx ID: {0}",&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction.Current.TransactionInformation.DistributedIdentifier);&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (BinaryWriter
bw = new BinaryWriter(&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; TransactedFile.Open(@"C:\TxF\Service\"
+ filename,&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; FileMode.Create,
FileAccess.Write, FileShare.Write)))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; bw.Write(data,
0, data.Length);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clean up&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; bw.Flush();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Client does four things:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Sends three files (client - server) - no transaction 
&lt;li&gt;
Gets three files (server - client) - no transaction 
&lt;li&gt;
Sends three files (client - server) - distributed transaction, all or nothing 
&lt;li&gt;
Gets three files (server - client) - distributed transaction, all or nothing&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Before you run:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Decide on the secondary resource manager option (system drive, enable it using &lt;font face="Courier New"&gt;fsutil.exe&lt;/font&gt;)
or use another partition (USB key) 
&lt;li&gt;
Change the paths to your scenario. The sample uses &lt;font face="Courier New"&gt;C:\TxF&lt;/font&gt;, &lt;font face="Courier New"&gt;C:\TxF\Service&lt;/font&gt; and &lt;font face="Courier New"&gt;C:\TxF\Client&lt;/font&gt; and
a secondary resource manager. Create these directories before running the sample.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Download: &lt;a href="http://www.request-response.com/blog/content/binary/txf_wcf.zip"&gt;Sample
code&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#a9a9a9 size=1&gt;This sample is provided without any warranty. It's a sample,
so don't use it in production environments.&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=bca19fa8-7ba8-43d8-873e-3a8cf03335cb" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,bca19fa8-7ba8-43d8-873e-3a8cf03335cb.aspx</comments>
      <category>.NET 3.5 - WCF</category>
      <category>Transactions</category>
      <category>Web Services</category>
      <category>Windows Vista</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=e4ad0d8c-6fb6-40b8-9b52-7ab9092ccc7c</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,e4ad0d8c-6fb6-40b8-9b52-7ab9092ccc7c.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,e4ad0d8c-6fb6-40b8-9b52-7ab9092ccc7c.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e4ad0d8c-6fb6-40b8-9b52-7ab9092ccc7c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I dived into <a href="http://specs.xmlsoap.org/ws/2005/06/management/ws-management.pdf">WS-Management</a> support
in Vista / <strike>Longhorn Server</strike> Windows Server 2008 this weekend. There
are a couple of caveats if you want to enable remote WS-Management based access to
these machines. Support for remote management is also built into Windows Server 2003 <strong>R2</strong>.
</p>
        <p>
WS-Management specification allows remote access to any resource that implements the
specification. Everything accessed in a WS-Management world is a resource, which is
identifiable by a URI. The spec uses WS-Eventing, WS-Enumeration, WS-Transfer and
SOAP 1.2 via HTTP.
</p>
        <p>
Since remote management implementation in Windows acknowledges all the work done in
the <a href="http://www.microsoft.com/whdc/system/pnppwr/wmi/default.mspx">WMI</a> space,
you can simply issue commands in terms of URIs that incorporate WMI namespaces.
</p>
        <p>
          <img src="http://www.request-response.com/blog/images/ws-management1.jpg" />
        </p>
        <p>
For example, the WMI class or action (method) is identified by a URI, just as any
other WS-Management based resource. You can construct access to any WMI class / action
using the following semantics:
</p>
        <ul>
          <li>
            <font face="Courier New">http://schemas.microsoft.com/wbem/wsman/1/wmi</font> denotes
a <strong>default WMI namespace</strong> accessible via WS-Management 
</li>
          <li>
            <font face="Courier New">http://schemas.microsoft.com/wbem/wsman/1/wmi/root/default</font> denotes
access to <font face="Courier New"><strong>root/default</strong></font> namespace</li>
        </ul>
        <p>
Since the majority of WMI classes are in <font face="Courier New">root/cimv2</font> namespace,
you should use the following URI to access those:
</p>
        <p>
          <font face="Courier New">http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2</font>
        </p>
        <p>
OK, back to WS-Management and its implementation in Vista / Windows Server 2008.
</p>
        <p>
First, Windows Server 2008 has the <strong>Windows Remote Management</strong> service
started up by default. Vista doesn't. So <em>start it up</em>, if you're on a Vista
box.
</p>
        <p>
Second, depending on your network configuration, if you're in a workgroup environment
(not joined to a domain) you should tell your client to <em>trust the server side</em>.
</p>
        <p>
Trusting the server side involves executing a command on a client. Remote management
tools included in Windows Server 2008 / Windows Vista are capable of configuring the
local machine and issuing commands to remote machine. There are basically two
tools which allow you to setup the infrastructure and issue remote commands to the
destination. They are:
</p>
        <ul>
          <li>
            <font face="Courier New">winrm.cmd</font> (uses <font face="Courier New">winrm.vbs</font>),
defines configuration of local machine 
</li>
          <li>
            <font face="Courier New">winrs.exe</font> (<font face="Courier New">winrscmd.dll</font> and
friends), Windows Remote Shell client, issues commands to a remote machine</li>
        </ul>
        <p>
As said, WS-Management support is enabled by default in Windows Server 2008. This
means that the appropriate service is running, but one should still define basic configuration
on it. Nothing is enabled by default; you have to <strong>opt-in</strong>. 
</p>
        <p>
Since Microsoft is progressing to a more admin friendly environment, this is done
by issuing the following command (server command):
</p>
        <p>
          <font face="Courier New">winrm quickconfig</font>
          <font face="Verdana"> (or <font face="Courier New">winrm
qc</font>)</font>
        </p>
        <p>
This enables the obvious:
</p>
        <ul>
          <li>
Starts the <strong>Windows Remote Management</strong> service (if not stared; in Windows
Vista case) 
</li>
          <li>
Enables <strong>autostart</strong> on the Windows Remote Management service 
</li>
          <li>
Starts up a <strong>listener</strong> for all machine's IP addresses 
</li>
          <li>
Configures appropriate <strong>firewall</strong> exceptions</li>
        </ul>
        <p>
You should get the following output:
</p>
        <p>
          <font face="Courier New">[c:\windows\system32]winrm quickconfig<br /></font>
          <font face="Courier New">
            <br />
WinRM is not set up to allow remote access to this machine for management.<br />
The following changes must be made:</font>
        </p>
        <p>
          <font face="Courier New">Create a WinRM listener on HTTP://* to accept WS-Man requests
to any IP on this machine.<br />
Enable the WinRM firewall exception.</font>
        </p>
        <p>
          <font face="Courier New">Make these changes [y/n]? y</font>
        </p>
        <p>
          <font face="Courier New">WinRM has been updated for remote management.<br /></font>
          <font face="Courier New">Created a WinRM listener on HTTP://* to accept WS-Man
requests to any IP on this machine.<br />
WinRM firewall exception enabled.</font>
        </p>
        <p>
There are options in <font face="Courier New">winrm.cmd</font> to fine tune anything,
including the listening ports and / or SSL (HTTPS) support. In a trusted environment
you probably don't want to issue commands using HTTP based mechanism, since you are
located behind the trust boundary and have complete control over available (allowed)
TCP ports.
</p>
        <p>
You can now issue remote management commands against the configured server, but only
if the communication <strong>is trusted</strong>. So in case you are in a workgroup
environment (client and server in a workgroup), this should get you started (client
command):
</p>
        <p>
          <font face="Courier New">winrm set winrm/config/client @{TrustedHosts="&lt;server
ip or hostname&gt;"}</font>
        </p>
        <p>
You can specify multiple trusted servers using a comma:
</p>
        <p>
          <font face="Courier New">winrm set winrm/config/client @{TrustedHosts="10.10.10.108,
10.10.10.109"}</font>
        </p>
        <p>
This trusts the server(s) no matter what. Even over HTTP only.
</p>
        <p>
Enumerating the configured listeners - remember, listener is located on the destination
side - is done via: 
</p>
        <p>
          <font face="Courier New">winrm enumerate winrm/config/listener</font>
        </p>
        <p>
OK, now we're able to issue commands to the remote side using WS-Management infrastructure.
You can, for example, try this (client command):
</p>
        <p>
          <font face="Courier New">winrs -r:http://&lt;server ip&gt; -u:&lt;username&gt; -p:&lt;password&gt;
&lt;shell command&gt;<font face="Verdana">, ie.<br /></font>winrs -r:http://10.10.10.108 -u:administrator -p:p$38E0jjW! dir -s</font>
        </p>
        <p>
or
</p>
        <p>
          <font face="Courier New">winrs -r:http://10.10.10.108 -u:administrator -p:p$38E0jjW!
hostname</font>
        </p>
        <p>
You can even explose HTTP based approach through your firewall if you're crazy enough.
But using HTTPS would be the smart way out. What you need is a valid certificate with
server authentication capability and a matching CN. Self-signed certs won't work.
</p>
        <p>
Simple and effective.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=e4ad0d8c-6fb6-40b8-9b52-7ab9092ccc7c" />
      </body>
      <title>WS-Management: Windows Vista and Windows Server 2008</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,e4ad0d8c-6fb6-40b8-9b52-7ab9092ccc7c.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,e4ad0d8c-6fb6-40b8-9b52-7ab9092ccc7c.aspx</link>
      <pubDate>Sun, 22 Jul 2007 18:48:22 GMT</pubDate>
      <description>&lt;p&gt;
I dived into &lt;a href="http://specs.xmlsoap.org/ws/2005/06/management/ws-management.pdf"&gt;WS-Management&lt;/a&gt; support
in Vista / &lt;strike&gt;Longhorn Server&lt;/strike&gt; Windows Server 2008 this weekend. There
are a couple of caveats if you want to enable remote WS-Management based access to
these machines. Support for remote management is also built into Windows Server 2003 &lt;strong&gt;R2&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
WS-Management specification allows remote access to any resource that implements the
specification. Everything accessed in a WS-Management world is a resource, which is
identifiable by a URI. The spec uses WS-Eventing, WS-Enumeration, WS-Transfer and
SOAP 1.2 via HTTP.
&lt;/p&gt;
&lt;p&gt;
Since remote management implementation in Windows acknowledges all the work done in
the &lt;a href="http://www.microsoft.com/whdc/system/pnppwr/wmi/default.mspx"&gt;WMI&lt;/a&gt; space,
you can simply issue commands in terms of URIs that incorporate WMI namespaces.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.request-response.com/blog/images/ws-management1.jpg"&gt;
&lt;/p&gt;
&lt;p&gt;
For example, the WMI class or action (method) is identified by a URI, just as any
other WS-Management based resource. You can construct access to any WMI class / action
using the following semantics:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;http://schemas.microsoft.com/wbem/wsman/1/wmi&lt;/font&gt; denotes
a &lt;strong&gt;default WMI namespace&lt;/strong&gt; accessible via WS-Management 
&lt;li&gt;
&lt;font face="Courier New"&gt;http://schemas.microsoft.com/wbem/wsman/1/wmi/root/default&lt;/font&gt; denotes
access to &lt;font face="Courier New"&gt;&lt;strong&gt;root/default&lt;/strong&gt;&lt;/font&gt; namespace&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Since the majority of WMI classes are in &lt;font face="Courier New"&gt;root/cimv2&lt;/font&gt; namespace,
you should use the following URI to access those:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
OK, back to WS-Management and its implementation in Vista / Windows Server 2008.
&lt;/p&gt;
&lt;p&gt;
First, Windows Server 2008 has the &lt;strong&gt;Windows Remote Management&lt;/strong&gt; service
started up by default. Vista doesn't. So &lt;em&gt;start it up&lt;/em&gt;, if you're on a Vista
box.
&lt;/p&gt;
&lt;p&gt;
Second, depending on your network configuration, if you're in a workgroup environment
(not joined to a domain) you should tell your client to &lt;em&gt;trust the server side&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
Trusting the server side involves executing a command on a client. Remote management
tools included in Windows Server 2008 / Windows Vista are capable of configuring the
local machine and issuing commands to&amp;nbsp;remote machine. There are basically two
tools which allow you to setup the infrastructure and issue remote commands to the
destination. They are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;winrm.cmd&lt;/font&gt; (uses &lt;font face="Courier New"&gt;winrm.vbs&lt;/font&gt;),
defines configuration of local machine 
&lt;li&gt;
&lt;font face="Courier New"&gt;winrs.exe&lt;/font&gt; (&lt;font face="Courier New"&gt;winrscmd.dll&lt;/font&gt; and
friends), Windows Remote Shell client, issues commands to a remote machine&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
As said, WS-Management support is enabled by default in Windows Server 2008. This
means that the appropriate service is running, but one should still define basic configuration
on it. Nothing is enabled by default; you have to &lt;strong&gt;opt-in&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
Since Microsoft is progressing to a more admin friendly environment, this is done
by issuing the following command (server command):
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;winrm quickconfig&lt;/font&gt;&lt;font face=Verdana&gt; (or &lt;font face="Courier New"&gt;winrm
qc&lt;/font&gt;)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
This enables the obvious:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Starts the &lt;strong&gt;Windows Remote Management&lt;/strong&gt; service (if not stared; in Windows
Vista case) 
&lt;li&gt;
Enables &lt;strong&gt;autostart&lt;/strong&gt; on the Windows Remote Management service 
&lt;li&gt;
Starts up a &lt;strong&gt;listener&lt;/strong&gt; for all machine's IP addresses 
&lt;li&gt;
Configures appropriate &lt;strong&gt;firewall&lt;/strong&gt; exceptions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You should get the following output:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[c:\windows\system32]winrm quickconfig&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;
&lt;br&gt;
WinRM is not set up to allow remote access to this machine for management.&lt;br&gt;
The following changes must be made:&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;Create a WinRM listener on HTTP://* to accept WS-Man requests
to any IP on this machine.&lt;br&gt;
Enable the WinRM firewall exception.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;Make these changes [y/n]? y&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;WinRM has been updated for remote management.&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;Created a WinRM listener on HTTP://* to accept WS-Man
requests to any IP on this&amp;nbsp;machine.&lt;br&gt;
WinRM firewall exception enabled.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
There are options in &lt;font face="Courier New"&gt;winrm.cmd&lt;/font&gt; to fine tune anything,
including the listening ports and / or SSL (HTTPS) support. In a trusted environment
you probably don't want to issue commands using HTTP based mechanism, since you are
located behind the trust boundary and have complete control over available (allowed)
TCP ports.
&lt;/p&gt;
&lt;p&gt;
You can now issue remote management commands against the configured server, but only
if the communication &lt;strong&gt;is trusted&lt;/strong&gt;. So in case you are in a workgroup
environment (client and server in a workgroup), this should get you started (client
command):
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;winrm set winrm/config/client @{TrustedHosts="&amp;lt;server
ip or hostname&amp;gt;"}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
You can specify multiple trusted servers using a comma:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;winrm set winrm/config/client @{TrustedHosts="10.10.10.108,
10.10.10.109"}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
This trusts the server(s) no matter what. Even over HTTP only.
&lt;/p&gt;
&lt;p&gt;
Enumerating the configured listeners - remember, listener is located on the destination
side - is done via: 
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;winrm enumerate winrm/config/listener&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
OK, now we're able to issue commands to the remote side using WS-Management infrastructure.
You can, for example, try this (client command):
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;winrs -r:http://&amp;lt;server ip&amp;gt; -u:&amp;lt;username&amp;gt; -p:&amp;lt;password&amp;gt;
&amp;lt;shell command&amp;gt;&lt;font face=Verdana&gt;, ie.&lt;br&gt;
&lt;/font&gt;winrs -r:http://10.10.10.108 -u:administrator -p:p$38E0jjW! dir -s&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
or
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;winrs -r:http://10.10.10.108 -u:administrator -p:p$38E0jjW!
hostname&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
You can even explose HTTP based approach through your firewall if you're crazy enough.
But using HTTPS would be the smart way out. What you need is a valid certificate with
server authentication capability and a&amp;nbsp;matching CN. Self-signed certs won't work.
&lt;/p&gt;
&lt;p&gt;
Simple and effective.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=e4ad0d8c-6fb6-40b8-9b52-7ab9092ccc7c" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,e4ad0d8c-6fb6-40b8-9b52-7ab9092ccc7c.aspx</comments>
      <category>Web Services</category>
      <category>Windows Vista</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=c6dac5cb-596b-4836-ab83-9802e54d2471</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,c6dac5cb-596b-4836-ab83-9802e54d2471.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,c6dac5cb-596b-4836-ab83-9802e54d2471.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c6dac5cb-596b-4836-ab83-9802e54d2471</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
WS-RM 1.1 is finished. GoodTimes<sup>tm</sup>.
</p>
        <p>
OASIS published two specs:
</p>
        <ul>
          <li>
            <a href="http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.html">WS-ReliableMessaging
1.1</a>
          </li>
          <li>
            <a href="http://docs.oasis-open.org/ws-rx/wsrmp/200702/wsrmp-1.1-spec-os-01.html">WS-ReliableMessaging
Policy Assertions 1.1</a>
          </li>
        </ul>
        <p>
WCF, as it turns out, will have support for WS-RM 1.1 implementation in Orcas. On
this note, there is a <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e6fd8663-8b77-4649-8d36-3830e18528fa&amp;DisplayLang=en">new
CTP</a> out this week.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=c6dac5cb-596b-4836-ab83-9802e54d2471" />
      </body>
      <title>Out the Door: WS-ReliableMessaging 1.1</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,c6dac5cb-596b-4836-ab83-9802e54d2471.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,c6dac5cb-596b-4836-ab83-9802e54d2471.aspx</link>
      <pubDate>Tue, 03 Jul 2007 14:58:29 GMT</pubDate>
      <description>&lt;p&gt;
WS-RM 1.1 is finished. GoodTimes&lt;sup&gt;tm&lt;/sup&gt;.
&lt;/p&gt;
&lt;p&gt;
OASIS published two specs:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.html"&gt;WS-ReliableMessaging
1.1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://docs.oasis-open.org/ws-rx/wsrmp/200702/wsrmp-1.1-spec-os-01.html"&gt;WS-ReliableMessaging
Policy Assertions 1.1&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
WCF, as it turns out, will have support for WS-RM 1.1 implementation in Orcas. On
this note, there is a &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e6fd8663-8b77-4649-8d36-3830e18528fa&amp;amp;DisplayLang=en"&gt;new
CTP&lt;/a&gt; out this week.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=c6dac5cb-596b-4836-ab83-9802e54d2471" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,c6dac5cb-596b-4836-ab83-9802e54d2471.aspx</comments>
      <category>.NET 3.5 - WCF</category>
      <category>Microsoft</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=bdb761f8-8856-41c8-b4ad-c38338bf6567</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,bdb761f8-8856-41c8-b4ad-c38338bf6567.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,bdb761f8-8856-41c8-b4ad-c38338bf6567.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=bdb761f8-8856-41c8-b4ad-c38338bf6567</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://blogs.msdn.com/nickmalik/archive/2007/05/30/system-reliability-requires-message-durability-immature-wcf.aspx">Nick</a> is
continuing <a href="http://www.request-response.com/blog/PermaLink,guid,03fb0e40-b446-42b5-ad90-3be9b0260cb5.aspx">my
discussion</a> on durable messaging support in modern WS-* based stacks, especially
WCF.
</p>
        <p>
I agree that having a simple channel configuration support to direct messages into
permanent information source (like SQL) would be <em>beneficial</em>.
</p>
        <p>
A simple idea that begs for an alternative implementation of a WCF extensibility
point, has some questions:
</p>
        <ul>
          <li>
What happens when messages are (or should be) exchanged in terms of a transaction
context? 
</li>
          <li>
How can we demand transaction support from the underlying datastore, if we don't want
to put limitations onto anything residing beind the service boundary? 
</li>
          <li>
What about security contexts? How can we acknowledge a secure, durable sessionful
channel after two weeks of service <strike>hibernation</strike> down time? Should
security keys still be valid just because service was down and not responding
all this time? 
</li>
          <li>
Is durability limited to client/service recycling or non-memory message storage? What
about both?</li>
        </ul>
        <p>
Is <font face="Courier New">[DurableService]</font>enough?
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=bdb761f8-8856-41c8-b4ad-c38338bf6567" />
      </body>
      <title>Durable Messaging Continues</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,bdb761f8-8856-41c8-b4ad-c38338bf6567.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,bdb761f8-8856-41c8-b4ad-c38338bf6567.aspx</link>
      <pubDate>Wed, 30 May 2007 20:46:14 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://blogs.msdn.com/nickmalik/archive/2007/05/30/system-reliability-requires-message-durability-immature-wcf.aspx"&gt;Nick&lt;/a&gt; is
continuing &lt;a href="http://www.request-response.com/blog/PermaLink,guid,03fb0e40-b446-42b5-ad90-3be9b0260cb5.aspx"&gt;my
discussion&lt;/a&gt; on durable messaging support in modern WS-* based stacks, especially
WCF.
&lt;/p&gt;
&lt;p&gt;
I agree that having a simple channel configuration support to direct messages into
permanent information source (like SQL) would be &lt;em&gt;beneficial&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
A simple idea that begs for an alternative implementation of a WCF&amp;nbsp;extensibility
point, has some questions:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
What happens when messages are (or should be) exchanged in terms of a transaction
context? 
&lt;li&gt;
How can we demand transaction support from the underlying datastore, if we don't want
to put limitations onto anything residing beind the service boundary? 
&lt;li&gt;
What about security contexts? How can we acknowledge a secure, durable sessionful
channel after two weeks of service &lt;strike&gt;hibernation&lt;/strike&gt; down time? Should
security keys still be valid just&amp;nbsp;because service was down and not responding
all this time? 
&lt;li&gt;
Is durability limited to client/service recycling or non-memory message storage? What
about both?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Is&amp;nbsp;&lt;font face="Courier New"&gt;[DurableService]&lt;/font&gt;enough?
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=bdb761f8-8856-41c8-b4ad-c38338bf6567" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,bdb761f8-8856-41c8-b4ad-c38338bf6567.aspx</comments>
      <category>.NET 3.5 - WCF</category>
      <category>Architecture</category>
      <category>Transactions</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=30aacc82-f0c4-4c36-a5eb-2fd3ae48862a</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,30aacc82-f0c4-4c36-a5eb-2fd3ae48862a.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,30aacc82-f0c4-4c36-a5eb-2fd3ae48862a.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=30aacc82-f0c4-4c36-a5eb-2fd3ae48862a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Microsoft has issued a <a href="http://www.microsoft.com/interop/osp/default.mspx">statement</a> that
all (jointly) developed web services specifications have an "open use" policy attached
to them.
</p>
        <p>
Legal talk:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>"Microsoft irrevocably promises not to assert any Microsoft Necessary Claims against
you for making, using, selling, offering for sale, importing or distributing any implementation
to the extent it conforms to a Covered Specification (“Covered Implementation”), subject
to the following. This is a personal promise directly from Microsoft to you, and you
acknowledge as a condition of benefiting from it that no Microsoft rights are received
from suppliers, distributors, or otherwise in connection with this promise. If you
file, maintain or voluntarily participate in a patent infringement lawsuit against
a Microsoft implementation of such Covered Specification, then this personal promise
does not apply with respect to any Covered Implementation of the same Covered Specification
made or used by you. To clarify, “Microsoft Necessary Claims” are those claims of
Microsoft-owned or Microsoft-controlled patents that are necessary to implement only
the required portions of the Covered Specification that are described in detail and
not merely referenced in such Specification. “Covered Specifications” are listed below."</em>
          </p>
        </blockquote>
        <p dir="ltr">
The promise is given to the specifications themselves and, of course, not to implementations.
</p>
        <p dir="ltr">
GoodMove<sup>tm</sup>.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=30aacc82-f0c4-4c36-a5eb-2fd3ae48862a" />
      </body>
      <title>WS-* has an Open Specification Promise</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,30aacc82-f0c4-4c36-a5eb-2fd3ae48862a.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,30aacc82-f0c4-4c36-a5eb-2fd3ae48862a.aspx</link>
      <pubDate>Wed, 13 Sep 2006 09:13:14 GMT</pubDate>
      <description>&lt;p&gt;
Microsoft has issued a &lt;a href="http://www.microsoft.com/interop/osp/default.mspx"&gt;statement&lt;/a&gt; that
all (jointly) developed web services specifications have an "open use" policy attached
to them.
&lt;/p&gt;
&lt;p&gt;
Legal talk:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;em&gt;"Microsoft irrevocably promises not to assert any Microsoft Necessary Claims against
you for making, using, selling, offering for sale, importing or distributing any implementation
to the extent it conforms to a Covered Specification (“Covered Implementation”), subject
to the following. This is a personal promise directly from Microsoft to you, and you
acknowledge as a condition of benefiting from it that no Microsoft rights are received
from suppliers, distributors, or otherwise in connection with this promise. If you
file, maintain or voluntarily participate in a patent infringement lawsuit against
a Microsoft implementation of such Covered Specification, then this personal promise
does not apply with respect to any Covered Implementation of the same Covered Specification
made or used by you. To clarify, “Microsoft Necessary Claims” are those claims of
Microsoft-owned or Microsoft-controlled patents that are necessary to implement only
the required portions of the Covered Specification that are described in detail and
not merely referenced in such Specification. “Covered Specifications” are listed below."&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr&gt;
The promise is given to the specifications themselves and, of course, not to implementations.
&lt;/p&gt;
&lt;p dir=ltr&gt;
GoodMove&lt;sup&gt;tm&lt;/sup&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=30aacc82-f0c4-4c36-a5eb-2fd3ae48862a" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,30aacc82-f0c4-4c36-a5eb-2fd3ae48862a.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=a40bf4fb-fea6-42c5-a2f2-f0e7dafa3620</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,a40bf4fb-fea6-42c5-a2f2-f0e7dafa3620.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,a40bf4fb-fea6-42c5-a2f2-f0e7dafa3620.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a40bf4fb-fea6-42c5-a2f2-f0e7dafa3620</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.request-response.com/blog/PermaLink,guid,e77d7831-b76f-4750-a650-1503b425467e.aspx">Last
article</a> finished my XML series. This one focuses on transactional semantics in
a service oriented universe.
</p>
        <p>
Language: <strong><em>Slovenian</em></strong></p>
        <hr />
        <p>
Naslov:
</p>
        <p>
          <a href="http://www.request-response.com/blog/content/binary/MatevzGacnik-TransactionalServices.doc">Transakcijska
semantika v šibko sklopljenih, porazdeljenih sistemih</a>
        </p>
        <p>
          <em>
            <a href="http://www.request-response.com/blog/content/binary/MatevzGacnik-TransactionalServices.doc">
              <img alt="Transakcijska semantika v šibko sklopljenih, porazdeljenih sistemih" hspace="0" src="http://www.request-response.com/blog/images/matevzgacnik-TransactionalServices.jpg" align="baseline" border="1" />
            </a>
          </em>
        </p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=a40bf4fb-fea6-42c5-a2f2-f0e7dafa3620" />
      </body>
      <title>Article: Transactional Semantics in Loosely Coupled Distributed Systems</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,a40bf4fb-fea6-42c5-a2f2-f0e7dafa3620.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,a40bf4fb-fea6-42c5-a2f2-f0e7dafa3620.aspx</link>
      <pubDate>Tue, 06 Jun 2006 08:59:30 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.request-response.com/blog/PermaLink,guid,e77d7831-b76f-4750-a650-1503b425467e.aspx"&gt;Last
article&lt;/a&gt; finished my XML series. This one focuses on transactional semantics in
a service oriented universe.
&lt;/p&gt;
&lt;p&gt;
Language:&amp;nbsp;&lt;strong&gt;&lt;em&gt;Slovenian&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
Naslov:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.request-response.com/blog/content/binary/MatevzGacnik-TransactionalServices.doc"&gt;Transakcijska
semantika v šibko sklopljenih, porazdeljenih sistemih&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;a href="http://www.request-response.com/blog/content/binary/MatevzGacnik-TransactionalServices.doc"&gt;&lt;img alt="Transakcijska semantika v šibko sklopljenih, porazdeljenih sistemih" hspace=0 src="http://www.request-response.com/blog/images/matevzgacnik-TransactionalServices.jpg" align=baseline border=1&gt;&lt;/a&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=a40bf4fb-fea6-42c5-a2f2-f0e7dafa3620" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,a40bf4fb-fea6-42c5-a2f2-f0e7dafa3620.aspx</comments>
      <category>.NET 3.0 - WCF</category>
      <category>Architecture</category>
      <category>Articles</category>
      <category>Transactions</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=25e8d68b-09ff-46e8-b360-ecd5128aa90c</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,25e8d68b-09ff-46e8-b360-ecd5128aa90c.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,25e8d68b-09ff-46e8-b360-ecd5128aa90c.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=25e8d68b-09ff-46e8-b360-ecd5128aa90c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The second article is about concepts and semantics of service contracts. It deals
with WCF (<a href="http://www.windowscommunication.net">Windows Communication Foundation</a>)
contract definition and its behavioral aspects.
</p>
        <p>
Language: <strong><em>Slovenian</em></strong></p>
        <hr />
        <p>
Naslov:
</p>
        <p>
          <a href="http://www.request-response.com/blog/content/binary/MatevzGacnik-ServiceContracts.doc">Koncepti
in semantike storitvenih pogodb</a>
        </p>
        <p>
          <em>
            <a href="http://www.request-response.com/blog/content/binary/MatevzGacnik-ServiceContracts.doc">
              <img alt="Koncepti in semantike storitvenih pogodb" hspace="0" src="http://www.request-response.com/blog/images/matevzgacnik-servicecontracts.jpg" align="baseline" border="1" />
            </a>
          </em>
        </p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=25e8d68b-09ff-46e8-b360-ecd5128aa90c" />
      </body>
      <title>Article: Concepts and Semantics of Service Contracts</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,25e8d68b-09ff-46e8-b360-ecd5128aa90c.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,25e8d68b-09ff-46e8-b360-ecd5128aa90c.aspx</link>
      <pubDate>Fri, 02 Jun 2006 18:19:45 GMT</pubDate>
      <description>&lt;p&gt;
The second article is about concepts and semantics of service contracts. It deals
with WCF (&lt;a href="http://www.windowscommunication.net"&gt;Windows Communication Foundation&lt;/a&gt;)
contract definition and its behavioral aspects.
&lt;/p&gt;
&lt;p&gt;
Language:&amp;nbsp;&lt;strong&gt;&lt;em&gt;Slovenian&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
Naslov:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.request-response.com/blog/content/binary/MatevzGacnik-ServiceContracts.doc"&gt;Koncepti
in semantike storitvenih pogodb&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;a href="http://www.request-response.com/blog/content/binary/MatevzGacnik-ServiceContracts.doc"&gt;&lt;img alt="Koncepti in semantike storitvenih pogodb" hspace=0 src="http://www.request-response.com/blog/images/matevzgacnik-servicecontracts.jpg" align=baseline border=1&gt;&lt;/a&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=25e8d68b-09ff-46e8-b360-ecd5128aa90c" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,25e8d68b-09ff-46e8-b360-ecd5128aa90c.aspx</comments>
      <category>.NET 3.0 - WCF</category>
      <category>Architecture</category>
      <category>Articles</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=4d6fe2c7-6177-4f69-b19e-4d5315e0db21</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,4d6fe2c7-6177-4f69-b19e-4d5315e0db21.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,4d6fe2c7-6177-4f69-b19e-4d5315e0db21.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4d6fe2c7-6177-4f69-b19e-4d5315e0db21</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A fellow MVP, Daniel Cazzulino, has a <a href="http://weblogs.asp.net/cazzu/archive/2006/05/25/AjaxIsDead.aspx">post</a> titled <em>AJAX
may be the biggest waste of time for the web</em>. While I agree with most of the
points there, one should think about what Microsoft is doing to lower the AJAX development
experience boundary.
</p>
        <p>
Having to deal with JavaScript, raw (D)HTML and XML is definitely not going to scale
from the developer penetration perspective. Nobody wants to do this is 2006. Therefore
if Atlas guys make their magic happen, this would actually not be neccessary. It they
achieve what they started, one would be abstracted from client side programming in
most of the situations.
</p>
        <p>
          <font face="Courier New">&lt;atlas:UpdatePanel/&gt;</font> and <font face="Courier New">&lt;atlas:ScriptManager/&gt;</font> are
your friends. And they could go a long way.
</p>
        <p>
If this actually happens then we are actually discussing whether rich web based apps
are more appropriate for the future web. There are scenarios that benefit from all
these technologies, obviously. And if the industry concludes that DHTML with XmlHttpRequests
is not powerful enough, who would stop the same model to produce rich WPF/E code from
being emitted out of an Atlas enabled app.
</p>
        <p>
We have, for the most part, been able to <em>abstract the plumbing </em>that is going
on behind the scenes. If it's server side generated code, that should be running on
a client, and if it is JavaScript, because all browsers run it, so be it.
</p>
        <p>
We have swallowed the pill on the SOAP stacks already. We don't care if the communication
starts with a SCT Request+Response messages, following by the key exchange. We do
not care that a simple request-response model produces 15 messages while starting
up. We do not care that there is raw XML being transfered. After all, it is all a
fog, doing what it is supposed to do best - hiding the abstraction behind our
beautiful SOAP/Services stack API.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=4d6fe2c7-6177-4f69-b19e-4d5315e0db21" />
      </body>
      <title>On AJAX being dead</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,4d6fe2c7-6177-4f69-b19e-4d5315e0db21.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,4d6fe2c7-6177-4f69-b19e-4d5315e0db21.aspx</link>
      <pubDate>Sat, 27 May 2006 10:07:39 GMT</pubDate>
      <description>&lt;p&gt;
A fellow MVP, Daniel Cazzulino, has a &lt;a href="http://weblogs.asp.net/cazzu/archive/2006/05/25/AjaxIsDead.aspx"&gt;post&lt;/a&gt; titled &lt;em&gt;AJAX
may be the biggest waste of time for the web&lt;/em&gt;. While I agree with most of the
points there, one should think about what Microsoft is doing to lower the AJAX development
experience boundary.
&lt;/p&gt;
&lt;p&gt;
Having to deal with JavaScript, raw (D)HTML and XML is definitely not going to scale
from the developer penetration perspective. Nobody wants to do this is 2006. Therefore
if Atlas guys make their magic happen, this would actually not be neccessary. It they
achieve what they started, one would be abstracted from client side programming in
most of the situations.
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;atlas:UpdatePanel/&amp;gt;&lt;/font&gt; and &lt;font face="Courier New"&gt;&amp;lt;atlas:ScriptManager/&amp;gt;&lt;/font&gt; are
your friends. And they could go a long way.
&lt;/p&gt;
&lt;p&gt;
If this actually happens then we are actually discussing whether rich web based apps
are more appropriate for the future web. There are scenarios that benefit from all
these technologies, obviously. And if the industry concludes that DHTML with XmlHttpRequests
is not powerful enough, who would stop the same model to produce rich WPF/E code from
being emitted out of an Atlas enabled app.
&lt;/p&gt;
&lt;p&gt;
We have, for the most part, been able to &lt;em&gt;abstract the plumbing &lt;/em&gt;that is going
on behind the scenes. If it's server side generated code, that should be running on
a client, and if it is JavaScript, because all browsers run it, so be it.
&lt;/p&gt;
&lt;p&gt;
We have swallowed the pill on the SOAP stacks already. We don't care if the communication
starts with a SCT Request+Response messages, following by the key exchange. We do
not care that a simple request-response model produces 15 messages while starting
up. We do not care that there is raw XML being transfered. After all, it is all a
fog, doing what it is supposed to do best - hiding the abstraction behind&amp;nbsp;our
beautiful SOAP/Services stack API.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=4d6fe2c7-6177-4f69-b19e-4d5315e0db21" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,4d6fe2c7-6177-4f69-b19e-4d5315e0db21.aspx</comments>
      <category>Other</category>
      <category>Web Services</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=3a99c75b-d108-4fb7-8d1d-8e18c32e659b</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,3a99c75b-d108-4fb7-8d1d-8e18c32e659b.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,3a99c75b-d108-4fb7-8d1d-8e18c32e659b.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3a99c75b-d108-4fb7-8d1d-8e18c32e659b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This post will focus on how to enable <em>IIS7 in Windows Vista</em> client and to
use it to host a service activated Windows Workflow.
</p>
        <p>
Procedure is based on the current build of Windows Vista (5381.1), which is a RC1
for Beta 2 milestone. Also, <a href="http://msdn.microsoft.com/windowsvista/downloads/getthebeta/default.aspx">WinFX
February CTP</a> is used, which includes Windows Workflow Foundation Beta 2.
</p>
        <p>
There are a couple of prerequisite steps necessary to enable hosting, first of all,
installing IIS7. Go to <font face="Courier New">Control Panel/Programs/Turn on or
off Windows Features</font> and enable 'Internet Information Services':
</p>
        <p>
          <img alt="Add or remove Windows features" hspace="0" src="http://www.request-response.com/blog/images/addwinf.jpg" align="baseline" border="0" />
        </p>
        <p>
Installer in build 5381.1 (and 5365) is stable enough to be useful. If you're running
a previous build of Vista (5308, 5342) consider installing IIS by running this <em>monster</em> in
the command prompt:
</p>
        <p>
          <font face="Courier New">start /w pkgmgr /l:log.etw /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ASP;IIS-CGI;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-HttpTracing;IIS-CustomLogging;IIS-ODBCLogging;IIS-Security;IIS-BasicAuthentication;IIS-WindowsAuthentication;IIS-DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS-IISCertificateMappingAuthentication;IIS-URLAuthorization;IIS-RequestFiltering;IIS-IPSecurity;IIS-Performance;IIS-HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-WebServerManagementTools;IIS-ManagementConsole;IIS-ManagementScriptingTools;IIS-ManagementService;IIS-IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-LegacyScripts;IIS-LegacySnapIn;IIS-FTPPublishingService;IIS-FTPServer;IIS-FTPManagement;WAS-WindowsActivationService;WAS-ProcessModel;WAS-NetFxEnvironment;WAS-ConfigurationAPI</font>
        </p>
        <p>
Make sure you also check <font face="Courier New">ASP.NET</font> under <font face="Courier New">World
Wide Web Services/Application Development features</font>, since this will install
and enable ASP .NET 2.0 under all IIS7 sites. You can also do this later on using <font face="Courier New">aspnet_regiis.exe</font>,
but Vista will notify you that the preferred way is using Turn on or off Windows features
dialog.
</p>
        <p>
Now, when you have IIS installed run the administrative console inside <font face="Courier New">Administrative
Tools</font><font face="Verdana"> and define a web application by right clicking on <font face="Courier New">Default
Web Site</font>:</font></p>
        <p>
          <img style="WIDTH: 520px; HEIGHT: 328px" alt="Creating application on IIS7" hspace="0" src="http://www.request-response.com/blog/images/wfservice.jpg" align="baseline" border="0" />
        </p>
        <p>
This will allow you to run your workflow as a service inside the default application
pool. You can check and notice that default application pool uses a new <em>integrated</em> IIS7
mode <em>and not </em>ISAPI as in IIS5/6.
</p>
        <p>
You're ready to deploy your workflow activated service now. use the steps described
in my <a href="http://www.request-response.com/blog/PermaLink,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx">previous
post</a>, under <strong>Ad 1</strong>.
</p>
        <p>
When you hit the service endpoint you get this:
</p>
        <p>
          <img alt="Configuration error in IIS7" hspace="0" src="http://www.request-response.com/blog/images/500error.jpg" align="baseline" border="0" />
        </p>
        <p>
IIS7 is noticing you that your config files are not compatible with the new hosting
model.
</p>
        <p>
You have two options:
</p>
        <ul>
          <li>
Change the configuration files</li>
          <li>
Change the hosting model</li>
        </ul>
        <p>
You can change the configuration files by running: <font face="Courier New">c:\windows\system32\inetsrv\appcmd.exe migrate
config "&lt;Site name&gt;/&lt;VRoot name&gt;"</font>. <font face="Courier New">AppCmd.exe</font> is
a tool which automatically migrates your old config, to IIS7's new config format.
</p>
        <p>
Another option is that you enable old style ISAPI hosting model inside your application
pool that is running your default web site (or another site, if that's what the workflow
is supposed to be running under). You can do this either by:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
1. Running <font face="Courier New">c:\windows\system32\inetsrv\appcmd.exe set
app "&lt;Site name&gt;/&lt;VRoot name&gt;" /applicationPool: "Classic .NET AppPool".</font><font face="Verdana"> This
changes the site to use another, preconfigured app pool, which uses ISAPI by default. </font></p>
          <p>
            <font face="Verdana">Here's a screenshot of the default pipeline modes for IIS7:</font>
          </p>
          <p>
            <img alt="Application pool config in IIS7" hspace="0" src="http://www.request-response.com/blog/images/apppools.jpg" align="baseline" border="0" />
          </p>
          <p>
2. Changing the hosting model on the current <font face="Courier New">Default Web
Site</font> site. You can right click on <font face="Courier New">Application Pools/DefaultAppPool</font> and
select <font face="Courier New">Set Application Pool Defaults</font>. Then you change
the pipeline mode from <font face="Courier New">Integrated</font> to <font face="Courier New">ISAPI</font>.
Here's how you do it:
</p>
          <p>
            <img alt="Pipeline mode selection" hspace="0" src="http://www.request-response.com/blog/images/pipelinemode.jpg" align="baseline" border="0" />
          </p>
        </blockquote>
        <p>
I prefer going through route 1. Integrated mode is how you should be running your
sites under IIS7, so changing the config to make IIS7 happy is the way to go. If you
have specific ISAPI functionality (not limited to Workflows) you can, though run in
classic mode by designing your app pool around it.
</p>
        <p>
Now your service activated workflow will run and execute under IIS7. Again, beware
of the caveats I described <a href="http://www.request-response.com/blog/PermaLink,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx">here</a>.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3a99c75b-d108-4fb7-8d1d-8e18c32e659b" />
      </body>
      <title>Windows Workflow Foundation: Running Service Activated Workflows on Windows Vista and IIS7</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,3a99c75b-d108-4fb7-8d1d-8e18c32e659b.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,3a99c75b-d108-4fb7-8d1d-8e18c32e659b.aspx</link>
      <pubDate>Thu, 11 May 2006 10:15:46 GMT</pubDate>
      <description>&lt;p&gt;
This post will focus on how to enable &lt;em&gt;IIS7 in Windows Vista&lt;/em&gt; client and to
use it to host a service activated Windows Workflow.
&lt;/p&gt;
&lt;p&gt;
Procedure is based on the current build of Windows Vista (5381.1), which is a RC1
for Beta 2 milestone. Also, &lt;a href="http://msdn.microsoft.com/windowsvista/downloads/getthebeta/default.aspx"&gt;WinFX
February CTP&lt;/a&gt; is used, which includes Windows Workflow Foundation Beta 2.
&lt;/p&gt;
&lt;p&gt;
There are a couple of prerequisite steps necessary to enable hosting, first of all,
installing IIS7. Go to &lt;font face="Courier New"&gt;Control Panel/Programs/Turn on or
off Windows Features&lt;/font&gt; and enable 'Internet Information Services':
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Add or remove Windows features" hspace=0 src="http://www.request-response.com/blog/images/addwinf.jpg" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Installer in build 5381.1 (and 5365) is stable enough to be useful. If you're running
a previous build of Vista (5308, 5342) consider installing IIS by running this &lt;em&gt;monster&lt;/em&gt; in
the command prompt:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;start /w pkgmgr /l:log.etw /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ASP;IIS-CGI;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-HttpTracing;IIS-CustomLogging;IIS-ODBCLogging;IIS-Security;IIS-BasicAuthentication;IIS-WindowsAuthentication;IIS-DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS-IISCertificateMappingAuthentication;IIS-URLAuthorization;IIS-RequestFiltering;IIS-IPSecurity;IIS-Performance;IIS-HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-WebServerManagementTools;IIS-ManagementConsole;IIS-ManagementScriptingTools;IIS-ManagementService;IIS-IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-LegacyScripts;IIS-LegacySnapIn;IIS-FTPPublishingService;IIS-FTPServer;IIS-FTPManagement;WAS-WindowsActivationService;WAS-ProcessModel;WAS-NetFxEnvironment;WAS-ConfigurationAPI&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
Make sure you also check &lt;font face="Courier New"&gt;ASP.NET&lt;/font&gt; under &lt;font face="Courier New"&gt;World
Wide Web Services/Application Development features&lt;/font&gt;, since this will install
and enable ASP .NET 2.0 under all IIS7 sites. You can also do this later on using &lt;font face="Courier New"&gt;aspnet_regiis.exe&lt;/font&gt;,
but Vista will notify you that the preferred way is using Turn on or off Windows features
dialog.
&lt;/p&gt;
&lt;p&gt;
Now, when you have IIS installed run the administrative console inside &lt;font face="Courier New"&gt;Administrative
Tools&lt;/font&gt;&lt;font face=Verdana&gt; and define a web application by right clicking on &lt;font face="Courier New"&gt;Default
Web Site&lt;/font&gt;:&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img style="WIDTH: 520px; HEIGHT: 328px" alt="Creating application on IIS7" hspace=0 src="http://www.request-response.com/blog/images/wfservice.jpg" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
This will allow you to run your workflow as a service inside the default application
pool. You can check and notice that default application pool uses a new &lt;em&gt;integrated&lt;/em&gt; IIS7
mode &lt;em&gt;and not &lt;/em&gt;ISAPI as in IIS5/6.
&lt;/p&gt;
&lt;p&gt;
You're ready to deploy your workflow activated service now. use the steps described
in my &lt;a href="http://www.request-response.com/blog/PermaLink,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx"&gt;previous
post&lt;/a&gt;, under &lt;strong&gt;Ad 1&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
When you hit the service endpoint you get this:
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Configuration error in IIS7" hspace=0 src="http://www.request-response.com/blog/images/500error.jpg" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
IIS7 is noticing you that your config files are not compatible with the new hosting
model.
&lt;/p&gt;
&lt;p&gt;
You have two options:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Change the configuration files&lt;/li&gt;
&lt;li&gt;
Change the hosting model&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You can change the configuration files by running: &lt;font face="Courier New"&gt;c:\windows\system32\inetsrv\appcmd.exe&amp;nbsp;migrate
config&amp;nbsp;"&amp;lt;Site name&amp;gt;/&amp;lt;VRoot name&amp;gt;"&lt;/font&gt;. &lt;font face="Courier New"&gt;AppCmd.exe&lt;/font&gt; is
a tool which automatically migrates your old config, to IIS7's new config format.
&lt;/p&gt;
&lt;p&gt;
Another option is that you enable old style ISAPI hosting model inside your application
pool that is running your default web site (or another site, if that's what the workflow
is supposed to be running under). You can do this either by:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
1. Running&amp;nbsp;&lt;font face="Courier New"&gt;c:\windows\system32\inetsrv\appcmd.exe&amp;nbsp;set
app&amp;nbsp;"&amp;lt;Site name&amp;gt;/&amp;lt;VRoot name&amp;gt;" /applicationPool: "Classic .NET AppPool".&lt;/font&gt;&lt;font face=Verdana&gt; This
changes the site to use another, preconfigured app pool, which uses ISAPI by default. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face=Verdana&gt;Here's a screenshot of the default pipeline modes for IIS7:&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Application pool config in IIS7" hspace=0 src="http://www.request-response.com/blog/images/apppools.jpg" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
2. Changing the hosting model on the current &lt;font face="Courier New"&gt;Default Web
Site&lt;/font&gt; site. You can right click on &lt;font face="Courier New"&gt;Application Pools/DefaultAppPool&lt;/font&gt; and
select &lt;font face="Courier New"&gt;Set Application Pool Defaults&lt;/font&gt;. Then you change
the pipeline mode from &lt;font face="Courier New"&gt;Integrated&lt;/font&gt; to &lt;font face="Courier New"&gt;ISAPI&lt;/font&gt;.
Here's how you do it:
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Pipeline mode selection" hspace=0 src="http://www.request-response.com/blog/images/pipelinemode.jpg" align=baseline border=0&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I prefer going through route 1. Integrated mode is how you should be running your
sites under IIS7, so changing the config to make IIS7 happy is the way to go. If you
have specific ISAPI functionality (not limited to Workflows) you can, though run in
classic mode by designing your app pool around it.
&lt;/p&gt;
&lt;p&gt;
Now your service activated workflow will run and execute under IIS7. Again, beware
of the caveats I described &lt;a href="http://www.request-response.com/blog/PermaLink,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3a99c75b-d108-4fb7-8d1d-8e18c32e659b" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,3a99c75b-d108-4fb7-8d1d-8e18c32e659b.aspx</comments>
      <category>Web Services</category>
      <category>Windows Vista</category>
      <category>.NET 3.0 - WF</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=21c95c2c-63d7-44f6-8357-1be0ecb6f264</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=21c95c2c-63d7-44f6-8357-1be0ecb6f264</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
There are currently a couple of options to expose a Windows Workflow as as service.
</p>
        <ol>
          <li>
There is a native option to publish a developed Workflow Library project as a ASP
.NET Web Service (ASMX). 
</li>
          <li>
You can host it yourself (ASMX, WCF) 
</li>
          <li>
            <a href="http://www.softwaremaker.net/blog/">William Tay</a> is doing excellent work
towards <a href="http://www.softwaremaker.net/blog/HookingAWorkflowIntoYourWCFDispatcher.aspx">hosting
a workflow inside the WCF service pipeline</a> (WCF) 
</li>
          <li>
            <a href="http://www.codeproject.com/script/profile/whos_who.asp?vt=arts&amp;id=24570">Roman
Kiss</a> created a <a href="http://windowscommunication.net/ControlGallery/ControlDetail.aspx?Control=2278&amp;tabindex=2">static
WorkflowInvoker class</a>, which does all the heavy liting for you, if you want to
host your workflow inside the WCF service method (WCF)</li>
        </ol>
        <p>
I'm going to focus on Ad 1 and Ad 2 in this post.
</p>
        <p>
          <strong>Ad 1:</strong>
        </p>
        <p>
There's an option to host your workflow library inside a web service by using a "Publish
as a Web Service" option inside Visual Studio 2005. This creates a separate ASP .NET
Web Service project inside your current solution, which you can later manually or
automatically publish as a web site to your IIS of choice.
</p>
        <p>
The are <em>two major downsides</em> to this story. The first is that this gives
you practically no control over how the web service is created. Second downside,
while documented, is that the current implementation of <font face="Courier New">System.Workflow.Runtime.WorkflowWebHostingModule</font> works
in particular ways with the workflow persistence story.
</p>
        <p>
Let's assume we have to following interface defined for this web service:
</p>
        <p>
          <font face="Courier New">interface <strong>IServiceInterface<br /></strong></font>
          <font face="Courier New">{<br /></font>
          <font face="Courier New">   void <strong>SendOrder</strong>(Order
order);<br /></font>
          <font face="Courier New">   Order <strong>GetOrder</strong>(Guid
guidOrder);<br /></font>
          <font face="Courier New">   int <strong>GetOrderStatus</strong>(Guid
guidOrder);<br /></font>
          <font face="Courier New">}</font>
        </p>
        <p>
What happens is (request number 1):
</p>
        <ol>
          <li>
You publish your workflow as a web service 
</li>
          <li>
You hit the service endpoint with a browser 
</li>
          <li>
Workflow instance gets created, is run and returns a result 
</li>
          <li>
At this time the workflow runtime (System.Workflow.Runtime.WorkflowRuntime instance)
creates a workflow instance and runs it. Since workflow completes succesfully it destroys
the instance at the end of execution. 
</li>
          <li>
Workflow runtime returns a cookie with the workflow instance back to the browser and
since IE's default setting is to accept cookies, it is written to the client's disk</li>
        </ol>
        <p>
All good, right?
</p>
        <p>
Actually, what happens during request number 2?
</p>
        <ol>
          <li>
You hit the endpoint <strong>again</strong></li>
          <li>
IE knows that the site has a persisted cookie, so it sends it bundled with the SOAP
request 
</li>
          <li>
Workflow runtime sees it and tries to load the specified workflow instance 
</li>
          <li>
This instance is long gone, it does not exist in memory (it has been destroyed, remember?),
so workflow runtime tries to rehydrate it from a persistence store. If there is a
persistence store defined it goes there (most probably <font face="Courier New">WorkflowPersistenceStore</font> in
SQL Server) and correctly identifies that the workflow instance is not present, so
it <strong>fails</strong> with <font face="Courier New">'Workflow with id &lt;GUID&gt;
not found in state persistence store.'</font>. If the persistence store is not
defined for this workflow it <strong>fails</strong> with <font face="Courier New">'The
workflow hosting environment does not have a persistence service as required by an
operation on the workflow instance &lt;GUID&gt;.'</font>.</li>
        </ol>
        <p>
And all this is actually the expected behavior if you think hard enough. Workaround?
Hit the endpoint with a newly loaded IE window. It works every time, since a
cookie with an instance ID is not present.
</p>
        <p>
Another thing to mention here is that this issue does not manifest itself if you hit
the endpoint programatically using the web service proxy, unless you are using a <font face="Courier New">CookieContainer</font> class
to cache the returning cookies.
</p>
        <p>
          <strong>Ad 2:</strong>
        </p>
        <p>
Hosting a Windows Workflow manually is another option, which gives you more flexibility
towards the service detail tweeking.
</p>
        <p>
You can host it using the following code:
</p>
        <p>
          <font face="Courier New">[WebService(Namespace = "</font>
          <font face="Courier New">http://webservices.gama-system.com/</font>
          <font face="Courier New">")]<br />
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]<br />
public class WorkflowService : System.Web.Services.WebService<br />
{<br />
    // workflow runtime<br />
    <strong>private static WorkflowRuntime workflowRuntime = new WorkflowRuntime();</strong><br />
    <br /></font>
          <font face="Courier New">    [WebMethod]<br />
    public void SendOrder(Order order)<br />
    {<br /></font>
          <font face="Courier New">        AutoResetEvent
waitHandle = new AutoResetEvent(false);<br />
        workflowRuntime.WorkflowCompleted +=<br />
           delegate(object sender,
WorkflowCompletedEventArgs e)<br />
        {<br />
            waitHandle.Set();<br />
        };<br />
        
<br />
        workflowRuntime.WorkflowTerminated +=<br />
           delegate(object sender,
WorkflowTerminatedEventArgs e)<br />
        {<br />
            waitHandle.Set();<br />
        };</font>
        </p>
        <p>
          <font face="Courier New">        // create workflow
instance with the specified parameters<br />
        WorkflowInstance instance =<br />
           workflowRuntime.CreateWorkflow(typeof(MyWorkflow));<br />
        instance.Start();</font>
        </p>
        <p>
          <font face="Courier New">        waitHandle.WaitOne();<br />
    }    
<br />
}</font>
        </p>
        <p>
An important thing in the specified sample is that the <font face="Courier New">System.Workflow.Runtime.WorkflowRuntime</font> instance
is static to the service implementation class. This is a requirement, since the workflow
runtime can only get loaded once per appdomain. If this is not the case you will get
an exception during the second invocation of the workflow.
</p>
        <p>
If you are using any additional workflow runtime services, like persistence, tracking
or your own communication service to communicate with the workflow you will need to
track that the services get loaded once only. Here's the example:
</p>
        <p>
          <font face="Courier New">[WebService(Namespace = "</font>
          <font face="Courier New">http://webservices.gama-system.com/</font>
          <font face="Courier New">")]<br />
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]<br />
public class WorkflowService : System.Web.Services.WebService<br />
{<br />
    // workflow runtime<br />
    <strong>private static WorkflowRuntime workflowRuntime = new WorkflowRuntime();</strong><br />
    
<br />
    </font>
          <font face="Courier New">// services added<br />
    <strong>private static bool booServicesAdded = false;</strong></font>
        </p>
        <p>
          <font face="Courier New">    // communication service<br />
    <strong>private static CommunicationService objComm = new CommunicationService();<br /></strong><br /></font>
          <font face="Courier New">    [WebMethod]<br />
    public void SendOrder(Order order)<br />
    {<br /></font>
          <font face="Courier New">        <strong>//
add communication service<br />
        if (!booServicesAdded)<br />
        {<br />
            ExternalDataExchangeService
externalService =<br />
              
new ExternalDataExchangeService();<br />
            workflowRuntime.AddService(externalService);<br />
            externalService.AddService(objComm);<br />
            booServiceAdded
= true;<br />
        }<br /></strong><br /></font>
          <font face="Courier New">        AutoResetEvent
waitHandle = new AutoResetEvent(false);<br />
        workflowRuntime.WorkflowCompleted +=<br />
           delegate(object sender,
WorkflowCompletedEventArgs e)<br />
        {<br />
            waitHandle.Set();<br />
        };<br />
        
<br />
        workflowRuntime.WorkflowTerminated +=<br />
           delegate(object sender,
WorkflowTerminatedEventArgs e)<br />
        {<br />
            waitHandle.Set();<br />
        };</font>
        </p>
        <p>
          <font face="Courier New">        // create workflow
instance with the specified parameters<br />
        WorkflowInstance instance =<br />
           workflowRuntime.CreateWorkflow(typeof(MyWorkflow));<br />
        instance.Start();</font>
        </p>
        <p>
          <font face="Courier New">        waitHandle.WaitOne();<br />
    }    
<br />
}</font>
        </p>
        <p>
This adds the required services only during the first invocation of a web service.
Since workflow runtime is a static class the services get persisted during all subsequent
service calls. A boolean variable <font face="Courier New">booServicesAdded</font> is
responsible for flag storage.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=21c95c2c-63d7-44f6-8357-1be0ecb6f264" />
      </body>
      <title>Windows Workflow Foundation: Exposing Workflows as Services</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx</link>
      <pubDate>Wed, 10 May 2006 08:55:37 GMT</pubDate>
      <description>&lt;p&gt;
There are currently a couple of options to expose a Windows Workflow as as service.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
There is a native option to publish a developed Workflow Library project as a ASP
.NET Web Service (ASMX). 
&lt;li&gt;
You can host it yourself (ASMX, WCF) 
&lt;li&gt;
&lt;a href="http://www.softwaremaker.net/blog/"&gt;William Tay&lt;/a&gt; is doing excellent work
towards &lt;a href="http://www.softwaremaker.net/blog/HookingAWorkflowIntoYourWCFDispatcher.aspx"&gt;hosting
a workflow inside the WCF service pipeline&lt;/a&gt;&amp;nbsp;(WCF) 
&lt;li&gt;
&lt;a href="http://www.codeproject.com/script/profile/whos_who.asp?vt=arts&amp;amp;id=24570"&gt;Roman
Kiss&lt;/a&gt; created a &lt;a href="http://windowscommunication.net/ControlGallery/ControlDetail.aspx?Control=2278&amp;amp;tabindex=2"&gt;static
WorkflowInvoker class&lt;/a&gt;, which does all the heavy liting for you, if you want to
host your workflow inside the WCF service method (WCF)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
I'm going to focus on Ad 1 and Ad 2 in this post.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ad 1:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
There's an option to host your workflow library inside a web service by using a "Publish
as a Web Service" option inside Visual Studio 2005. This creates a separate ASP .NET
Web Service project inside your current solution, which you can later manually or
automatically publish as a web site to your IIS of choice.
&lt;/p&gt;
&lt;p&gt;
The are &lt;em&gt;two major downsides&lt;/em&gt; to this story. The first is&amp;nbsp;that this gives
you practically no control over how&amp;nbsp;the web service is created. Second downside,
while documented, is that the current implementation of &lt;font face="Courier New"&gt;System.Workflow.Runtime.WorkflowWebHostingModule&lt;/font&gt; works
in particular ways with the workflow persistence story.
&lt;/p&gt;
&lt;p&gt;
Let's assume we have to following interface defined for this web service:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;interface &lt;strong&gt;IServiceInterface&lt;br&gt;
&lt;/strong&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;{&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;void &lt;strong&gt;SendOrder&lt;/strong&gt;(Order
order);&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Order &lt;strong&gt;GetOrder&lt;/strong&gt;(Guid
guidOrder);&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int &lt;strong&gt;GetOrderStatus&lt;/strong&gt;(Guid
guidOrder);&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
What happens is (request number 1):
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
You publish your workflow as a web service 
&lt;li&gt;
You hit the service endpoint with a browser 
&lt;li&gt;
Workflow instance gets created, is run and returns a result 
&lt;li&gt;
At this time the workflow runtime (System.Workflow.Runtime.WorkflowRuntime instance)
creates a workflow instance and runs it. Since workflow completes succesfully it destroys
the instance at the end of execution. 
&lt;li&gt;
Workflow runtime returns a cookie with the workflow instance back to the browser and
since IE's default setting is to accept cookies, it is written to the client's disk&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
All good, right?
&lt;/p&gt;
&lt;p&gt;
Actually, what happens&amp;nbsp;during request number 2?
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
You hit the endpoint &lt;strong&gt;again&lt;/strong&gt; 
&lt;li&gt;
IE knows that the site has a persisted cookie, so it sends it bundled with the SOAP
request 
&lt;li&gt;
Workflow runtime sees it and tries to load the specified workflow instance 
&lt;li&gt;
This instance is long gone, it does not exist in memory (it has been destroyed, remember?),
so workflow runtime tries to rehydrate it from a persistence store. If there is a
persistence store defined it goes there (most probably &lt;font face="Courier New"&gt;WorkflowPersistenceStore&lt;/font&gt; in
SQL Server) and correctly identifies that the workflow instance is not present, so
it &lt;strong&gt;fails&lt;/strong&gt; with &lt;font face="Courier New"&gt;'Workflow with id&amp;nbsp;&amp;lt;GUID&amp;gt;
not found in state persistence store.'&lt;/font&gt;.&amp;nbsp;If the persistence store is not
defined for this workflow it &lt;strong&gt;fails&lt;/strong&gt; with &lt;font face="Courier New"&gt;'The
workflow hosting environment does not have a persistence service as required by an
operation on the workflow instance &amp;lt;GUID&amp;gt;.'&lt;/font&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
And all this is actually the expected behavior if you think hard enough. Workaround?
Hit the endpoint with a newly loaded&amp;nbsp;IE window. It works every time, since a
cookie with an instance ID is not present.
&lt;/p&gt;
&lt;p&gt;
Another thing to mention here is that this issue does not manifest itself if you hit
the endpoint programatically using the web service proxy, unless you are using a &lt;font face="Courier New"&gt;CookieContainer&lt;/font&gt; class
to cache the returning cookies.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ad 2:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Hosting a Windows Workflow manually is another option, which gives you more flexibility
towards the service detail tweeking.
&lt;/p&gt;
&lt;p&gt;
You can host it using the following code:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[WebService(Namespace = "&lt;/font&gt;&lt;font face="Courier New"&gt;http://webservices.gama-system.com/&lt;/font&gt;&lt;font face="Courier New"&gt;")]&lt;br&gt;
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]&lt;br&gt;
public class&amp;nbsp;WorkflowService : System.Web.Services.WebService&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // workflow runtime&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;private static WorkflowRuntime workflowRuntime = new WorkflowRuntime();&lt;/strong&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [WebMethod]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public&amp;nbsp;void SendOrder(Order order)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoResetEvent
waitHandle = new AutoResetEvent(false);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; workflowRuntime.WorkflowCompleted +=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delegate(object sender,
WorkflowCompletedEventArgs e)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; waitHandle.Set();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; workflowRuntime.WorkflowTerminated +=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delegate(object sender,
WorkflowTerminatedEventArgs e)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; waitHandle.Set();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // create workflow
instance with the specified parameters&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WorkflowInstance instance =&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; workflowRuntime.CreateWorkflow(typeof(MyWorkflow));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance.Start();&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; waitHandle.WaitOne();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
An important thing in the specified sample is that the &lt;font face="Courier New"&gt;System.Workflow.Runtime.WorkflowRuntime&lt;/font&gt; instance
is static to the service implementation class. This is a requirement, since the workflow
runtime can only get loaded once per appdomain. If this is not the case you will get
an exception during the second invocation of the workflow.
&lt;/p&gt;
&lt;p&gt;
If you are using any additional workflow runtime services, like persistence, tracking
or your own communication service to communicate with the workflow you will need to
track that the services get loaded once only. Here's the example:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[WebService(Namespace = "&lt;/font&gt;&lt;font face="Courier New"&gt;http://webservices.gama-system.com/&lt;/font&gt;&lt;font face="Courier New"&gt;")]&lt;br&gt;
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]&lt;br&gt;
public class&amp;nbsp;WorkflowService : System.Web.Services.WebService&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // workflow runtime&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;private static WorkflowRuntime workflowRuntime = new WorkflowRuntime();&lt;/strong&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Courier New"&gt;// services added&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;private static bool booServicesAdded = false;&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // communication&amp;nbsp;service&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;private static CommunicationService objComm = new CommunicationService();&lt;br&gt;
&lt;/strong&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [WebMethod]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public&amp;nbsp;void SendOrder(Order order)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;//
add communication service&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!booServicesAdded)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; ExternalDataExchangeService
externalService =&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;
new ExternalDataExchangeService();&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; workflowRuntime.AddService(externalService);&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; externalService.AddService(objComm);&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; booServiceAdded
= true;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;/strong&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AutoResetEvent
waitHandle = new AutoResetEvent(false);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; workflowRuntime.WorkflowCompleted +=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delegate(object sender,
WorkflowCompletedEventArgs e)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; waitHandle.Set();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; workflowRuntime.WorkflowTerminated +=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delegate(object sender,
WorkflowTerminatedEventArgs e)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; waitHandle.Set();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // create workflow
instance with the specified parameters&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WorkflowInstance instance =&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; workflowRuntime.CreateWorkflow(typeof(MyWorkflow));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance.Start();&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; waitHandle.WaitOne();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
This adds the required services only during the first invocation of a web service.
Since workflow runtime is a static class the services get persisted during all subsequent
service calls. A boolean variable &lt;font face="Courier New"&gt;booServicesAdded&lt;/font&gt; is
responsible for flag storage.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=21c95c2c-63d7-44f6-8357-1be0ecb6f264" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,21c95c2c-63d7-44f6-8357-1be0ecb6f264.aspx</comments>
      <category>Web Services</category>
      <category>.NET 3.0 - WCF</category>
      <category>.NET 3.0 - WF</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=234611e0-6a50-48fe-bddb-cec54eccc084</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,234611e0-6a50-48fe-bddb-cec54eccc084.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,234611e0-6a50-48fe-bddb-cec54eccc084.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=234611e0-6a50-48fe-bddb-cec54eccc084</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
WinFX January 2006 CTP just went <a href="http://msdn.microsoft.com/windowsvista/getthebeta/default.aspx">live</a>.
</p>
        <p>
With it, a Go-Live licence is available for WCF and WF. Sign and deploy.
</p>
        <p>
          <strong>
            <em>Update:</em>
          </strong> They managed to screw up the download links again.
Beware: If you're downloading complete installs (and not the setup manager) use the
lower links for x86 and x64 images (there are two on the get the beta page).
</p>
        <p>
The following links will lead to correct complete download of WinFX January 2006 CTP
Runtime Components:
</p>
        <ul>
          <li>
x86: <a href="http://download.microsoft.com/download/1/C/E/1CE323BD-3632-45CD-ADB3-61179B033434/winfxrc.exe">http://download.microsoft.com/download/1/C/E/1CE323BD-3632-45CD-ADB3-61179B033434/winfxrc.exe</a></li>
          <li>
x64: <a href="http://download.microsoft.com/download/2/0/6/2065648E-444C-40A6-AE58-3F46FC8E854F/winfxrc_x64.exe">http://download.microsoft.com/download/2/0/6/2065648E-444C-40A6-AE58-3F46FC8E854F/winfxrc_x64.exe</a></li>
        </ul>
        <p>
You can also check the file version. The correct WinFX RTC version for January 2006
CTP is 3.0.50727.154 (file size 44.488 KB [x86] and 84.464 KB [x64]). December CTP
was 3.0.50727.151 and file sizes were a couple KB lower.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=234611e0-6a50-48fe-bddb-cec54eccc084" />
      </body>
      <title>WinFX January 2006 CTP Released</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,234611e0-6a50-48fe-bddb-cec54eccc084.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,234611e0-6a50-48fe-bddb-cec54eccc084.aspx</link>
      <pubDate>Wed, 18 Jan 2006 20:34:01 GMT</pubDate>
      <description>&lt;p&gt;
WinFX January 2006 CTP just went &lt;a href="http://msdn.microsoft.com/windowsvista/getthebeta/default.aspx"&gt;live&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
With it, a Go-Live licence is available for WCF and WF. Sign and deploy.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;Update:&lt;/em&gt;&lt;/strong&gt; They managed to screw up the download links again.
Beware: If you're downloading complete installs (and not the setup manager) use the
lower links for x86 and x64 images (there are two on the get the beta page).
&lt;/p&gt;
&lt;p&gt;
The following links will lead to correct complete download of WinFX January 2006 CTP
Runtime Components:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
x86: &lt;a href="http://download.microsoft.com/download/1/C/E/1CE323BD-3632-45CD-ADB3-61179B033434/winfxrc.exe"&gt;http://download.microsoft.com/download/1/C/E/1CE323BD-3632-45CD-ADB3-61179B033434/winfxrc.exe&lt;/a&gt; 
&lt;li&gt;
x64: &lt;a href="http://download.microsoft.com/download/2/0/6/2065648E-444C-40A6-AE58-3F46FC8E854F/winfxrc_x64.exe"&gt;http://download.microsoft.com/download/2/0/6/2065648E-444C-40A6-AE58-3F46FC8E854F/winfxrc_x64.exe&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You can also check the file version. The correct WinFX RTC version for January 2006
CTP is 3.0.50727.154 (file size 44.488 KB [x86] and 84.464 KB [x64]). December CTP
was 3.0.50727.151 and file sizes were a couple KB lower.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=234611e0-6a50-48fe-bddb-cec54eccc084" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,234611e0-6a50-48fe-bddb-cec54eccc084.aspx</comments>
      <category>Web Services</category>
      <category>.NET 3.0 - General</category>
      <category>Work</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=5371ff94-3412-4e41-87f7-3740c8e04ac4</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,5371ff94-3412-4e41-87f7-3740c8e04ac4.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,5371ff94-3412-4e41-87f7-3740c8e04ac4.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5371ff94-3412-4e41-87f7-3740c8e04ac4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
There is a common functionality request in modern distributed applications that clients
and services (client also being other services) could communicate using different
communication protocols and/or different transport semantics inside a single protocol.
</p>
        <p>
For this sample we're going to limit ourselves to HTTP messaging, but this does not
limit the scope of the article. Other transport protocols can be added without obstructing
other transport mechanisms.
</p>
        <p>
To allow this scenario Indigo (Windows Communication Foundation, WCF) allows multiple
endpoints per service to be setup. Service side bindings can, for example, be the
following:
</p>
        <p>
          <font face="Courier New">&lt;bindings&gt;<br />
  &lt;wsProfileBinding&gt;<br />
    &lt;binding 
<br />
      configurationName="Secure" 
<br />
      orderedSession="false" 
<br />
      reliableSessionEnabled="false" 
<br />
      securityMode="WSSecurityOverHttp" 
<br />
      maxMessageSize="134217728"<br />
      flowTransactions="NotAllowed"<br />
      messageEncoding="Text"&gt;<br />
      &lt;wsSecurity 
<br />
        authenticationMode="Certificate" 
<br />
        useNegotiation="true" /&gt;<br />
    &lt;/binding&gt;<br />
    &lt;binding 
<br />
      configurationName="SecureReliable" 
<br />
      orderedSession="true" 
<br />
      reliableSessionEnabled="true" 
<br />
      securityMode="WSSecurityOverHttp"<br />
      maxMessageSize="134217728"<br />
      flowTransactions="NotAllowed"<br />
      messageEncoding="Text"&gt;<br />
      &lt;wsSecurity<br />
        authenticationMode="Certificate" 
<br />
        useNegotiation="true" /&gt;<br />
    &lt;/binding&gt;<br />
    &lt;binding<br />
      configurationName="SecureReliableTransacted" 
<br />
      orderedSession="true" 
<br />
      reliableSessionEnabled="true" 
<br />
      securityMode="WSSecurityOverHttp"<br />
      maxMessageSize="134217728"<br />
      flowTransactions="Allowed"<br />
      messageEncoding="Text"&gt;<br />
      &lt;wsSecurity 
<br />
        authenticationMode="Certificate" 
<br />
        useNegotiation="true" /&gt;<br />
    &lt;/binding&gt;<br />
    &lt;binding 
<br />
      configurationName="SecureMTOM" 
<br />
      orderedSession="false" 
<br />
      reliableSessionEnabled="false" 
<br />
      securityMode="WSSecurityOverHttp" 
<br />
      maxMessageSize="134217728"<br />
      flowTransactions="NotAllowed"<br />
      messageEncoding="Mtom"&gt;<br />
      &lt;wsSecurity 
<br />
        authenticationMode="Certificate" 
<br />
        useNegotiation="true" /&gt;<br />
    &lt;/binding&gt;<br />
    &lt;binding 
<br />
      configurationName="SecureReliableMTOM" 
<br />
      orderedSession="true" 
<br />
      reliableSessionEnabled="true" 
<br />
      securityMode="WSSecurityOverHttp"<br />
      maxMessageSize="134217728"<br />
      flowTransactions="NotAllowed"<br />
      messageEncoding="Mtom"&gt;<br />
      &lt;wsSecurity 
<br />
        authenticationMode="Certificate" 
<br />
        useNegotiation="true" /&gt;<br />
    &lt;/binding&gt;<br />
   &lt;binding<br />
      configurationName="SecureReliableTransactedMTOM" 
<br />
      orderedSession="true" 
<br />
      reliableSessionEnabled="true" 
<br />
      securityMode="WSSecurityOverHttp"<br />
      maxMessageSize="134217728"<br />
      flowTransactions="Allowed"<br />
      messageEncoding="Mtom"&gt;<br />
      &lt;wsSecurity 
<br />
        authenticationMode="Certificate" 
<br />
        useNegotiation="true" /&gt;<br />
    &lt;/binding&gt;<br />
  &lt;/wsProfileBinding&gt;<br />
&lt;/bindings&gt;</font>
        </p>
        <p>
There are six different bindings setup:
</p>
        <ul>
          <li>
Secure 
</li>
          <li>
SecureReliable 
</li>
          <li>
SecureReliableTransacted 
</li>
          <li>
SecureMTOM 
</li>
          <li>
SecureReliableMTOM 
</li>
          <li>
SecureReliableTransactedMTOM</li>
        </ul>
        <p>
The <font face="Courier New">Secure</font> binding uses WS-Security/WS-SecureConversation
pair to secure all outgoing and incoming messages using encryption and digital signing.
We’re not going to drill down into it in this post. I’m going to write another one
where different certificate mechanisms will be discussed.
</p>
        <p>
The <font face="Courier New">SecureReliable</font> binding also uses WS-ReliableMessaging
with message ordering and guaranteed delivery turned on.
</p>
        <p>
The <font face="Courier New">SecureReliableTransacted</font> endpoint also uses WS-AtomicTransaction
to implement transaction semantics between the client and the service.<br />
There are another three bindings (<font face="Courier New">*MTOM</font>) with the
same transport semantics as well as MTOM encoding turned on. Since services can support
transfer of large binary files, we have also set the <font face="Courier New">maxMessageSize</font> attribute
in every binding to 128 MB.
</p>
        <p>
Endpoint configuration for this service is:
</p>
        <p>
          <font face="Courier New">&lt;services&gt;<br />
  &lt;service<br />
    serviceType="Indigo.Demos.TransferService"<br />
    behaviorConfiguration="DefaultBehavior"&gt;<br />
    &lt;endpoint 
<br />
      address="</font>
          <a href="http://localhost:666/TransferService.svc/">
            <font face="Courier New">http://localhost:666/TransferService.svc/</font>
          </a>
          <font face="Courier New">" 
<br />
      bindingNamespace=<br />
        "</font>
          <a href="http://webservices.gama-system.com/bindings">
            <font face="Courier New">http://webservices.gama-system.com/bindings</font>
          </a>
          <font face="Courier New">" 
<br />
      bindingName="Default" 
<br />
      bindingSectionName="wsProfileBinding" 
<br />
      bindingConfiguration="SecureReliableMTOM" 
<br />
      contractType="Indigo.Demos.ITransferContract"/&gt;<br />
    &lt;endpoint 
<br />
      address=<br />
        "</font>
          <a href="http://localhost:666/TransferService.svc/secure">
            <font face="Courier New">http://localhost:666/TransferService.svc/secure</font>
          </a>
          <font face="Courier New">"<br />
      bindingNamespace=<br />
        "</font>
          <a href="http://webservices.gama-system.com/bindings">
            <font face="Courier New">http://webservices.gama-system.com/bindings</font>
          </a>
          <font face="Courier New">" 
<br />
      bindingName="Secure" 
<br />
      bindingSectionName="wsProfileBinding" 
<br />
      bindingConfiguration="Secure" 
<br />
      contractType="Indigo.Demos.ITransferContract"/&gt;<br />
    &lt;endpoint 
<br />
      address=<br />
        "</font>
          <a href="http://localhost:666/TransferService.svc/">
            <font face="Courier New">http://localhost:666/TransferService.svc/</font>
          </a>
          <br />
          <font face="Courier New">        securereliable" 
<br />
      bindingNamespace=<br />
        "</font>
          <a href="http://webservices.gama-system.com/bindings">
            <font face="Courier New">http://webservices.gama-system.com/bindings</font>
          </a>
          <font face="Courier New">" 
<br />
      bindingName="SecureReliable" 
<br />
      bindingSectionName="wsProfileBinding" 
<br />
      bindingConfiguration="SecureReliable" 
<br />
      contractType="Indigo.Demos.ITransferContract"/&gt;<br />
    &lt;endpoint 
<br />
      address=<br />
        "</font>
          <a href="http://localhost:666/TransferService.svc/">
            <font face="Courier New">http://localhost:666/TransferService.svc/</font>
          </a>
          <br />
          <font face="Courier New">          securereliabletransacted" 
<br />
      bindingNamespace=<br />
        "</font>
          <a href="http://webservices.gama-system.com/bindings">
            <font face="Courier New">http://webservices.gama-system.com/bindings</font>
          </a>
          <font face="Courier New">" 
<br />
      bindingName="SecureReliableTransacted" 
<br />
      bindingSectionName="wsProfileBinding" 
<br />
      bindingConfiguration="SecureReliableTransacted" 
<br />
      contractType="Indigo.Demos.ITransferContract"/&gt;<br />
    &lt;endpoint 
<br />
      address=<br />
        "</font>
          <a href="http://localhost:666/TransferService.svc/">
            <font face="Courier New">http://localhost:666/TransferService.svc/</font>
          </a>
          <br />
          <font face="Courier New">          secureMTOM" 
<br />
      bindingNamespace=<br />
        "</font>
          <a href="http://webservices.gama-system.com/bindings">
            <font face="Courier New">http://webservices.gama-system.com/bindings</font>
          </a>
          <font face="Courier New">" 
<br />
      bindingName="SecureMTOM" 
<br />
      bindingSectionName="wsProfileBinding" 
<br />
      bindingConfiguration="SecureMTOM" 
<br />
      contractType="Indigo.Demos.ITransferContract"/&gt;<br />
    &lt;endpoint 
<br />
      address=<br />
      "</font>
          <a href="http://localhost:666/TransferService.svc/">
            <font face="Courier New">http://localhost:666/TransferService.svc/</font>
          </a>
          <br />
          <font face="Courier New">        securereliableMTOM" 
<br />
      bindingNamespace=<br />
       "</font>
          <a href="http://webservices.gama-system.com/bindings">
            <font face="Courier New">http://webservices.gama-system.com/bindings</font>
          </a>
          <font face="Courier New">" 
<br />
      bindingName="SecureReliableMTOM" 
<br />
      bindingSectionName="wsProfileBinding" 
<br />
      bindingConfiguration="SecureReliableMTOM" 
<br />
      contractType="Indigo.Demos.ITransferContract"/&gt;<br />
    &lt;endpoint 
<br />
      address=<br />
        "</font>
          <a href="http://localhost:666/TransferService.svc/">
            <font face="Courier New">http://localhost:666/TransferService.svc/</font>
          </a>
          <br />
          <font face="Courier New">          securereliabletransactedMTOM" 
<br />
      bindingNamespace=<br />
        "</font>
          <a href="http://webservices.gama-system.com/bindings">
            <font face="Courier New">http://webservices.gama-system.com/bindings</font>
          </a>
          <font face="Courier New">" 
<br />
      bindingName="SecureReliableTransactedMTOM" 
<br />
      bindingSectionName="wsProfileBinding" 
<br />
      bindingConfiguration="SecureReliableTransactedMTOM" 
<br />
      contractType="Indigo.Demos.ITransferContract"/&gt;<br />
  &lt;/service&gt;<br />
&lt;/services&gt;</font>
        </p>
        <p>
It can be seen that almost every endpoint (two are bound to the same binding) is bound
to a different binding.<br />
The service is therefore exposing its functionality using the following endpoints:
</p>
        <ul>
          <li>
            <a href="http://localhost:666/TransferService.svc/">
              <font face="Courier New">http://localhost:666/TransferService.svc/</font>
            </a>
          </li>
          <li>
            <a href="http://localhost:666/TransferService.svc/secure">
              <font face="Courier New">http://localhost:666/TransferService.svc/secure</font>
            </a>
          </li>
          <li>
            <a href="http://localhost:666/TransferService.svc/securereliable">
              <font face="Courier New">http://localhost:666/TransferService.svc/securereliable</font>
            </a>
          </li>
          <li>
            <a href="http://localhost:666/TransferService.svc/securereliabletransacted">
              <font face="Courier New">http://localhost:666/TransferService.svc/securereliabletransacted</font>
            </a>
          </li>
          <li>
            <a href="http://localhost:666/TransferService.svc/secureMTOM">
              <font face="Courier New">http://localhost:666/TransferService.svc/secureMTOM</font>
            </a>
          </li>
          <li>
            <a href="http://localhost:666/TransferService.svc/securereliableMTOM">
              <font face="Courier New">http://localhost:666/TransferService.svc/securereliableMTOM</font>
            </a>
          </li>
          <li>
            <a href="http://localhost:666/TransferService.svc/securereliabletransactedMTOM">
              <font face="Courier New">http://localhost:666/TransferService.svc/securereliabletransactedMTOM</font>
            </a>
          </li>
        </ul>
        <p>
The first endpoint in this example is considered a default one and is mapped to the
same binding as the <font face="Courier New">*securereliableMTOM</font> endpoint.
</p>
        <p>
The problem with this is that current WCF’s WSDLExporter maps different endpoints
into WSDL ports, but WSDL ports have a requirement to be uniquely named. The default
port name construction is done by using the binding type name (i.e. <font face="Courier New">wsProfileBinding</font>, <font face="Courier New">basicProfileBinding</font>),
which is concatenated with the contract name.
</p>
        <p>
Therefore, when one has defined multiple bindings from the same binding type a name
collision occurs (six WSDL ports with the same QName (namespace and local name)).
This can be avoided using a <font face="Courier New">bindingNamespace</font> attribute
as well as <font face="Courier New">bindingName</font> attribute. In this example
we set the <font face="Courier New">bindingNamespace</font> to <a href="http://webservices.gama-system.com/bindings">http://webservices.gama-system.com/bindings</a> for
all bindings and made the name unique by using the bindingName attribute.
</p>
        <p>
There are currently two weird design decisions in multiple binding support of WCF.
First <font face="Courier New">bindingNamespace</font> and <font face="Courier New">bindingName</font> attributes
are bound to endpoints and not bindings. It would probably be more appropriate to
put binding’s namespace and name into the <font face="Courier New">&lt;binding&gt;</font> element.
Second, binding name is not propagated into WSDL properly when the same binding is
used in two or more endpoints (in this example <a href="http://localhost:666/TransferService.svc/">http://localhost:666/TransferService.svc/</a> and <a href="http://localhost:666/TransferService.svc/securereliableMTOM">http://localhost:666/TransferService.svc/securereliableMTOM</a> endpoints
are bound to <font face="Courier New">Default</font> binding. If you look closely
into the generated WSDL, you will see that the matching WSDL ports are not named after <font face="Courier New">bindingName</font> attribute.
</p>
        <p>
These are non-breaking issues and will probably be addressed for beta 2 of WCF.
</p>
        <p>
In the next Indigo series post, we’ll look closely into the security characteristics
of certificate based authentication.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=5371ff94-3412-4e41-87f7-3740c8e04ac4" />
      </body>
      <title>Indigo - Multiple endpoints</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,5371ff94-3412-4e41-87f7-3740c8e04ac4.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,5371ff94-3412-4e41-87f7-3740c8e04ac4.aspx</link>
      <pubDate>Fri, 12 Aug 2005 11:02:47 GMT</pubDate>
      <description>&lt;p&gt;
There is a common functionality request in modern distributed applications that clients
and services (client also being other services) could communicate using different
communication protocols and/or different transport semantics inside a single protocol.
&lt;/p&gt;
&lt;p&gt;
For this sample we're going to limit ourselves to HTTP messaging, but this does not
limit the scope of the article. Other transport protocols can be added without obstructing
other transport mechanisms.
&lt;/p&gt;
&lt;p&gt;
To allow this scenario Indigo (Windows Communication Foundation, WCF) allows multiple
endpoints per service to be setup. Service side bindings can, for example, be the
following:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;bindings&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;wsProfileBinding&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;binding 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; configurationName="Secure" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orderedSession="false" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reliableSessionEnabled="false" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; securityMode="WSSecurityOverHttp" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxMessageSize="134217728"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flowTransactions="NotAllowed"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; messageEncoding="Text"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsSecurity 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticationMode="Certificate" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNegotiation="true" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/binding&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;binding 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; configurationName="SecureReliable" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orderedSession="true" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reliableSessionEnabled="true" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; securityMode="WSSecurityOverHttp"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxMessageSize="134217728"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flowTransactions="NotAllowed"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; messageEncoding="Text"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsSecurity&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticationMode="Certificate" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNegotiation="true" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/binding&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;binding&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; configurationName="SecureReliableTransacted" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orderedSession="true" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reliableSessionEnabled="true" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; securityMode="WSSecurityOverHttp"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxMessageSize="134217728"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flowTransactions="Allowed"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; messageEncoding="Text"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsSecurity 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticationMode="Certificate" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNegotiation="true" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/binding&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;binding 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; configurationName="SecureMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orderedSession="false" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reliableSessionEnabled="false" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; securityMode="WSSecurityOverHttp" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxMessageSize="134217728"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flowTransactions="NotAllowed"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; messageEncoding="Mtom"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsSecurity 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticationMode="Certificate" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNegotiation="true" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/binding&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;binding 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; configurationName="SecureReliableMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orderedSession="true" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reliableSessionEnabled="true" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; securityMode="WSSecurityOverHttp"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxMessageSize="134217728"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flowTransactions="NotAllowed"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; messageEncoding="Mtom"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsSecurity 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticationMode="Certificate" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNegotiation="true" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/binding&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;lt;binding&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; configurationName="SecureReliableTransactedMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orderedSession="true" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reliableSessionEnabled="true" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; securityMode="WSSecurityOverHttp"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxMessageSize="134217728"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flowTransactions="Allowed"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; messageEncoding="Mtom"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;wsSecurity 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; authenticationMode="Certificate" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNegotiation="true" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/binding&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/wsProfileBinding&amp;gt;&lt;br&gt;
&amp;lt;/bindings&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
There are six different bindings setup:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Secure 
&lt;li&gt;
SecureReliable 
&lt;li&gt;
SecureReliableTransacted 
&lt;li&gt;
SecureMTOM 
&lt;li&gt;
SecureReliableMTOM 
&lt;li&gt;
SecureReliableTransactedMTOM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The &lt;font face="Courier New"&gt;Secure&lt;/font&gt; binding uses WS-Security/WS-SecureConversation
pair to secure all outgoing and incoming messages using encryption and digital signing.
We’re not going to drill down into it in this post. I’m going to write another one
where different certificate mechanisms will be discussed.
&lt;/p&gt;
&lt;p&gt;
The &lt;font face="Courier New"&gt;SecureReliable&lt;/font&gt; binding also uses WS-ReliableMessaging
with message ordering and guaranteed delivery turned on.
&lt;/p&gt;
&lt;p&gt;
The &lt;font face="Courier New"&gt;SecureReliableTransacted&lt;/font&gt; endpoint also uses WS-AtomicTransaction
to implement transaction semantics between the client and the service.&lt;br&gt;
There are another three bindings (&lt;font face="Courier New"&gt;*MTOM&lt;/font&gt;) with the
same transport semantics as well as MTOM encoding turned on. Since services can support
transfer of large binary files, we have also set the &lt;font face="Courier New"&gt;maxMessageSize&lt;/font&gt; attribute
in every binding to 128 MB.
&lt;/p&gt;
&lt;p&gt;
Endpoint configuration for this service is:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;services&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;service&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; serviceType="Indigo.Demos.TransferService"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; behaviorConfiguration="DefaultBehavior"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; address="&lt;/font&gt;&lt;a href="http://localhost:666/TransferService.svc/"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingNamespace=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://webservices.gama-system.com/bindings"&gt;&lt;font face="Courier New"&gt;http://webservices.gama-system.com/bindings&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingName="Default" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingSectionName="wsProfileBinding" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration="SecureReliableMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contractType="Indigo.Demos.ITransferContract"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; address=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://localhost:666/TransferService.svc/secure"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/secure&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingNamespace=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://webservices.gama-system.com/bindings"&gt;&lt;font face="Courier New"&gt;http://webservices.gama-system.com/bindings&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingName="Secure" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingSectionName="wsProfileBinding" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration="Secure" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contractType="Indigo.Demos.ITransferContract"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; address=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://localhost:666/TransferService.svc/"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/&lt;/font&gt;&lt;/a&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; securereliable" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingNamespace=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://webservices.gama-system.com/bindings"&gt;&lt;font face="Courier New"&gt;http://webservices.gama-system.com/bindings&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingName="SecureReliable" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingSectionName="wsProfileBinding" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration="SecureReliable" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contractType="Indigo.Demos.ITransferContract"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; address=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://localhost:666/TransferService.svc/"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/&lt;/font&gt;&lt;/a&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; securereliabletransacted" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingNamespace=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://webservices.gama-system.com/bindings"&gt;&lt;font face="Courier New"&gt;http://webservices.gama-system.com/bindings&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingName="SecureReliableTransacted" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingSectionName="wsProfileBinding" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration="SecureReliableTransacted" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contractType="Indigo.Demos.ITransferContract"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; address=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://localhost:666/TransferService.svc/"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/&lt;/font&gt;&lt;/a&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; secureMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingNamespace=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://webservices.gama-system.com/bindings"&gt;&lt;font face="Courier New"&gt;http://webservices.gama-system.com/bindings&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingName="SecureMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingSectionName="wsProfileBinding" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration="SecureMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contractType="Indigo.Demos.ITransferContract"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; address=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://localhost:666/TransferService.svc/"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/&lt;/font&gt;&lt;/a&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; securereliableMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingNamespace=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://webservices.gama-system.com/bindings"&gt;&lt;font face="Courier New"&gt;http://webservices.gama-system.com/bindings&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingName="SecureReliableMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingSectionName="wsProfileBinding" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration="SecureReliableMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contractType="Indigo.Demos.ITransferContract"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; address=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://localhost:666/TransferService.svc/"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/&lt;/font&gt;&lt;/a&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; securereliabletransactedMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingNamespace=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/font&gt;&lt;a href="http://webservices.gama-system.com/bindings"&gt;&lt;font face="Courier New"&gt;http://webservices.gama-system.com/bindings&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingName="SecureReliableTransactedMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingSectionName="wsProfileBinding" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration="SecureReliableTransactedMTOM" 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contractType="Indigo.Demos.ITransferContract"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/service&amp;gt;&lt;br&gt;
&amp;lt;/services&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
It can be seen that almost every endpoint (two are bound to the same binding) is bound
to a different binding.&lt;br&gt;
The service is therefore exposing its functionality using the following endpoints:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://localhost:666/TransferService.svc/"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/&lt;/font&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://localhost:666/TransferService.svc/secure"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/secure&lt;/font&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://localhost:666/TransferService.svc/securereliable"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/securereliable&lt;/font&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://localhost:666/TransferService.svc/securereliabletransacted"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/securereliabletransacted&lt;/font&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://localhost:666/TransferService.svc/secureMTOM"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/secureMTOM&lt;/font&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://localhost:666/TransferService.svc/securereliableMTOM"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/securereliableMTOM&lt;/font&gt;&lt;/a&gt; 
&lt;li&gt;
&lt;a href="http://localhost:666/TransferService.svc/securereliabletransactedMTOM"&gt;&lt;font face="Courier New"&gt;http://localhost:666/TransferService.svc/securereliabletransactedMTOM&lt;/font&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The first endpoint in this example is considered a default one and is mapped to the
same binding as the &lt;font face="Courier New"&gt;*securereliableMTOM&lt;/font&gt; endpoint.
&lt;/p&gt;
&lt;p&gt;
The problem with this is that current WCF’s WSDLExporter maps different endpoints
into WSDL ports, but WSDL ports have a requirement to be uniquely named. The default
port name construction is done by using the binding type name (i.e. &lt;font face="Courier New"&gt;wsProfileBinding&lt;/font&gt;, &lt;font face="Courier New"&gt;basicProfileBinding&lt;/font&gt;),
which is concatenated with the contract name.
&lt;/p&gt;
&lt;p&gt;
Therefore, when one has defined multiple bindings from the same binding type a name
collision occurs (six WSDL ports with the same QName (namespace and local name)).
This can be avoided using a &lt;font face="Courier New"&gt;bindingNamespace&lt;/font&gt; attribute
as well as &lt;font face="Courier New"&gt;bindingName&lt;/font&gt; attribute. In this example
we set the &lt;font face="Courier New"&gt;bindingNamespace&lt;/font&gt; to &lt;a href="http://webservices.gama-system.com/bindings"&gt;http://webservices.gama-system.com/bindings&lt;/a&gt; for
all bindings and made the name unique by using the bindingName attribute.
&lt;/p&gt;
&lt;p&gt;
There are currently two weird design decisions in multiple binding support of WCF.
First &lt;font face="Courier New"&gt;bindingNamespace&lt;/font&gt; and &lt;font face="Courier New"&gt;bindingName&lt;/font&gt; attributes
are bound to endpoints and not bindings. It would probably be more appropriate to
put binding’s namespace and name into the &lt;font face="Courier New"&gt;&amp;lt;binding&amp;gt;&lt;/font&gt; element.
Second, binding name is not propagated into WSDL properly when the same binding is
used in two or more endpoints (in this example &lt;a href="http://localhost:666/TransferService.svc/"&gt;http://localhost:666/TransferService.svc/&lt;/a&gt; and &lt;a href="http://localhost:666/TransferService.svc/securereliableMTOM"&gt;http://localhost:666/TransferService.svc/securereliableMTOM&lt;/a&gt; endpoints
are bound to &lt;font face="Courier New"&gt;Default&lt;/font&gt; binding. If you look closely
into the generated WSDL, you will see that the matching WSDL ports are not named after &lt;font face="Courier New"&gt;bindingName&lt;/font&gt; attribute.
&lt;/p&gt;
&lt;p&gt;
These are non-breaking issues and will probably be addressed for beta 2 of WCF.
&lt;/p&gt;
&lt;p&gt;
In the next Indigo series post, we’ll look closely into the security characteristics
of certificate based authentication.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=5371ff94-3412-4e41-87f7-3740c8e04ac4" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,5371ff94-3412-4e41-87f7-3740c8e04ac4.aspx</comments>
      <category>.NET 3.0 - WCF</category>
      <category>Transactions</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=4faf505c-9a23-4b5f-afc3-0d495852b272</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,4faf505c-9a23-4b5f-afc3-0d495852b272.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,4faf505c-9a23-4b5f-afc3-0d495852b272.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4faf505c-9a23-4b5f-afc3-0d495852b272</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Microsoft “Indigo” is now available for general public.
</p>
        <p>
If you are an MSDN Subscriber, you can download the bits from <a href="http://msdn.microsoft.com/subscriptions">here</a>.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=4faf505c-9a23-4b5f-afc3-0d495852b272" />
      </body>
      <title>Indigo CTP</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,4faf505c-9a23-4b5f-afc3-0d495852b272.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,4faf505c-9a23-4b5f-afc3-0d495852b272.aspx</link>
      <pubDate>Sun, 20 Mar 2005 17:34:26 GMT</pubDate>
      <description>&lt;p&gt;
Microsoft &amp;#8220;Indigo&amp;#8221; is now available for general public.
&lt;/p&gt;
&lt;p&gt;
If you are an MSDN Subscriber, you can download the bits from &lt;a href="http://msdn.microsoft.com/subscriptions"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=4faf505c-9a23-4b5f-afc3-0d495852b272" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,4faf505c-9a23-4b5f-afc3-0d495852b272.aspx</comments>
      <category>Web Services</category>
      <category>Work</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=0321326e-47c6-4e47-beab-50a257dbf471</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,0321326e-47c6-4e47-beab-50a257dbf471.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,0321326e-47c6-4e47-beab-50a257dbf471.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0321326e-47c6-4e47-beab-50a257dbf471</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you get this error [1], while working on a <a href="http://msdn.microsoft.com/webservices/community/workshops/default.aspx?pull=/library/en-us/dnglobspec/html/ws-secureconversation.asp">WS-SecureConversation</a> based
application, consider the following:
</p>
        <ul>
          <li>
Look at the timeout period for you SCTs, issued by the server-side service.</li>
          <li>
If this is all ok, then you're probably in my situation. Check if you enabled web
garden support in your IIS's application pool. If so, go back to Performance tab in
application pool's properties and enter 1 (one) as a 'Maximum number of worker processes'.</li>
        </ul>
        <p>
Things can get really rough in a state WSE2 is in if you create a web garden and use
WS-SecureConversation at the same time.
</p>
        <p>
A few weeks ago I was designing an architecture for a complex B2B secure communication
channel and parts of it wanted to use some form of a web garden. Since I forgot
to disable it, there were trouble.
</p>
        <p>
The strangest thing I noticed when investigating this was that everything worked
the first time after IIS restart happened - sure - a session is pinned to the first
worker process, the second one just gets created.
</p>
        <p>
Of course, there are workarounds regarding this, but they include some non-trivial
WSE2 subclassing.
</p>
        <p>
          <em>
            <font face="Courier New">[1] Additional information: Microsoft.Web.Services2.Security.SecurityFault: <strong>The
specified source for the derivation is unknown</strong> ---&gt; System.Exception:
WSE512: <strong>This derived key token's parent cannot be found.</strong> The reference
to the parent token follows: &lt;wsse:SecurityTokenReference xmlns:wsse="</font>
          </em>
          <em>
            <font face="Courier New">http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"&gt;&lt;wsse:Reference</font>
          </em>
          <em>
            <font face="Courier New"> URI="uuid:227d47ac-1b2b-45a5-92f0-d7d630aeda86"
ValueType="</font>
          </em>
          <em>
            <font face="Courier New">http://schemas.xmlsoap.org/ws/2004/04/security/sc/sct</font>
          </em>
          <em>
            <font face="Courier New">"
/&gt;&lt;/wsse:SecurityTokenReference&gt;.</font>
          </em>
        </p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=0321326e-47c6-4e47-beab-50a257dbf471" />
      </body>
      <title>SCT in WSE2 and WS-SecureConversation</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,0321326e-47c6-4e47-beab-50a257dbf471.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,0321326e-47c6-4e47-beab-50a257dbf471.aspx</link>
      <pubDate>Tue, 26 Oct 2004 11:56:29 GMT</pubDate>
      <description>&lt;p&gt;
If you get this error [1], while working on a &lt;a href="http://msdn.microsoft.com/webservices/community/workshops/default.aspx?pull=/library/en-us/dnglobspec/html/ws-secureconversation.asp"&gt;WS-SecureConversation&lt;/a&gt; based
application, consider the following:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Look at the timeout period for you SCTs, issued by the server-side service.&lt;/li&gt;
&lt;li&gt;
If this is all ok, then you're probably in my situation. Check if you enabled web
garden support in your IIS's application pool. If so, go back to Performance tab in
application pool's properties and enter 1 (one) as a 'Maximum number of worker processes'.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Things can get really rough in a state WSE2 is in if you create a web garden and use
WS-SecureConversation at the same time.
&lt;/p&gt;
&lt;p&gt;
A few weeks ago I was designing an architecture for a complex B2B secure communication
channel and&amp;nbsp;parts of it wanted to use some form of a web garden. Since I forgot
to disable it, there were trouble.
&lt;/p&gt;
&lt;p&gt;
The strangest thing I noticed when&amp;nbsp;investigating this was that everything worked
the first time after IIS restart happened - sure - a session is pinned to the first
worker process, the second one just gets created.
&lt;/p&gt;
&lt;p&gt;
Of course, there are workarounds regarding this, but they include some non-trivial
WSE2 subclassing.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font face="Courier New"&gt;[1] Additional information: Microsoft.Web.Services2.Security.SecurityFault: &lt;strong&gt;The
specified source for the derivation is unknown&lt;/strong&gt; ---&amp;gt; System.Exception:
WSE512: &lt;strong&gt;This derived key token's parent cannot be found.&lt;/strong&gt; The reference
to the parent token follows: &amp;lt;wsse:SecurityTokenReference xmlns:wsse="&lt;/font&gt;&lt;/em&gt;&lt;em&gt;&lt;font face="Courier New"&gt;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"&amp;gt;&amp;lt;wsse:Reference&lt;/font&gt;&lt;/em&gt;&lt;em&gt;&lt;font face="Courier New"&gt; URI="uuid:227d47ac-1b2b-45a5-92f0-d7d630aeda86"
ValueType="&lt;/font&gt;&lt;/em&gt;&lt;em&gt;&lt;font face="Courier New"&gt;http://schemas.xmlsoap.org/ws/2004/04/security/sc/sct&lt;/font&gt;&lt;/em&gt;&lt;em&gt;&lt;font face="Courier New"&gt;"
/&amp;gt;&amp;lt;/wsse:SecurityTokenReference&amp;gt;.&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=0321326e-47c6-4e47-beab-50a257dbf471" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,0321326e-47c6-4e47-beab-50a257dbf471.aspx</comments>
      <category>Web Services</category>
      <category>Work</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=1d342b8e-0762-447c-81b7-ef601179acf1</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,1d342b8e-0762-447c-81b7-ef601179acf1.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,1d342b8e-0762-447c-81b7-ef601179acf1.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1d342b8e-0762-447c-81b7-ef601179acf1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Lots of new stuff happening lately:
</p>
        <ul>
          <li>
New version of <a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp">WS-Eventing</a></li>
          <li>
New version of <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/ws-policy.asp">WS-Policy</a></li>
          <li>
            <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/soap-over-udp.asp">SOAP-over-UDP</a> published</li>
          <li>
            <a href="http://www.w3.org/TR/2004/CR-soap12-mtom-20040826/">MTOM</a> is in CR phase</li>
        </ul>
        <p>
Lots of (un)pleasant reading coming up.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=1d342b8e-0762-447c-81b7-ef601179acf1" />
      </body>
      <title>New WS-* and Related Specs</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,1d342b8e-0762-447c-81b7-ef601179acf1.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,1d342b8e-0762-447c-81b7-ef601179acf1.aspx</link>
      <pubDate>Thu, 16 Sep 2004 09:38:34 GMT</pubDate>
      <description>&lt;p&gt;
Lots of new stuff happening lately:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
New version of &lt;a href="http://msdn.microsoft.com/webservices/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp"&gt;WS-Eventing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
New version of &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/ws-policy.asp"&gt;WS-Policy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/soap-over-udp.asp"&gt;SOAP-over-UDP&lt;/a&gt; published&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.w3.org/TR/2004/CR-soap12-mtom-20040826/"&gt;MTOM&lt;/a&gt; is in CR phase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Lots of (un)pleasant reading coming up.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=1d342b8e-0762-447c-81b7-ef601179acf1" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,1d342b8e-0762-447c-81b7-ef601179acf1.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=3a8ea029-3c12-4f38-b089-44516b8b1376</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,3a8ea029-3c12-4f38-b089-44516b8b1376.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,3a8ea029-3c12-4f38-b089-44516b8b1376.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3a8ea029-3c12-4f38-b089-44516b8b1376</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>
            <em>Update: Memory persistance included</em>
          </strong>
        </p>
        <p>
In my <a href="/blog/PermaLink.aspx?guid=ececbe12-14c8-4b4e-9782-ea5f05512139">previous
posts</a> I said I will write a SQL based persistence provider for <a href="http://www.gotdotnet.com/community/workspaces/workspace.aspx?ID=B700AF79-5B27-4D71-BFBD-8DF74FA68ABE">Plumbwork.Orange</a><a href="http://msdn.microsoft.com/webservices/understanding/specs/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp">WS-Eventing</a> implementation
and help <a href="http://www.bristowe.com/blog/PermaLink.aspx?guid=700bf884-dd72-4214-9fb5-e1daf9d6e4b2">John
Bristowe</a> a bit.
</p>
        <p>
It's done now, as is memory based persistance option, but since <a href="http://www.gotdotnet.com">http://www.gotdotnet.com</a> still
has problems with workspaces, I cannot upload it.
</p>
        <p>
Classes can be downloaded here:
</p>
        <ul>
          <li>
            <a href="http://downloads.request-response.com/SqlSubscriptionManager.cs.zip">SqlSubscriptionManager.cs.zip</a>
          </li>
          <li>
            <a href="http://downloads.request-response.com/MemorySubscriptionManager.cs.zip">MemorySubscriptionManager.cs.zip</a>.</li>
        </ul>
        <p>
All you need to do is replace one line in <font face="Courier New">SubscriptionManagerFactory.cs</font>:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <font face="Courier New">return new XmlSubscriptionManager() as ISubscriptionManager;</font>
          </p>
        </blockquote>
        <p>
With:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <font face="Courier New">return new SqlSubscriptionManager() as ISubscriptionManager;</font>
          </p>
          <p>
or
</p>
          <p>
            <font face="Courier New">return new MemorySubscriptionManager() as ISubscriptionManager;</font>
          </p>
        </blockquote>
        <p>
Since some members of the workspace are already working on configuration application
block integration, all config data should go in there someday.
</p>
        <p>
My implementation now uses SQL Server as a subscription storage for durable WS-Eventing
subscriptions. System.Collections.Hashtable is used in memory based persistance model.
Complete support includes:
</p>
        <ul>
          <li>
Creating a subscription 
</li>
          <li>
Removing a subscription 
</li>
          <li>
Renewing a subscription 
</li>
          <li>
Expiring a subscription</li>
        </ul>
        <p>
When GDN Workspaces come back online, I will post this to <a href="http://www.gotdotnet.com/community/workspaces/workspace.aspx?ID=B700AF79-5B27-4D71-BFBD-8DF74FA68ABE">Plumbwork.Orange</a>.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3a8ea029-3c12-4f38-b089-44516b8b1376" />
      </body>
      <title>WS-Eventing: SQL Persistance Provider</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,3a8ea029-3c12-4f38-b089-44516b8b1376.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,3a8ea029-3c12-4f38-b089-44516b8b1376.aspx</link>
      <pubDate>Fri, 27 Aug 2004 09:48:47 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;&lt;em&gt;Update: Memory persistance included&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
In my&amp;nbsp;&lt;a href="/blog/PermaLink.aspx?guid=ececbe12-14c8-4b4e-9782-ea5f05512139"&gt;previous
posts&lt;/a&gt; I said I will write a SQL based persistence provider for &lt;a href="http://www.gotdotnet.com/community/workspaces/workspace.aspx?ID=B700AF79-5B27-4D71-BFBD-8DF74FA68ABE"&gt;Plumbwork.Orange&lt;/a&gt; &lt;a href="http://msdn.microsoft.com/webservices/understanding/specs/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp"&gt;WS-Eventing&lt;/a&gt; implementation
and help &lt;a href="http://www.bristowe.com/blog/PermaLink.aspx?guid=700bf884-dd72-4214-9fb5-e1daf9d6e4b2"&gt;John
Bristowe&lt;/a&gt; a bit.
&lt;/p&gt;
&lt;p&gt;
It's done now, as is memory based persistance option, but since &lt;a href="http://www.gotdotnet.com"&gt;http://www.gotdotnet.com&lt;/a&gt; still
has problems with workspaces, I cannot upload it.
&lt;/p&gt;
&lt;p&gt;
Classes can be downloaded&amp;nbsp;here:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://downloads.request-response.com/SqlSubscriptionManager.cs.zip"&gt;SqlSubscriptionManager.cs.zip&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://downloads.request-response.com/MemorySubscriptionManager.cs.zip"&gt;MemorySubscriptionManager.cs.zip&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
All you need to do is replace one line in &lt;font face="Courier New"&gt;SubscriptionManagerFactory.cs&lt;/font&gt;:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;font face="Courier New"&gt;return new XmlSubscriptionManager() as ISubscriptionManager;&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
With:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;font face="Courier New"&gt;return new SqlSubscriptionManager() as ISubscriptionManager;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
or
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;return new MemorySubscriptionManager() as ISubscriptionManager;&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Since some members of the workspace are already working on configuration application
block integration, all config data should go in there someday.
&lt;/p&gt;
&lt;p&gt;
My implementation now uses SQL Server as a subscription storage for durable WS-Eventing
subscriptions. System.Collections.Hashtable is used in memory based persistance model.
Complete support includes:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Creating a subscription 
&lt;li&gt;
Removing a subscription 
&lt;li&gt;
Renewing a subscription 
&lt;li&gt;
Expiring a subscription&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
When GDN Workspaces come back online, I will post this to &lt;a href="http://www.gotdotnet.com/community/workspaces/workspace.aspx?ID=B700AF79-5B27-4D71-BFBD-8DF74FA68ABE"&gt;Plumbwork.Orange&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3a8ea029-3c12-4f38-b089-44516b8b1376" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,3a8ea029-3c12-4f38-b089-44516b8b1376.aspx</comments>
      <category>Web Services</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=ececbe12-14c8-4b4e-9782-ea5f05512139</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,ececbe12-14c8-4b4e-9782-ea5f05512139.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,ececbe12-14c8-4b4e-9782-ea5f05512139.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ececbe12-14c8-4b4e-9782-ea5f05512139</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
John <a href="http://www.bristowe.com/blog/PermaLink.aspx?guid=700bf884-dd72-4214-9fb5-e1daf9d6e4b2">writes</a>:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p xmlns="http://www.w3.org/1999/xhtml">
I'm thankful Matevz didn't blast me for my über-crappy persistance model (read
"save to C:\subscriptions.xml"): 
</p>
          <blockquote dir="ltr" style="MARGIN-RIGHT: 0px" xmlns="http://www.w3.org/1999/xhtml">
            <p>
              <em>Give LOCAL SERVICE account permissions to write/modify the c:\ directory. By default
Plumbwork.Orange.Eventing.dll will write subscriptions file (called subscriptions.xml)
there.</em>
            </p>
          </blockquote>
          <p dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
This line (above) - due to my extreme laziness while coding - makes me shudder. This
is something I really, really, really need to clean up.<br /><br />
[Via <a href="http://www.bristowe.com">http://www.bristowe.com</a>]
</p>
        </blockquote>
        <p dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
I agree that next version should include a config option to use Plumbwork.Orange.Eventing.MemorySubscriptionManager
instead of Plumbwork.Orange.Eventing.XmlSubscriptionManager.
</p>
        <p dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
Even better would be to add SqlSubscriptionManager, which I can do, when I get into
the <a href="http://www.gotdotnet.com/community/workspaces/workspace.aspx?ID=B700AF79-5B27-4D71-BFBD-8DF74FA68ABE">GDN
workspace</a>.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=ececbe12-14c8-4b4e-9782-ea5f05512139" />
      </body>
      <title>WS-Eventing</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,ececbe12-14c8-4b4e-9782-ea5f05512139.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,ececbe12-14c8-4b4e-9782-ea5f05512139.aspx</link>
      <pubDate>Tue, 24 Aug 2004 08:11:21 GMT</pubDate>
      <description>&lt;p&gt;
John &lt;a href="http://www.bristowe.com/blog/PermaLink.aspx?guid=700bf884-dd72-4214-9fb5-e1daf9d6e4b2"&gt;writes&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;
I'm thankful Matevz didn't blast me for my &amp;#252;ber-crappy persistance model (read
"save to C:\subscriptions.xml"): 
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px" xmlns="http://www.w3.org/1999/xhtml"&gt; 
&lt;p&gt;
&lt;em&gt;Give LOCAL SERVICE account permissions to write/modify the c:\ directory. By default
Plumbwork.Orange.Eventing.dll will write subscriptions file (called subscriptions.xml)
there.&lt;/em&gt; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr xmlns="http://www.w3.org/1999/xhtml"&gt;
This line (above) - due to my extreme laziness while coding - makes me shudder. This
is something I really, really, really need to clean up.&lt;br&gt;
&lt;br&gt;
[Via &lt;a href="http://www.bristowe.com"&gt;http://www.bristowe.com&lt;/a&gt;]
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr xmlns="http://www.w3.org/1999/xhtml"&gt;
I agree that next version should include a config option to use Plumbwork.Orange.Eventing.MemorySubscriptionManager
instead of Plumbwork.Orange.Eventing.XmlSubscriptionManager.
&lt;/p&gt;
&lt;p dir=ltr xmlns="http://www.w3.org/1999/xhtml"&gt;
Even better would be to add SqlSubscriptionManager, which I can do, when I get into
the &lt;a href="http://www.gotdotnet.com/community/workspaces/workspace.aspx?ID=B700AF79-5B27-4D71-BFBD-8DF74FA68ABE"&gt;GDN
workspace&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=ececbe12-14c8-4b4e-9782-ea5f05512139" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,ececbe12-14c8-4b4e-9782-ea5f05512139.aspx</comments>
      <category>Web Services</category>
      <category>Work</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=15419938-4d67-435c-80df-838034a63136</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,15419938-4d67-435c-80df-838034a63136.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,15419938-4d67-435c-80df-838034a63136.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=15419938-4d67-435c-80df-838034a63136</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>WS-Eventing Application</strong>
        </p>
        <p>
It took me half of today to implement a WS-Eventing based service, together with service
control application and demonstration client.
</p>
        <p>
I took <a href="http://www.gotdotnet.com/community/workspaces/workspace.aspx?ID=B700AF79-5B27-4D71-BFBD-8DF74FA68ABE">Plumbwork.Orange</a> implementation
of WS-Eventing stack. It includes WSE 2.0 based implementation of <a href="http://msdn.microsoft.com/webservices/understanding/specs/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp">WS-Eventing</a> specification,
written by <a href="http://www.bristowe.com/">John Bristowe</a>. Latest post
about updates can be found <a href="http://www.bristowe.com/blog/PermaLink.aspx?guid=72e358ee-45da-46e5-852b-fabfc6cfc504">here</a>.
</p>
        <p>
          <strong>How it works</strong>
        </p>
        <p>
Windows service queries message queue (MSMQ) after the period elapses. If it finds
any messages, they are dispatched to all registered clients.
</p>
        <p>
There is a service control application, which can enroll new messages into the queue.
</p>
        <p>
There's also a simple client which you can use to register and receive notifications.
</p>
        <p>
          <strong>Availability</strong>
        </p>
        <p>
You can download the bits from here:
</p>
        <ul>
          <li>
Installer package for <em>WS-Eventing windows service</em>, which does registrations
and sends notifications back. Grab it <a href="http://downloads.request-response.com/WSEventingServiceSetup.msi">here</a>.
Source is available <a href="http://downloads.request-response.com/WSEventingService.zip">here</a>.</li>
          <li>
Source code, which you can use to compile the <em>service control application</em>.
Grab it <a href="http://downloads.request-response.com/WSEventingServiceApp.zip">here</a>.</li>
          <li>
Source code, which you can use to compile the <em>WS-Eventing client</em>. Grab it <a href="http://downloads.request-response.com/WSEventingClient.zip">here</a>.</li>
        </ul>
        <p>
Do the following:
</p>
        <ul>
          <li>
Install WS-Eventing service.</li>
          <li>
Update WSEventingService.exe.config with desired endpoint address, MSMQ query period
and queue name</li>
          <li>
Give LOCAL SERVICE account permissions to write/modify the c:\ directory. By default
Plumbwork.Orange.Eventing.dll will write subscriptions file (called subscriptions.xml)
there.</li>
          <li>
Start the service using SCM (Service Control Manager). Service will automatically
create the specified queue. <em>Note: You should have Message Queuing installed.</em></li>
          <li>
Start the service control application.</li>
          <li>
Start the client. It will register automatically.</li>
          <li>
Send notification using the service control application and watch it emerge on the
client side.</li>
        </ul>
        <p>
If you get into trouble, please email me. Have fun!
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=15419938-4d67-435c-80df-838034a63136" />
      </body>
      <title>WS-Eventing Implementation</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,15419938-4d67-435c-80df-838034a63136.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,15419938-4d67-435c-80df-838034a63136.aspx</link>
      <pubDate>Sun, 22 Aug 2004 21:49:46 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;WS-Eventing Application&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
It took me half of today to implement a WS-Eventing based service, together with service
control application and demonstration client.
&lt;/p&gt;
&lt;p&gt;
I took &lt;a href="http://www.gotdotnet.com/community/workspaces/workspace.aspx?ID=B700AF79-5B27-4D71-BFBD-8DF74FA68ABE"&gt;Plumbwork.Orange&lt;/a&gt; implementation
of WS-Eventing stack. It&amp;nbsp;includes&amp;nbsp;WSE 2.0 based implementation of &lt;a href="http://msdn.microsoft.com/webservices/understanding/specs/default.aspx?pull=/library/en-us/dnglobspec/html/ws-eventing.asp"&gt;WS-Eventing&lt;/a&gt; specification,
written by &lt;a href="http://www.bristowe.com/"&gt;John Bristowe&lt;/a&gt;.&amp;nbsp;Latest post
about updates can be found &lt;a href="http://www.bristowe.com/blog/PermaLink.aspx?guid=72e358ee-45da-46e5-852b-fabfc6cfc504"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;How it works&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Windows service queries message queue (MSMQ) after the period elapses. If it finds
any messages, they are dispatched to all registered clients.
&lt;/p&gt;
&lt;p&gt;
There is a service control application, which can enroll new messages into the queue.
&lt;/p&gt;
&lt;p&gt;
There's also a simple client which you can use to register and receive notifications.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Availability&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
You can download the bits from here:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Installer package for &lt;em&gt;WS-Eventing windows service&lt;/em&gt;, which does registrations
and sends notifications back. Grab it &lt;a href="http://downloads.request-response.com/WSEventingServiceSetup.msi"&gt;here&lt;/a&gt;.
Source is available &lt;a href="http://downloads.request-response.com/WSEventingService.zip"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
Source code, which you can use to compile the &lt;em&gt;service control application&lt;/em&gt;.
Grab it &lt;a href="http://downloads.request-response.com/WSEventingServiceApp.zip"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
Source code, which you can use to compile the &lt;em&gt;WS-Eventing client&lt;/em&gt;. Grab it &lt;a href="http://downloads.request-response.com/WSEventingClient.zip"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Do the following:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Install WS-Eventing service.&lt;/li&gt;
&lt;li&gt;
Update WSEventingService.exe.config with desired endpoint address, MSMQ query period
and queue name&lt;/li&gt;
&lt;li&gt;
Give LOCAL SERVICE account permissions to write/modify the c:\ directory. By default
Plumbwork.Orange.Eventing.dll will write subscriptions file (called subscriptions.xml)
there.&lt;/li&gt;
&lt;li&gt;
Start the service using SCM (Service Control Manager). Service will automatically
create the specified queue. &lt;em&gt;Note: You should have Message Queuing installed.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
Start the service control application.&lt;/li&gt;
&lt;li&gt;
Start the client. It will register automatically.&lt;/li&gt;
&lt;li&gt;
Send notification using the service control application and watch it emerge on the
client side.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you get into trouble, please email me. Have fun!
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=15419938-4d67-435c-80df-838034a63136" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,15419938-4d67-435c-80df-838034a63136.aspx</comments>
      <category>Web Services</category>
      <category>Work</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=bae8b7ca-96fa-4476-bd3c-89441c0b4fae</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,bae8b7ca-96fa-4476-bd3c-89441c0b4fae.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,bae8b7ca-96fa-4476-bd3c-89441c0b4fae.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=bae8b7ca-96fa-4476-bd3c-89441c0b4fae</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A great post by <a href="http://staff.newtelligence.net/clemensv">Clemens</a> in which
he does a beautiful distinction between <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=0339fe35-2328-44be-93e6-f004bd869a84">services
and web services</a>.
</p>
        <p>
My thoughts would be:
</p>
        <ul>
          <li>
            <em>Service is a self consistent piece of software which MAY use one or more
web services for communication with the outside world.</em>
          </li>
          <li>
            <em>As always, web services MUST be considered to be within the presentation
layer of the solution. They just do not spit HTML out, they prefer XML.</em>
          </li>
        </ul>
        <p>
MAY and MUST are to be interpreted as defined in <a href="http://www.ietf.org/rfc/rfc2119.txt">RFC
2119</a>.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=bae8b7ca-96fa-4476-bd3c-89441c0b4fae" />
      </body>
      <title>Services &lt;&gt; Web Services</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,bae8b7ca-96fa-4476-bd3c-89441c0b4fae.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,bae8b7ca-96fa-4476-bd3c-89441c0b4fae.aspx</link>
      <pubDate>Wed, 18 Aug 2004 12:06:45 GMT</pubDate>
      <description>&lt;p&gt;
A great post by &lt;a href="http://staff.newtelligence.net/clemensv"&gt;Clemens&lt;/a&gt; in which
he does a beautiful distinction between &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=0339fe35-2328-44be-93e6-f004bd869a84"&gt;services
and web services&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
My thoughts would be:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Service is a self consistent piece of software which&amp;nbsp;MAY use one or more
web services for communication with the outside world.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;As always, web services&amp;nbsp;MUST be&amp;nbsp;considered&amp;nbsp;to be within the&amp;nbsp;presentation
layer of the solution. They just do not spit HTML out,&amp;nbsp;they prefer&amp;nbsp;XML.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
MAY and MUST&amp;nbsp;are to be interpreted as defined in &lt;a href="http://www.ietf.org/rfc/rfc2119.txt"&gt;RFC
2119&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=bae8b7ca-96fa-4476-bd3c-89441c0b4fae" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,bae8b7ca-96fa-4476-bd3c-89441c0b4fae.aspx</comments>
      <category>Web Services</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=a862e451-9611-42e8-b7ff-a7b90913fd0a</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,a862e451-9611-42e8-b7ff-a7b90913fd0a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,a862e451-9611-42e8-b7ff-a7b90913fd0a.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a862e451-9611-42e8-b7ff-a7b90913fd0a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
How simple is it to implement WS-Addressing based router using <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841&amp;displaylang=en">WSE
(Web Services Enhancements) 2.0</a>?
</p>
        <p>
Try this:
</p>
        <ol>
          <li>
Add the following to a vanilla web.config:<br /><font face="Courier New">     &lt;system.web&gt;<br />
        &lt;httpHandlers&gt;<br />
            &lt;add verb="*"
path="*.asmx"<br /></font><font face="Courier New">type="Microsoft.Web.Services2.Messaging.SoapHttpRouter,
Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
/&gt;<br />
        &lt;/httpHandlers&gt;<br />
     &lt;/system.web&gt;
</font></li>
          <li>
Add this too:<br /><font face="Courier New">     &lt;microsoft.web.services2&gt;<br />
        &lt;referral&gt;<br />
            &lt;cache name="referralCache.config"
/&gt;<br />
        &lt;/referral&gt;<br />
     &lt;/microsoft.web.services2&gt;</font></li>
          <li>
Create a referral cache file (save as <font face="Courier New">referralCache.config</font>):<br /><font face="Courier New">&lt;?xml version="1.0" ?&gt;<br />
&lt;r:referrals xmlns:r="http://schemas.xmlsoap.org/ws/2001/10/referral"&gt;<br />
  &lt;r:ref&gt;<br />
    &lt;r:for&gt;<br />
      &lt;r:exact&gt;&lt;!-- SOURCE URI --&gt;&lt;/r:exact&gt;<br />
    &lt;/r:for&gt;<br />
    &lt;r:if /&gt;<br />
    &lt;r:go&gt;<br />
      &lt;r:via&gt;&lt;!-- DESTINATION URI --&gt;&lt;/r:via&gt;<br />
    &lt;/r:go&gt;<br />
    &lt;r:refId&gt;uuid:fa468856-0057-4e11-962a-81c5e292f2ae&lt;/r:refId&gt;<br />
  &lt;/r:ref&gt;<br />
&lt;/r:referrals&gt;</font></li>
          <li>
Allow NETWORK SERVICE account write access to referral cache file.</li>
          <li>
Create an ASP .NET application out of this VRoot.</li>
        </ol>
        <p>
All SOAP requests sent to your source URI will be redirected to your destination URI.
You should be careful to add <font face="Courier New">SoapActor</font> attribute with
the appropriate actor URI to your destination service.
</p>
        <p>
Your referral cache file is locked from the moment of first SOAP request, so changing
it is impossible without shutting down IIS (or at least the app pool which is serving
it).
</p>
        <p>
It is possible and advised that when changing URIs you create another referral cache
file and change web.config's <font face="Courier New">microsoft.web.services2/referral/cache</font> element.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=a862e451-9611-42e8-b7ff-a7b90913fd0a" />
      </body>
      <title>WSE 2.0 Router</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,a862e451-9611-42e8-b7ff-a7b90913fd0a.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,a862e451-9611-42e8-b7ff-a7b90913fd0a.aspx</link>
      <pubDate>Mon, 16 Aug 2004 19:52:58 GMT</pubDate>
      <description>&lt;p&gt;
How simple is it to implement WS-Addressing based router using &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841&amp;amp;displaylang=en"&gt;WSE
(Web Services Enhancements) 2.0&lt;/a&gt;?
&lt;/p&gt;
&lt;p&gt;
Try this:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Add the following to a vanilla web.config:&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;system.web&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;httpHandlers&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add verb="*"
path="*.asmx"&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;type="Microsoft.Web.Services2.Messaging.SoapHttpRouter,
Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/httpHandlers&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/system.web&amp;gt;
&lt;/li&gt;&gt; 
&lt;li&gt;
Add this too:&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;microsoft.web.services2&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;referral&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cache name="referralCache.config"
/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/referral&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/microsoft.web.services2&amp;gt;&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
Create a referral cache file (save as &lt;font face="Courier New"&gt;referralCache.config&lt;/font&gt;):&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;lt;?xml version="1.0" ?&amp;gt;&lt;br&gt;
&amp;lt;r:referrals xmlns:r="http://schemas.xmlsoap.org/ws/2001/10/referral"&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;r:ref&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;r:for&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;r:exact&amp;gt;&amp;lt;!-- SOURCE URI --&amp;gt;&amp;lt;/r:exact&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/r:for&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;r:if /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;r:go&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;r:via&amp;gt;&amp;lt;!-- DESTINATION URI --&amp;gt;&amp;lt;/r:via&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/r:go&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;r:refId&amp;gt;uuid:fa468856-0057-4e11-962a-81c5e292f2ae&amp;lt;/r:refId&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/r:ref&amp;gt;&lt;br&gt;
&amp;lt;/r:referrals&amp;gt;&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
Allow NETWORK SERVICE account write access to referral cache file.&lt;/li&gt;
&lt;li&gt;
Create an ASP .NET application out of this VRoot.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
All SOAP requests sent to your source URI will be redirected to your destination URI.
You should be careful to add &lt;font face="Courier New"&gt;SoapActor&lt;/font&gt; attribute with
the appropriate actor URI to your destination service.
&lt;/p&gt;
&lt;p&gt;
Your referral cache file is locked from the moment of first SOAP request, so changing
it is impossible without shutting down IIS (or at least the app pool which is&amp;nbsp;serving
it).
&lt;/p&gt;
&lt;p&gt;
It is possible and advised that when changing URIs you create another referral cache
file and change web.config's &lt;font face="Courier New"&gt;microsoft.web.services2/referral/cache&lt;/font&gt; element.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=a862e451-9611-42e8-b7ff-a7b90913fd0a" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,a862e451-9611-42e8-b7ff-a7b90913fd0a.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=2e37a795-d1af-4581-bf13-26994f24be75</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,2e37a795-d1af-4581-bf13-26994f24be75.aspx</pingback:target>
      <dc:creator>Matevz Gacnik</dc:creator>
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,2e37a795-d1af-4581-bf13-26994f24be75.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2e37a795-d1af-4581-bf13-26994f24be75</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As <a href="/blog/PermaLink.aspx?guid=99f5efca-a436-4699-a45c-258f86e72d32">last year</a>,
I spoke on <a href="http://cot.uni-mb.si/ots2004/">OTS 2004</a> too.
</p>
        <p>
This time, we discussed transactional semantics in weakly bound, distributed systems.
</p>
        <p>
Hope to see you on 2005's annual reincarnation of a great conference.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=2e37a795-d1af-4581-bf13-26994f24be75" />
      </body>
      <title>OTS 2004</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,2e37a795-d1af-4581-bf13-26994f24be75.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,2e37a795-d1af-4581-bf13-26994f24be75.aspx</link>
      <pubDate>Sun, 20 Jun 2004 21:19:39 GMT</pubDate>
      <description>&lt;p&gt;
As &lt;a href="/blog/PermaLink.aspx?guid=99f5efca-a436-4699-a45c-258f86e72d32"&gt;last year&lt;/a&gt;,
I spoke on &lt;a href="http://cot.uni-mb.si/ots2004/"&gt;OTS 2004&lt;/a&gt; too.
&lt;/p&gt;
&lt;p&gt;
This time, we discussed transactional semantics in weakly bound, distributed systems.
&lt;/p&gt;
&lt;p&gt;
Hope to see you on 2005's annual reincarnation of a great conference.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=2e37a795-d1af-4581-bf13-26994f24be75" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,2e37a795-d1af-4581-bf13-26994f24be75.aspx</comments>
      <category>Transactions</category>
      <category>Web Services</category>
      <category>Work</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=573a2f0b-6e6e-4b18-ad80-0c4ce65628c9</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,573a2f0b-6e6e-4b18-ad80-0c4ce65628c9.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,573a2f0b-6e6e-4b18-ad80-0c4ce65628c9.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=573a2f0b-6e6e-4b18-ad80-0c4ce65628c9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Finally! After 30 minutes of SteveB's keynote talk, here at <a href="http://www.microsoft.com/teched">TechEd
2004 in San Diego</a>, <a href="http://msdn.microsoft.com/webservices/building/wse/">WSE
2</a> was announced.
</p>
        <p>
Download it <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841&amp;displaylang=en">here</a>.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=573a2f0b-6e6e-4b18-ad80-0c4ce65628c9" />
      </body>
      <title>WSE 2.0 Out of the Closet</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,573a2f0b-6e6e-4b18-ad80-0c4ce65628c9.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,573a2f0b-6e6e-4b18-ad80-0c4ce65628c9.aspx</link>
      <pubDate>Mon, 24 May 2004 16:56:15 GMT</pubDate>
      <description>&lt;p&gt;
Finally! After 30 minutes of SteveB's keynote talk, here at &lt;a href="http://www.microsoft.com/teched"&gt;TechEd
2004 in San Diego&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/webservices/building/wse/"&gt;WSE
2&lt;/a&gt; was announced.
&lt;/p&gt;
&lt;p&gt;
Download it &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841&amp;amp;displaylang=en"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=573a2f0b-6e6e-4b18-ad80-0c4ce65628c9" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,573a2f0b-6e6e-4b18-ad80-0c4ce65628c9.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=6b1041f6-6f52-4f84-8da1-551140e28a05</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,6b1041f6-6f52-4f84-8da1-551140e28a05.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,6b1041f6-6f52-4f84-8da1-551140e28a05.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6b1041f6-6f52-4f84-8da1-551140e28a05</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.dynamic-cast.com/">Harwey</a>
          <a href="http://www.dynamic-cast.com/mt-archives/000042.html">said</a> it's
code complete around March 1st. 
</p>
        <p>
As I got the confirmation today that first bits from the Indigo team will be available
to the selected ones in late July/early August, this is definitely something to look
for.
</p>
        <p>
Why...
</p>
        <p>
Why is...
</p>
        <p>
Why is it...
</p>
        <p>
Why is it still...
</p>
        <p>
Why is it still brewing?
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=6b1041f6-6f52-4f84-8da1-551140e28a05" />
      </body>
      <title>What happened?</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,6b1041f6-6f52-4f84-8da1-551140e28a05.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,6b1041f6-6f52-4f84-8da1-551140e28a05.aspx</link>
      <pubDate>Mon, 17 May 2004 17:29:13 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.dynamic-cast.com/"&gt;Harwey&lt;/a&gt; &lt;a href="http://www.dynamic-cast.com/mt-archives/000042.html"&gt;said&lt;/a&gt; it's
code complete around March 1st. 
&lt;/p&gt;
&lt;p&gt;
As I got the confirmation today that first bits from the Indigo team will be available
to the selected ones in late July/early August, this is definitely something to look
for.
&lt;/p&gt;
&lt;p&gt;
Why...
&lt;/p&gt;
&lt;p&gt;
Why is...
&lt;/p&gt;
&lt;p&gt;
Why is it...
&lt;/p&gt;
&lt;p&gt;
Why is it still...
&lt;/p&gt;
&lt;p&gt;
Why is it still brewing?
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=6b1041f6-6f52-4f84-8da1-551140e28a05" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,6b1041f6-6f52-4f84-8da1-551140e28a05.aspx</comments>
      <category>Web Services</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=d202f470-87a3-4d77-ab4f-b592fca5d587</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,d202f470-87a3-4d77-ab4f-b592fca5d587.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,d202f470-87a3-4d77-ab4f-b592fca5d587.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d202f470-87a3-4d77-ab4f-b592fca5d587</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Well, it's not released yet, but good things come last.
</p>
        <p>
WSE (Web Services Enhancements) 2.0 is in <a href="http://www.dynamic-cast.com/mt-archives/000042.html">mostly
done, mostly finished or code complete</a>.
</p>
        <p>
This one is on my most wanted list.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=d202f470-87a3-4d77-ab4f-b592fca5d587" />
      </body>
      <title>WSE 2.0 is finished, alias code complete</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,d202f470-87a3-4d77-ab4f-b592fca5d587.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,d202f470-87a3-4d77-ab4f-b592fca5d587.aspx</link>
      <pubDate>Wed, 03 Mar 2004 20:51:27 GMT</pubDate>
      <description>&lt;p&gt;
Well, it's not released yet, but good things come last.
&lt;/p&gt;
&lt;p&gt;
WSE (Web Services Enhancements) 2.0 is in &lt;a href="http://www.dynamic-cast.com/mt-archives/000042.html"&gt;mostly
done, mostly finished or code complete&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
This one is on my most wanted list.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=d202f470-87a3-4d77-ab4f-b592fca5d587" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,d202f470-87a3-4d77-ab4f-b592fca5d587.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=e16534a7-2e76-46f1-8aed-ac1a66ba65b1</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,e16534a7-2e76-46f1-8aed-ac1a66ba65b1.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,e16534a7-2e76-46f1-8aed-ac1a66ba65b1.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e16534a7-2e76-46f1-8aed-ac1a66ba65b1</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
During preparation for a work presentation for a complex project (designing transport
level secure, distributed, endpoint independent web services) I needed to install
some benign certificates to an IIS 6 machine. All hell broke lose when I did it and
(production) machine failed completely. IIS Admin service would not start, UDDI Services
went down, nothing worked.
</p>
        <p>
After numerous hours of trying to fix at least IIS I got an idea of what was wrong.
</p>
        <p>
Apperently the MachineKeys folder, which holds machine account private keys was screwed.
No matter how hard I tried reinstalling IIS nothing worked. The solution was in manually
deleting MachineKeys folder, encrypting it and setting appropriate permission set.
</p>
        <p>
So, if you are ever in a situation where IIS Admin service would not start causing
one of the following errors and you suspect MachineKeys is the reason for it, consider
the steps below:
</p>
        <ul>
          <li>
The system cannot find the file specified.</li>
          <li>
The handle is invalid.</li>
          <li>
Not enough storage is available to process this command.<font size="1"></font></li>
        </ul>
        <p>
Try this:
</p>
        <ul>
          <li>
Uninstall IIS</li>
          <li>
Backup files in MachineKeys folder (c:\documents and settings\all users\application
data\microsoft\crypto\rsa\machinekeys)</li>
          <li>
Delete MachineKeys folder</li>
          <li>
Create new MachineKeys folder</li>
          <li>
Assign Administrators group, SYSTEM account full permissions</li>
          <li>
ENCRYPT THE DAMN FOLDER (Properties, Encryption)</li>
          <li>
Copy keys if necessary</li>
          <li>
Reinstall IIS</li>
        </ul>
        <p>
Good luck.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=e16534a7-2e76-46f1-8aed-ac1a66ba65b1" />
      </body>
      <title>IIS horror story</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,e16534a7-2e76-46f1-8aed-ac1a66ba65b1.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,e16534a7-2e76-46f1-8aed-ac1a66ba65b1.aspx</link>
      <pubDate>Tue, 02 Mar 2004 20:59:25 GMT</pubDate>
      <description>&lt;p&gt;
During preparation for a work presentation for a complex project (designing transport
level secure, distributed, endpoint independent&amp;nbsp;web services) I needed to install
some benign certificates to an IIS 6 machine. All hell broke lose when I did it and
(production) machine failed completely. IIS Admin service would not start, UDDI Services
went down, nothing worked.
&lt;/p&gt;
&lt;p&gt;
After numerous hours of trying to fix at least IIS I got an idea of what was wrong.
&lt;/p&gt;
&lt;p&gt;
Apperently the MachineKeys folder, which holds machine account private keys was screwed.
No matter how hard I tried reinstalling IIS nothing worked. The solution was in manually
deleting MachineKeys folder, encrypting it and setting appropriate permission set.
&lt;/p&gt;
&lt;p&gt;
So, if you are ever in a situation where IIS Admin service would not start causing
one of the following errors and you suspect MachineKeys is the reason for it, consider
the steps below:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The system cannot find the file specified.&lt;/li&gt;
&lt;li&gt;
The handle is invalid.&lt;/li&gt;
&lt;li&gt;
Not enough storage is available to process this command.&lt;font size=1&gt;
&lt;/li&gt;
&lt;/ul&gt;
&gt; 
&lt;p&gt;
Try this:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Uninstall IIS&lt;/li&gt;
&lt;li&gt;
Backup files in MachineKeys folder (c:\documents and settings\all users\application
data\microsoft\crypto\rsa\machinekeys)&lt;/li&gt;
&lt;li&gt;
Delete MachineKeys folder&lt;/li&gt;
&lt;li&gt;
Create new MachineKeys folder&lt;/li&gt;
&lt;li&gt;
Assign Administrators group, SYSTEM account full permissions&lt;/li&gt;
&lt;li&gt;
ENCRYPT THE DAMN FOLDER (Properties, Encryption)&lt;/li&gt;
&lt;li&gt;
Copy keys if necessary&lt;/li&gt;
&lt;li&gt;
Reinstall IIS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Good luck.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=e16534a7-2e76-46f1-8aed-ac1a66ba65b1" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,e16534a7-2e76-46f1-8aed-ac1a66ba65b1.aspx</comments>
      <category>Personal</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=649d91ef-f03c-48af-903a-cbb48845f004</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,649d91ef-f03c-48af-903a-cbb48845f004.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,649d91ef-f03c-48af-903a-cbb48845f004.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=649d91ef-f03c-48af-903a-cbb48845f004</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
What happened <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=045048dc-038e-4d81-af1b-ff2ff0fee1a8">with
Clemens</a>?
</p>
        <p>
It was a nice show (I watched via live Webcast), but someone was missing. :)
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=649d91ef-f03c-48af-903a-cbb48845f004" />
      </body>
      <title>DevDays start</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,649d91ef-f03c-48af-903a-cbb48845f004.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,649d91ef-f03c-48af-903a-cbb48845f004.aspx</link>
      <pubDate>Thu, 22 Jan 2004 18:08:57 GMT</pubDate>
      <description>&lt;p&gt;
What happened &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=045048dc-038e-4d81-af1b-ff2ff0fee1a8"&gt;with
Clemens&lt;/a&gt;?
&lt;/p&gt;
&lt;p&gt;
It was a nice show (I watched via live Webcast), but someone was missing. :)
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=649d91ef-f03c-48af-903a-cbb48845f004" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,649d91ef-f03c-48af-903a-cbb48845f004.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=3a734868-15d3-466b-9c83-19be79d78436</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,3a734868-15d3-466b-9c83-19be79d78436.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,3a734868-15d3-466b-9c83-19be79d78436.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3a734868-15d3-466b-9c83-19be79d78436</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p dir="ltr" style="MARGIN-RIGHT: 0px">
Well, until today (and I don't know why) I had a concept in my head, that WSDL operation
names need to be unique.
</p>
        <p>
I'm really glad that guys from a big local mobile operator helped me clear things
up (actually, they helped me lead myself into a no-exit alley). It happened today,
during my web services day, a part of a bigger .NET training course.
</p>
        <p>
I reread <a href="http://www.w3.org/TR/wsdl">the spec</a>. It says:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>Since operation names are <strong>not required to be unique </strong>(for example,
in the case of overloading of method names), the name attribute in the operation binding
element might not be enough to uniquely identify an operation. <strong>In that case,
the correct operation should be identified by providing the name attributes of the
corresponding wsdl:input and wsdl:output elements.</strong></em>
          </p>
        </blockquote>
        <p>
Polymorphic methods are my friends again. I was mislead about the WSDL serialization
details in that scenario.
</p>
        <p>
Enough said.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3a734868-15d3-466b-9c83-19be79d78436" />
      </body>
      <title>WSDL misconceptions</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,3a734868-15d3-466b-9c83-19be79d78436.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,3a734868-15d3-466b-9c83-19be79d78436.aspx</link>
      <pubDate>Thu, 15 Jan 2004 20:48:40 GMT</pubDate>
      <description>&lt;p dir=ltr style="MARGIN-RIGHT: 0px"&gt;
Well, until today (and I don't know why) I had a concept in my head, that WSDL operation
names need to be unique.
&lt;/p&gt;
&lt;p&gt;
I'm really glad that guys from a big local mobile operator helped me clear things
up (actually, they helped me lead myself into a no-exit alley). It happened today,
during my web services day, a part of a bigger .NET training course.
&lt;/p&gt;
&lt;p&gt;
I reread &lt;a href="http://www.w3.org/TR/wsdl"&gt;the spec&lt;/a&gt;. It says:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;em&gt;Since operation names are &lt;strong&gt;not required to be unique &lt;/strong&gt;(for example,
in the case of overloading of method names), the name attribute in the operation binding
element might not be enough to uniquely identify an operation. &lt;strong&gt;In that case,
the correct operation should be identified by providing the name attributes of the
corresponding wsdl:input and wsdl:output elements.&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Polymorphic methods are my friends again. I was mislead about the WSDL serialization
details in that scenario.
&lt;/p&gt;
&lt;p&gt;
Enough said.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3a734868-15d3-466b-9c83-19be79d78436" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,3a734868-15d3-466b-9c83-19be79d78436.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=14b86c7d-4f49-472e-8323-8b45ce857a58</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,14b86c7d-4f49-472e-8323-8b45ce857a58.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,14b86c7d-4f49-472e-8323-8b45ce857a58.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=14b86c7d-4f49-472e-8323-8b45ce857a58</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://weblogs.asp.net/cweyer/archive/2004/01/10/49433.aspx">Christian Weyer</a> admits
he's not the only one thinking that <a href="http://www.mindreef.com/products/overview.html">SoapScope</a> is
that great.
</p>
        <p>
My priorities go like this:
</p>
        <ol>
          <li>
Excellent Testing Tool</li>
          <li>
            <a href="http://ws-i.org/Profiles/Basic/2003-08/BasicProfile-1.0faq.pdf">BP 1.0</a> Complience
Verifier</li>
          <li>
Great VS Integration</li>
        </ol>
        <p>
Keep it up.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=14b86c7d-4f49-472e-8323-8b45ce857a58" />
      </body>
      <title>Christian is not the only freak</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,14b86c7d-4f49-472e-8323-8b45ce857a58.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,14b86c7d-4f49-472e-8323-8b45ce857a58.aspx</link>
      <pubDate>Sat, 10 Jan 2004 19:24:15 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://weblogs.asp.net/cweyer/archive/2004/01/10/49433.aspx"&gt;Christian Weyer&lt;/a&gt; admits
he's not the only one thinking that &lt;a href="http://www.mindreef.com/products/overview.html"&gt;SoapScope&lt;/a&gt; is
that great.
&lt;/p&gt;
&lt;p&gt;
My priorities go like this:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Excellent Testing Tool&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://ws-i.org/Profiles/Basic/2003-08/BasicProfile-1.0faq.pdf"&gt;BP 1.0&lt;/a&gt; Complience
Verifier&lt;/li&gt;
&lt;li&gt;
Great VS Integration&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Keep it up.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=14b86c7d-4f49-472e-8323-8b45ce857a58" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,14b86c7d-4f49-472e-8323-8b45ce857a58.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=f4359eb4-4293-4a38-97de-42dad04fb24b</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,f4359eb4-4293-4a38-97de-42dad04fb24b.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,f4359eb4-4293-4a38-97de-42dad04fb24b.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f4359eb4-4293-4a38-97de-42dad04fb24b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It happened. <a href="http://www.mindreef.com/">Mindreef released a new version</a> of
its excellent tool - SoapScope 3.0.
</p>
        <p>
Web services diagnostics has never been so efficient.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=f4359eb4-4293-4a38-97de-42dad04fb24b" />
      </body>
      <title>SoapScope 3.0 Released</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,f4359eb4-4293-4a38-97de-42dad04fb24b.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,f4359eb4-4293-4a38-97de-42dad04fb24b.aspx</link>
      <pubDate>Sat, 10 Jan 2004 09:41:34 GMT</pubDate>
      <description>&lt;p&gt;
It happened. &lt;a href="http://www.mindreef.com/"&gt;Mindreef released a new version&lt;/a&gt; of
its excellent tool - SoapScope 3.0.
&lt;/p&gt;
&lt;p&gt;
Web services diagnostics has never been so efficient.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=f4359eb4-4293-4a38-97de-42dad04fb24b" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,f4359eb4-4293-4a38-97de-42dad04fb24b.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=2ec3ca06-3df7-4587-91d9-a73d23b25a8c</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,2ec3ca06-3df7-4587-91d9-a73d23b25a8c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,2ec3ca06-3df7-4587-91d9-a73d23b25a8c.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2ec3ca06-3df7-4587-91d9-a73d23b25a8c</wfw:commentRss>
      <title>Hosting Indigo services</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,2ec3ca06-3df7-4587-91d9-a73d23b25a8c.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,2ec3ca06-3df7-4587-91d9-a73d23b25a8c.aspx</link>
      <pubDate>Thu, 27 Nov 2003 20:58:48 GMT</pubDate>
      <description>&lt;p&gt;
Proof:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="/blog/content/binary/indigo1.JPG" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Steps to reproduce:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Install Longhorn 
&lt;li&gt;
Install Longhorn SDK 
&lt;li&gt;
Install IIS 7.0 
&lt;li&gt;
Do a aspnet_regiis.exe -i to install ASP .NET and enable it in IIS manager&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Default wire level format of the request is (WS-Addressing goop present):
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New" color=#000000&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br&gt;
&amp;lt;env:Envelope xmlns:env="&lt;/font&gt;&lt;a href="http://www.w3.org/2001/12/soap-envelope"&gt;&lt;font face="Courier New" color=#000000&gt;http://www.w3.org/2001/12/soap-envelope&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;env:Header&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;wsa:Action xmlns:wsa="&lt;/font&gt;&lt;a href='http://schemas.xmlsoap.org/ws/2002/12/addressing"&gt;http://www.tempuri.org/quickstarts/hosting/client&lt;/wsa:Action'&gt;&lt;font face="Courier New" color=#000000&gt;http://schemas.xmlsoap.org/ws/2002/12/addressing"&amp;gt;http://www.tempuri.org/quickstarts/hosting/client&amp;lt;/wsa:Action&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;wsa:MessageId xmlns:wsa="&lt;/font&gt;&lt;a href='http://schemas.xmlsoap.org/ws/2002/12/addressing"&gt;uuid:eddab546-ff51-491f-805a-c497c8918543;id=1&lt;/wsa:MessageId'&gt;&lt;font face="Courier New" color=#000000&gt;http://schemas.xmlsoap.org/ws/2002/12/addressing"&amp;gt;uuid:eddab546-ff51-491f-805a-c497c8918543;id=1&amp;lt;/wsa:MessageId&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;wsa:To env:mustUnderstand="true" xmlns:wsa="&lt;/font&gt;&lt;a href='http://schemas.xmlsoap.org/ws/2002/12/addressing"&gt;http://bit:6666/webservices/hello/hello.msgx&lt;/wsa:To'&gt;&lt;font face="Courier New" color=#000000&gt;http://schemas.xmlsoap.org/ws/2002/12/addressing"&amp;gt;http://bit:6666/webservices/hello/hello.msgx&amp;lt;/wsa:To&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;wsa:ReplyInfo xmlns:wsa="&lt;/font&gt;&lt;a href="http://schemas.xmlsoap.org/ws/2002/12/addressing"&gt;&lt;font face="Courier New" color=#000000&gt;http://schemas.xmlsoap.org/ws/2002/12/addressing&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:To env:mustUnderstand="true"&amp;gt;uuid:6572af77-a988-4e80-8bd2-59d036139ae4;id=1&amp;lt;/wsa:To&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/wsa:ReplyInfo&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;wsa:Path env:mustUnderstand="true" env:role="&lt;/font&gt;&lt;a href="http://www.w3.org/2002/12/soap-envelope/role/next"&gt;&lt;font face="Courier New" color=#000000&gt;http://www.w3.org/2002/12/soap-envelope/role/next&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:wsa="&lt;/font&gt;&lt;a href="http://schemas.xmlsoap.org/ws/2002/12/addressing"&gt;&lt;font face="Courier New" color=#000000&gt;http://schemas.xmlsoap.org/ws/2002/12/addressing&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:Request&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:Forward&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:Via wsa:Role="&lt;/font&gt;&lt;a href="http://bit:6666/webservices/hello/hello.msgx"&gt;&lt;font face="Courier New" color=#000000&gt;http://bit:6666/webservices/hello/hello.msgx&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;"
/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/wsa:Forward&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:Reverse&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;wsa:Via /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/wsa:Reverse&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/wsa:Request&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/wsa:Path&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;/env:Header&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;env:Body&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;Root d3p1:type="d3p2:String" xmlns:d3p2="&lt;/font&gt;&lt;a href="http://tempuri.org/System"&gt;&lt;font face="Courier New" color=#000000&gt;http://tempuri.org/System&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;"
xmlns:d3p1="&lt;/font&gt;&lt;a href="http://www.w3.org/2001/XMLSchema-instance"&gt;&lt;font face="Courier New" color=#000000&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns="&lt;/font&gt;&lt;a href='http://schemas.microsoft.com/serialization/2003/02/DefaultDocumentElement"&gt;Aaaa!&lt;/Root'&gt;&lt;font face="Courier New" color=#000000&gt;http://schemas.microsoft.com/serialization/2003/02/DefaultDocumentElement"&amp;gt;Aaaa!&amp;lt;/Root&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color=#000000&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;lt;/env:Body&amp;gt;&lt;br&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;/font&gt;&lt;font color=#0000ff size=4&gt;
&lt;/p&gt;
&gt;&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=2ec3ca06-3df7-4587-91d9-a73d23b25a8c" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,2ec3ca06-3df7-4587-91d9-a73d23b25a8c.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=e11b1005-219a-4095-91ef-45b2de8acac9</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,e11b1005-219a-4095-91ef-45b2de8acac9.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,e11b1005-219a-4095-91ef-45b2de8acac9.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e11b1005-219a-4095-91ef-45b2de8acac9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Can't get one of my solutions to work on a Windows Server 2003 based server. Client
works fine, but server side X509-based decryption fails with an error that should
not happen (Cannot find the certificate and private key for decrtyption).
</p>
        <p>
Everything installed and correctly setup. Even permissions. :)
</p>
        <p>
Since even the official Microsoft newsgroup didn't help, I'm really stuck. The
funny thing is, that if I disallow access to private key and/or remove the certificate,
error message changes giving me a clue that WSE looks at the cert unsuccessfully.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=e11b1005-219a-4095-91ef-45b2de8acac9" />
      </body>
      <title>WSE on Windows Server 2003</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,e11b1005-219a-4095-91ef-45b2de8acac9.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,e11b1005-219a-4095-91ef-45b2de8acac9.aspx</link>
      <pubDate>Wed, 26 Nov 2003 13:32:11 GMT</pubDate>
      <description>&lt;p&gt;
Can't get one of my solutions to work on a Windows Server 2003 based server. Client
works fine, but server side X509-based decryption fails with an error that should
not happen (Cannot find the certificate and private key for decrtyption).
&lt;/p&gt;
&lt;p&gt;
Everything installed and correctly setup. Even permissions. :)
&lt;/p&gt;
&lt;p&gt;
Since&amp;nbsp;even the official Microsoft newsgroup didn't help, I'm really stuck. The
funny thing is, that if I disallow access to private key and/or remove the certificate,
error message changes giving me a clue that WSE looks at the cert unsuccessfully.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=e11b1005-219a-4095-91ef-45b2de8acac9" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,e11b1005-219a-4095-91ef-45b2de8acac9.aspx</comments>
      <category>Web Services</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=e4fc5f53-fd19-47d8-858d-f9c158b3db6f</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,e4fc5f53-fd19-47d8-858d-f9c158b3db6f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,e4fc5f53-fd19-47d8-858d-f9c158b3db6f.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e4fc5f53-fd19-47d8-858d-f9c158b3db6f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Since I went through a main server reinstall I also moved my sub-sites to new domain
names. Lupus is now listening on <a href="http://lupus.request-response.com">http://lupus.request-response.com</a> and
my little playground page is located on <a href="http://playground.request-response.com">http://playground.request-response.com</a>.
</p>
        <p>
Redirects from <a href="/lupus">http://www.request-response.com/lupus</a> and <a href="/playground">http://www.request-response.com/playground</a> are
not available and will probably never be. If anyone has a permanent endpoint on <a href="http://playground.request-response.com/rssquery/rssquery.asmx">RSS
Query</a> web service, she will know soon. ;)
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=e4fc5f53-fd19-47d8-858d-f9c158b3db6f" />
      </body>
      <title>VRoots Changed</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,e4fc5f53-fd19-47d8-858d-f9c158b3db6f.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,e4fc5f53-fd19-47d8-858d-f9c158b3db6f.aspx</link>
      <pubDate>Sun, 09 Nov 2003 00:55:12 GMT</pubDate>
      <description>&lt;p&gt;
Since I went through a main server reinstall I also moved my sub-sites to new domain
names. Lupus is now listening on &lt;a href="http://lupus.request-response.com"&gt;http://lupus.request-response.com&lt;/a&gt; and
my little playground page is located on &lt;a href="http://playground.request-response.com"&gt;http://playground.request-response.com&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Redirects from &lt;a href="/lupus"&gt;http://www.request-response.com/lupus&lt;/a&gt; and &lt;a href="/playground"&gt;http://www.request-response.com/playground&lt;/a&gt; are
not available and will probably never be. If anyone has a permanent endpoint on &lt;a href="http://playground.request-response.com/rssquery/rssquery.asmx"&gt;RSS
Query&lt;/a&gt; web service, she will know soon. ;)
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=e4fc5f53-fd19-47d8-858d-f9c158b3db6f" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,e4fc5f53-fd19-47d8-858d-f9c158b3db6f.aspx</comments>
      <category>Personal</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=6d1d9d57-6882-44e3-a2e6-c77ae504d59f</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,6d1d9d57-6882-44e3-a2e6-c77ae504d59f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,6d1d9d57-6882-44e3-a2e6-c77ae504d59f.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6d1d9d57-6882-44e3-a2e6-c77ae504d59f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Eric Maino <a href="http://weblogs.asp.net/EMaino/posts/31923.aspx">writes</a> about
an obvious example of misleading writing on <a href="http://www.microsoft.com/net/basics/whatis.asp">this</a> Microsoft
page.
</p>
        <p>
I tend to agree. What should also be emphasized is that Web Services are not the only
core feature of .NET. There's more meat behind the curtain.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=6d1d9d57-6882-44e3-a2e6-c77ae504d59f" />
      </body>
      <title>.NET != Web Services</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,6d1d9d57-6882-44e3-a2e6-c77ae504d59f.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,6d1d9d57-6882-44e3-a2e6-c77ae504d59f.aspx</link>
      <pubDate>Tue, 14 Oct 2003 20:35:06 GMT</pubDate>
      <description>&lt;p&gt;
Eric Maino &lt;a href="http://weblogs.asp.net/EMaino/posts/31923.aspx"&gt;writes&lt;/a&gt; about
an obvious example of misleading writing on &lt;a href="http://www.microsoft.com/net/basics/whatis.asp"&gt;this&lt;/a&gt; Microsoft
page.
&lt;/p&gt;
&lt;p&gt;
I tend to agree. What should also be emphasized is that Web Services are not the&amp;nbsp;only
core feature of .NET. There's more meat behind the curtain.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=6d1d9d57-6882-44e3-a2e6-c77ae504d59f" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,6d1d9d57-6882-44e3-a2e6-c77ae504d59f.aspx</comments>
      <category>Web Services</category>
      <category>Other</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=08985239-dc99-4667-a411-854309c6dd6d</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,08985239-dc99-4667-a411-854309c6dd6d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,08985239-dc99-4667-a411-854309c6dd6d.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=08985239-dc99-4667-a411-854309c6dd6d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After numerous unsuccessful attempts to contact the Microsoft UDDI team I emailed <a href="http://www.gotdotnet.com/team/karstenj/">Karsten
Januszewski</a> directly and he managed to get it fixed in less than a day. Thanks
Karsten!
</p>
        <p>
We are now at level 2, so we can publish whatever we want. Currently we have seven
services and this weblog registered.
</p>
        <p>
What's interesting is that the UDDI categorization scheme seems to have changed. One
can now do a successful search in InfoPath/VS.NET only if a service is assigned to
wsdlSpec category.
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=08985239-dc99-4667-a411-854309c6dd6d" />
      </body>
      <title>UDDI level 2 status</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,08985239-dc99-4667-a411-854309c6dd6d.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,08985239-dc99-4667-a411-854309c6dd6d.aspx</link>
      <pubDate>Tue, 14 Oct 2003 20:26:06 GMT</pubDate>
      <description>&lt;p&gt;
After numerous unsuccessful attempts to contact the Microsoft UDDI team I emailed &lt;a href="http://www.gotdotnet.com/team/karstenj/"&gt;Karsten
Januszewski&lt;/a&gt; directly and he managed to get it fixed in less than a day. Thanks
Karsten!
&lt;/p&gt;
&lt;p&gt;
We are now at level 2, so we can publish whatever we want. Currently we have seven
services and this weblog registered.
&lt;/p&gt;
&lt;p&gt;
What's interesting is that the UDDI categorization scheme seems to have changed. One
can now do a successful search in InfoPath/VS.NET only if a service is assigned to
wsdlSpec category.
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=08985239-dc99-4667-a411-854309c6dd6d" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,08985239-dc99-4667-a411-854309c6dd6d.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=b7c1102c-8b16-41e9-9f51-4792f76cfb24</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,b7c1102c-8b16-41e9-9f51-4792f76cfb24.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,b7c1102c-8b16-41e9-9f51-4792f76cfb24.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b7c1102c-8b16-41e9-9f51-4792f76cfb24</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We are unsuccessful with our emails to Microsoft UDDI team to upgrade our UDDI account
to level 2 status. If anyone knows an appropriate contact or is able to help directly,
please do so.
</p>
        <p>
UDDI Provider name: Gama System<br />
Current UDDI level: 1
</p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=b7c1102c-8b16-41e9-9f51-4792f76cfb24" />
      </body>
      <title>UDDI level 2 status</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,b7c1102c-8b16-41e9-9f51-4792f76cfb24.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,b7c1102c-8b16-41e9-9f51-4792f76cfb24.aspx</link>
      <pubDate>Sat, 04 Oct 2003 12:54:35 GMT</pubDate>
      <description>&lt;p&gt;
We are unsuccessful with our emails to Microsoft UDDI team to upgrade our UDDI account
to level 2 status. If anyone knows an appropriate contact or is able to help directly,
please do so.
&lt;/p&gt;
&lt;p&gt;
UDDI Provider name: Gama System&lt;br&gt;
Current UDDI level: 1
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=b7c1102c-8b16-41e9-9f51-4792f76cfb24" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,b7c1102c-8b16-41e9-9f51-4792f76cfb24.aspx</comments>
      <category>Web Services</category>
      <category>Work</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=53460959-de2e-4439-8282-19dc63c1d173</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,53460959-de2e-4439-8282-19dc63c1d173.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,53460959-de2e-4439-8282-19dc63c1d173.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=53460959-de2e-4439-8282-19dc63c1d173</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Latest daily build of <a href="http://www.go-mono.com">Mono</a> already allows web
service proxy creation, compilation and execution. I had to manually compile the wsdl.exe
equivalent (called MonoWSDL.exe) and then do:
</p>
        <ul>
          <li>
mono MonoWSDL.exe http://www.gama-system.com/webservices/stockquotes.asmx?wsdl (outputs
StockQuotes.cs proxy) 
</li>
          <li>
mcs /r:/usr/local/lib/System.Web.Services.dll /t:library StockQuotes.cs 
</li>
          <li>
write a simple console web service client app (StockQuotesClient.cs) 
</li>
          <li>
compile it using mcs /r:StockQuotes.dll StockQuotesClient.cs 
</li>
          <li>
run it with mono StockQuotesClient.exe NASDAQ MSFT</li>
        </ul>
        <p>
What did I get?
</p>
        <p>
This:
</p>
        <p>
          <img src="http://www.request-response.com/blog/content/binary/mono3.jpg" border="0" />
        </p>
        <p>
That's sweet. But Mono can now also do it the other way around. I can generate proxies
on our platform using the standard wsdl.exe tool. Mono web services test page looks
like this:
</p>
        <p>
          <img src="http://www.request-response.com/blog/content/binary/mono4.jpg" border="0" />
        </p>
        <p>
When one adds the "?wsdl" suffix to a web service endpoint WSDL is returned as expected.
</p>
        <p>
I like it.
</p>
        <p>
          <em>[Note: </em>
          <a href="http://www.gama-system.com/webservices/stockquotes.asmx">
            <em>http://www.gama-system.com/webservices/stockquotes.asmx</em>
          </a>
          <em> is our
free stock ticker web service]</em>
        </p>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=53460959-de2e-4439-8282-19dc63c1d173" />
      </body>
      <title>Mono web services</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,53460959-de2e-4439-8282-19dc63c1d173.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,53460959-de2e-4439-8282-19dc63c1d173.aspx</link>
      <pubDate>Fri, 12 Sep 2003 23:29:49 GMT</pubDate>
      <description>&lt;p&gt;
Latest daily build of &lt;a href="http://www.go-mono.com"&gt;Mono&lt;/a&gt; already allows web
service proxy creation, compilation and execution. I had to manually compile the wsdl.exe
equivalent (called MonoWSDL.exe) and then do:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
mono MonoWSDL.exe http://www.gama-system.com/webservices/stockquotes.asmx?wsdl&amp;nbsp;(outputs
StockQuotes.cs proxy) 
&lt;li&gt;
mcs /r:/usr/local/lib/System.Web.Services.dll /t:library StockQuotes.cs 
&lt;li&gt;
write a simple console web service client app (StockQuotesClient.cs) 
&lt;li&gt;
compile it using mcs /r:StockQuotes.dll StockQuotesClient.cs 
&lt;li&gt;
run it with mono StockQuotesClient.exe NASDAQ MSFT&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
What did I get?
&lt;/p&gt;
&lt;p&gt;
This:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.request-response.com/blog/content/binary/mono3.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
That's sweet. But Mono can now also do it the other way around. I can generate proxies
on our platform using the standard wsdl.exe tool. Mono web services test page looks
like this:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.request-response.com/blog/content/binary/mono4.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
When one adds the "?wsdl" suffix to a web service endpoint WSDL is returned as expected.
&lt;/p&gt;
&lt;p&gt;
I like it.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;[Note: &lt;/em&gt;&lt;a href="http://www.gama-system.com/webservices/stockquotes.asmx"&gt;&lt;em&gt;http://www.gama-system.com/webservices/stockquotes.asmx&lt;/em&gt;&lt;/a&gt;&lt;em&gt; is&amp;nbsp;our
free stock ticker web service]&lt;/em&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=53460959-de2e-4439-8282-19dc63c1d173" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,53460959-de2e-4439-8282-19dc63c1d173.aspx</comments>
      <category>XML</category>
      <category>Web Services</category>
      <category>Mono</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=5dba4d21-fdcf-4b79-ba94-48f54a217652</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,5dba4d21-fdcf-4b79-ba94-48f54a217652.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,5dba4d21-fdcf-4b79-ba94-48f54a217652.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5dba4d21-fdcf-4b79-ba94-48f54a217652</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here's my implementation of Microsoft.com Web Services client: <a href="http://www.request-response.com/playground/mscomws">http://www.request-response.com/playground/mscomws</a>.
</p>
        <p>
It's done manually:
</p>
        <ol>
          <li>
Create SOAP Request 
</li>
          <li>
Get response 
</li>
          <li>
Scrape through response using XSLT 
</li>
          <li>
Generate HTML, using XSLT's for-each, value-of, concat, substring-before, ... 
</li>
          <li>
Insert HTML into .aspx page</li>
        </ol>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=5dba4d21-fdcf-4b79-ba94-48f54a217652" />
      </body>
      <title>Microsoft.com Web Services</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,5dba4d21-fdcf-4b79-ba94-48f54a217652.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,5dba4d21-fdcf-4b79-ba94-48f54a217652.aspx</link>
      <pubDate>Sat, 06 Sep 2003 20:13:21 GMT</pubDate>
      <description>&lt;p&gt;
Here's my implementation of Microsoft.com Web Services client: &lt;a href="http://www.request-response.com/playground/mscomws"&gt;http://www.request-response.com/playground/mscomws&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
It's done manually:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Create SOAP Request 
&lt;li&gt;
Get response 
&lt;li&gt;
Scrape through response using XSLT 
&lt;li&gt;
Generate HTML, using XSLT's for-each, value-of, concat, substring-before, ... 
&lt;li&gt;
Insert HTML into .aspx page&lt;/li&gt;
&lt;/ol&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=5dba4d21-fdcf-4b79-ba94-48f54a217652" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,5dba4d21-fdcf-4b79-ba94-48f54a217652.aspx</comments>
      <category>XML</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=a26e8663-bcec-47a5-8f07-3e4bed65e922</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,a26e8663-bcec-47a5-8f07-3e4bed65e922.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,a26e8663-bcec-47a5-8f07-3e4bed65e922.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a26e8663-bcec-47a5-8f07-3e4bed65e922</wfw:commentRss>
      <title>Microsoft.com Web Services SDK</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,a26e8663-bcec-47a5-8f07-3e4bed65e922.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,a26e8663-bcec-47a5-8f07-3e4bed65e922.aspx</link>
      <pubDate>Wed, 27 Aug 2003 13:02:59 GMT</pubDate>
      <description>&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=66cc3c1f-1f44-4f22-ad4c-ed581084df8d&amp;displaylang=en"&gt;This&lt;/a&gt; is
good. Now people can automaticaly download new Microsoft software, articles, Technet
content, ...&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;In order to serve as a test for our new architecture, Version 1.0 of the Microsoft.com
Web Service is limited to providing information about top downloads from Microsoft.com.
Future releases will build on this architecture to provide access to a broader variety
of Microsoft content and services. &lt;/i&gt;
&lt;br /&gt;
&lt;br /&gt;
This is not so good. Should be called v0.31 then.&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=a26e8663-bcec-47a5-8f07-3e4bed65e922" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,a26e8663-bcec-47a5-8f07-3e4bed65e922.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=fbec1a45-2971-4ad5-a6a9-23d1ff6b3f8c</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,fbec1a45-2971-4ad5-a6a9-23d1ff6b3f8c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,fbec1a45-2971-4ad5-a6a9-23d1ff6b3f8c.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fbec1a45-2971-4ad5-a6a9-23d1ff6b3f8c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <body xmlns="http://www.w3.org/1999/xhtml">
          <p>
We just did a redesign on our /webservices subsection. You can find info/downloads/functions/...
on it. Everything is free to use - some contents are applicable only to local users,
though. 
</p>
          <p>
URL: <a href="http://www.gama-system.com/webservices">http://www.gama-system.com/webservices</a></p>
        </body>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=fbec1a45-2971-4ad5-a6a9-23d1ff6b3f8c" />
      </body>
      <title>Web services subpage redesigned</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,fbec1a45-2971-4ad5-a6a9-23d1ff6b3f8c.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,fbec1a45-2971-4ad5-a6a9-23d1ff6b3f8c.aspx</link>
      <pubDate>Tue, 26 Aug 2003 17:35:44 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;
We just did a redesign on our /webservices subsection. You can find info/downloads/functions/...
on it. Everything is free to use - some contents are applicable only to local users,
though. 
&lt;/p&gt;
&lt;p&gt;
URL: &lt;a href="http://www.gama-system.com/webservices"&gt;http://www.gama-system.com/webservices&lt;/a&gt; 
&lt;/p&gt;
&lt;/body&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=fbec1a45-2971-4ad5-a6a9-23d1ff6b3f8c" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,fbec1a45-2971-4ad5-a6a9-23d1ff6b3f8c.aspx</comments>
      <category>Work</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=3cbde045-3c04-4cb3-aed4-1184edd2db26</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,3cbde045-3c04-4cb3-aed4-1184edd2db26.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,3cbde045-3c04-4cb3-aed4-1184edd2db26.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3cbde045-3c04-4cb3-aed4-1184edd2db26</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <body xmlns="http://www.w3.org/1999/xhtml">
          <p>
I managed to get web services up and running on my Mono machine. <a href="http://www.request-response.com/images/mono2.png">This</a> proves
it. 
</p>
          <p>
What I dislike about the current implementation is obvious: 
</p>
          <ul>
            <li>
There's no WSDL generator yet (can't use wsdl.exe or any other web services proxy
generator tools) 
</li>
            <li>
There's no proxy class generator yet (wsdl.exe in our world) 
</li>
            <li>
URLs seem to be case sensitive 
</li>
          </ul>
          <p>
My install uses the <a href="http://www.go-mono.com/daily">latest Mono bits</a> and
a primitive web server (XSP), which hosts the Mono ASP.NET runtime. 
</p>
          <p>
I tested this stuff using <a href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=65a1d4ea-0f7a-41bd-8494-e916ebc4159c">WebServicesStudio</a>,
which can generate proxies and SOAP messages. I used .NET web service implementation
to generate the proxy and then sent SOAP messages to Mono implementation. 
</p>
          <p>
All in all, I'm quite surprised. Mono's latest development advances are a huge
step forward. 
</p>
        </body>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3cbde045-3c04-4cb3-aed4-1184edd2db26" />
      </body>
      <title>Mono web services</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,3cbde045-3c04-4cb3-aed4-1184edd2db26.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,3cbde045-3c04-4cb3-aed4-1184edd2db26.aspx</link>
      <pubDate>Sun, 03 Aug 2003 13:29:18 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;
I managed to get web services up and running on my Mono machine. &lt;a href="http://www.request-response.com/images/mono2.png"&gt;This&lt;/a&gt; proves
it. 
&lt;/p&gt;
&lt;p&gt;
What I dislike about the current implementation is obvious: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
There's no WSDL generator yet (can't use wsdl.exe or any other web services proxy
generator tools) 
&lt;/li&gt;
&lt;li&gt;
There's no proxy class generator yet (wsdl.exe in our world) 
&lt;/li&gt;
&lt;li&gt;
URLs seem to be case sensitive 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
My install uses the &lt;a href="http://www.go-mono.com/daily"&gt;latest Mono bits&lt;/a&gt; and
a primitive web server (XSP), which hosts the Mono ASP.NET runtime. 
&lt;/p&gt;
&lt;p&gt;
I tested this stuff using&amp;#160;&lt;a href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=65a1d4ea-0f7a-41bd-8494-e916ebc4159c"&gt;WebServicesStudio&lt;/a&gt;,
which can generate&amp;#160;proxies and SOAP messages. I used .NET web service implementation
to generate the proxy and then sent SOAP messages to Mono implementation. 
&lt;/p&gt;
&lt;p&gt;
All in all, I'm quite surprised. Mono's latest&amp;#160;development advances are a huge
step forward. 
&lt;/p&gt;
&lt;/body&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3cbde045-3c04-4cb3-aed4-1184edd2db26" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,3cbde045-3c04-4cb3-aed4-1184edd2db26.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=497cd04a-1fe1-43a3-b50b-8bcf80e18378</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,497cd04a-1fe1-43a3-b50b-8bcf80e18378.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,497cd04a-1fe1-43a3-b50b-8bcf80e18378.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=497cd04a-1fe1-43a3-b50b-8bcf80e18378</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <body xmlns="http://www.w3.org/1999/xhtml">
          <p>
It seems that it is that time of year again. Sun started another <a href="http://news.com.com/2100-1013_3-5055658.html?tag=fd_top">web
services attack</a> by releasing competing stack of standards. 
</p>
          <p>
Eventually we will drown in web services specs. History is evidently repeating itself.
We're going down the COM/CORBA route. 
</p>
        </body>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=497cd04a-1fe1-43a3-b50b-8bcf80e18378" />
      </body>
      <title>A mess</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,497cd04a-1fe1-43a3-b50b-8bcf80e18378.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,497cd04a-1fe1-43a3-b50b-8bcf80e18378.aspx</link>
      <pubDate>Mon, 28 Jul 2003 19:16:24 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;
It seems that it is that time of year again. Sun started another &lt;a href="http://news.com.com/2100-1013_3-5055658.html?tag=fd_top"&gt;web
services attack&lt;/a&gt; by releasing competing stack of standards. 
&lt;/p&gt;
&lt;p&gt;
Eventually we will drown in web services specs. History is evidently repeating itself.
We're going down the COM/CORBA route. 
&lt;/p&gt;
&lt;/body&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=497cd04a-1fe1-43a3-b50b-8bcf80e18378" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,497cd04a-1fe1-43a3-b50b-8bcf80e18378.aspx</comments>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=0b64c982-822d-434e-b6ae-7f7df0519f82</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,0b64c982-822d-434e-b6ae-7f7df0519f82.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,0b64c982-822d-434e-b6ae-7f7df0519f82.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0b64c982-822d-434e-b6ae-7f7df0519f82</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <body xmlns="http://www.w3.org/1999/xhtml">
          <p>
Based on <a href="http://www.request-response.com/permalink.aspx/57f09c86-34ab-4ee9-8172-205cf3ca4a3c">this</a> and <a href="http://staff.newtelligence.net/clemensv/permalink.aspx?guid=17e6df2f-48cc-4fb0-8e83-15f4bc96c330">this</a> I just
wrote a web service, which enables RSS URL lookup for web logs registered at <a href="http://uddi.microsoft.com">UDDI</a>. 
</p>
          <p>
It should be simple to integrate this into current RSS aggregators. Email me for code. 
</p>
          <p>
Web service URL: <a href="http://www.request-response.com/webservices/rssquery/rssquery.asmx">http://www.request-response.com/webservices/rssquery/rssquery.asmx</a></p>
          <p>
There are two metods. One returns an RSS URL based on UDDI service key. One returns
an RSS URL based on UDDI service name. If multiple versions of RSS feeds are found,
service looks for RSS 2.0 feed first. Then RSS 1.0, then RSS 0.9x. It returns '-1'
if no feed is found. 
</p>
          <p>
Web service does dynamic queries against Microsoft's UDDI server <a href="http://uddi.microsoft.com/inquire">inquire
API</a>. 
</p>
        </body>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=0b64c982-822d-434e-b6ae-7f7df0519f82" />
      </body>
      <title>Querying RSS URLs on UDDI</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,0b64c982-822d-434e-b6ae-7f7df0519f82.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,0b64c982-822d-434e-b6ae-7f7df0519f82.aspx</link>
      <pubDate>Thu, 24 Jul 2003 14:45:33 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;
Based on &lt;a href="http://www.request-response.com/permalink.aspx/57f09c86-34ab-4ee9-8172-205cf3ca4a3c"&gt;this&lt;/a&gt; and &lt;a href="http://staff.newtelligence.net/clemensv/permalink.aspx?guid=17e6df2f-48cc-4fb0-8e83-15f4bc96c330"&gt;this&lt;/a&gt; I&amp;#160;just
wrote a web service, which enables RSS URL lookup for web logs registered at &lt;a href="http://uddi.microsoft.com"&gt;UDDI&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
It should be simple to integrate this into current RSS aggregators. Email me for code. 
&lt;/p&gt;
&lt;p&gt;
Web service URL: &lt;a href="http://www.request-response.com/webservices/rssquery/rssquery.asmx"&gt;http://www.request-response.com/webservices/rssquery/rssquery.asmx&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
There are two metods. One returns an RSS URL based on UDDI service key. One returns
an RSS URL based on UDDI service name. If multiple versions of RSS feeds are found,
service looks for RSS 2.0 feed first. Then RSS 1.0, then RSS 0.9x. It returns '-1'
if no feed is found. 
&lt;/p&gt;
&lt;p&gt;
Web service&amp;#160;does&amp;#160;dynamic queries&amp;#160;against Microsoft's UDDI server &lt;a href="http://uddi.microsoft.com/inquire"&gt;inquire
API&lt;/a&gt;. 
&lt;/p&gt;
&lt;/body&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=0b64c982-822d-434e-b6ae-7f7df0519f82" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,0b64c982-822d-434e-b6ae-7f7df0519f82.aspx</comments>
      <category>RSS</category>
      <category>Web Services</category>
      <category>XML</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=7e506ac2-55e6-496b-b04d-c4a8a3663b8d</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,7e506ac2-55e6-496b-b04d-c4a8a3663b8d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,7e506ac2-55e6-496b-b04d-c4a8a3663b8d.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7e506ac2-55e6-496b-b04d-c4a8a3663b8d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <body xmlns="http://www.w3.org/1999/xhtml">
          <p>
Clemens <a href="http://staff.newtelligence.net/clemensv/permalink.aspx?guid=760357bb-fda2-497c-987b-6c49bd4b9fc1">updates</a> his <a href="http://staff.newtelligence.net/playground/clemensv/rssinuddi/rss_in_uddi.aspx">OPML
list</a>. 
</p>
          <p>
For those of you who thought his web site isn't working, here's a hint: Wait. 
</p>
          <p>
Errr, no more waiting (courtesy of .NET threading model and Clemens). 
</p>
          <p>
When is <a href="http://www.rassoc.com/gregr/weblog/">Greg</a> going to include this
one into the <a href="http://www.newsgator.com">product I'm using right now</a>? It
would be great if it got into <a href="http://www.rassoc.com/gregr/weblog/archive.aspx?post=629">version
1.3</a> feature list. 
</p>
        </body>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=7e506ac2-55e6-496b-b04d-c4a8a3663b8d" />
      </body>
      <title>The list (continued)</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,7e506ac2-55e6-496b-b04d-c4a8a3663b8d.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,7e506ac2-55e6-496b-b04d-c4a8a3663b8d.aspx</link>
      <pubDate>Thu, 24 Jul 2003 11:45:00 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;
Clemens &lt;a href="http://staff.newtelligence.net/clemensv/permalink.aspx?guid=760357bb-fda2-497c-987b-6c49bd4b9fc1"&gt;updates&lt;/a&gt; his &lt;a href="http://staff.newtelligence.net/playground/clemensv/rssinuddi/rss_in_uddi.aspx"&gt;OPML
list&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
For those of you who thought&amp;#160;his web site isn't working, here's a hint: Wait. 
&lt;/p&gt;
&lt;p&gt;
Errr, no more waiting (courtesy of .NET threading model and Clemens). 
&lt;/p&gt;
&lt;p&gt;
When is &lt;a href="http://www.rassoc.com/gregr/weblog/"&gt;Greg&lt;/a&gt; going to include this
one into the &lt;a href="http://www.newsgator.com"&gt;product I'm using right now&lt;/a&gt;? It
would be great if it got into &lt;a href="http://www.rassoc.com/gregr/weblog/archive.aspx?post=629"&gt;version
1.3&lt;/a&gt; feature list. 
&lt;/p&gt;
&lt;/body&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=7e506ac2-55e6-496b-b04d-c4a8a3663b8d" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,7e506ac2-55e6-496b-b04d-c4a8a3663b8d.aspx</comments>
      <category>RSS</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>https://www.request-response.com/blog/Trackback.aspx?guid=3cbfc81e-ac22-4dd2-9833-8c90379b8488</trackback:ping>
      <pingback:server>https://www.request-response.com/blog/pingback.aspx</pingback:server>
      <pingback:target>https://www.request-response.com/blog/PermaLink,guid,3cbfc81e-ac22-4dd2-9833-8c90379b8488.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>https://www.request-response.com/blog/CommentView,guid,3cbfc81e-ac22-4dd2-9833-8c90379b8488.aspx</wfw:comment>
      <wfw:commentRss>https://www.request-response.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3cbfc81e-ac22-4dd2-9833-8c90379b8488</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <body xmlns="http://www.w3.org/1999/xhtml">
          <p>
Via email: 
</p>
          <p>
            <em>Thank you for contacting Microsoft.com.  
<br />
We have forwarded your mail to the appropriate Microsoft group for further review. 
Additional information may be required to assist you.</em>
          </p>
          <p>
            <em>By taking the time to write, you are helping us provide the best possible products
and services.</em>
          </p>
          <p>
            <em>Thanks again!</em>
          </p>
          <p>
            <em>Ampee<br />
Microsoft.com Customer Support</em>
          </p>
          <p>
Glad to be of any help. I just want to get <a href="http://uddi.microsoft.com/policies/default.aspx#Publishing">UDDI
level 2</a> status. We have more than four services, which we would like to register.
InfoPath demos would go through much smoother... 
</p>
          <p>
[Note: Who/What is Ampee?] 
</p>
        </body>
        <img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3cbfc81e-ac22-4dd2-9833-8c90379b8488" />
      </body>
      <title>UDDI team responds</title>
      <guid isPermaLink="false">https://www.request-response.com/blog/PermaLink,guid,3cbfc81e-ac22-4dd2-9833-8c90379b8488.aspx</guid>
      <link>https://www.request-response.com/blog/PermaLink,guid,3cbfc81e-ac22-4dd2-9833-8c90379b8488.aspx</link>
      <pubDate>Wed, 23 Jul 2003 14:57:04 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;
Via email: 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Thank you for contacting Microsoft.com.&amp;#160; 
&lt;br /&gt;
We have forwarded your mail to the appropriate Microsoft group for further review.&amp;#160;
Additional information may be required to assist you.&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;By taking the time to write, you are helping us provide the best possible products
and services.&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Thanks again!&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Ampee&lt;br /&gt;
Microsoft.com Customer Support&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
Glad to be of any help. I just want to get&amp;#160;&lt;a href="http://uddi.microsoft.com/policies/default.aspx#Publishing"&gt;UDDI
level 2&lt;/a&gt; status. We have more than four services, which we would like to register.
InfoPath demos would go through much smoother... 
&lt;/p&gt;
&lt;p&gt;
[Note: Who/What is Ampee?] 
&lt;/p&gt;
&lt;/body&gt;
&lt;img width="0" height="0" src="https://www.request-response.com/blog/aggbug.ashx?id=3cbfc81e-ac22-4dd2-9833-8c90379b8488" /&gt;</description>
      <comments>https://www.request-response.com/blog/CommentView,guid,3cbfc81e-ac22-4dd2-9833-8c90379b8488.aspx</comments>
      <category>Web Services</category>
    </item>
  </channel>
</rss>