<?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:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Scott's Breeze Blog - RFID, BizTalk  - Cloud Services</title>
    <link>http://blogs.breeze.net/scotts/</link>
    <description>...and everything in between</description>
    <language>en-us</language>
    <copyright>Breeze Training</copyright>
    <lastBuildDate>Thu, 02 Apr 2009 02:24:56 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>scotts@breezetraining.com.au</managingEditor>
    <webMaster>scotts@breezetraining.com.au</webMaster>
    <item>
      <trackback:ping>http://blogs.breeze.net/scotts/Trackback.aspx?guid=7ecf7283-0313-4c22-beb9-12d9855e5bb8</trackback:ping>
      <pingback:server>http://blogs.breeze.net/scotts/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.breeze.net/scotts/PermaLink,guid,7ecf7283-0313-4c22-beb9-12d9855e5bb8.aspx</pingback:target>
      <dc:creator>Scott Scovell</dc:creator>
      <wfw:comment>http://blogs.breeze.net/scotts/CommentView,guid,7ecf7283-0313-4c22-beb9-12d9855e5bb8.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.breeze.net/scotts/SyndicationService.asmx/GetEntryCommentsRss?guid=7ecf7283-0313-4c22-beb9-12d9855e5bb8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In a (not so recent) post, I walked through the steps to get your BizTalk Server 2006
R2+ Orchestrations exposed to the Cloud. See <a href="http://blogs.breezetraining.com.au/scotts/2008/11/28/ExposingBizTalkOrchestrationsToTheCloud.aspx" target="_blank">Exposing
BizTalk Orchestrations to the Cloud</a>. With the release of the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8D1D1D5E-1332-4186-B33F-26D053759E49&amp;displaylang=en" target="_blank">Microsoft
.NET Services SDK (March 2009 CTP)</a> this week, you will find your existing .NET
Services endpoints no longer valid.
</p>
        <p>
Here's how to resolve the issue.
</p>
        <p>
At the moment your existing .NET Services endpoints are in the form: 
</p>
        <blockquote>
          <p>
            <font face="Courier New" color="#800000" size="2">sb://servicebus.windows.net/services/[solution
name]/[service name]/</font>
          </p>
        </blockquote>
        <p>
This has now been changed to: 
</p>
        <blockquote>
          <p>
            <font face="Courier New" color="#800000" size="2">sb://[solution name].servicebus.windows.net/[service
name]/</font>
          </p>
        </blockquote>
        <p>
          <em>Note: you can still register your service hierarchy as before (e.g. sb://.../[service
group]/[service name]) but for simplicity I have just used [service name] in the URI's
above.</em>
        </p>
        <p>
So, even if you followed Microsoft's advise and coded your service endpoints URI's
this way: 
</p>
        <blockquote>
          <p>
            <font size="2">
              <font face="Courier New">
                <font color="#008080">Uri</font> address =
new <font color="#008080">Uri</font>(<font color="#008080">String</font>.Format(<font color="#800000">"sb://{0}/services/{1}/{2}"</font>, <font color="#008080">ServiceBusEnvironment</font>.DefaultRelayHostName,
solutionName, serviceName));</font>
            </font>
          </p>
        </blockquote>
        <p>
that didn't get you out of trouble when the URI change was released. We are now encouraged
to use the following when generating endpoint addresses in code: 
</p>
        <blockquote>
          <p>
            <font size="2">
              <font face="Courier New">
                <font color="#008080">Uri</font> address = <font color="#008080">ServiceBusEnvironment</font>.CreateServiceUri(<font color="#800000">"sb"</font>,
solutionName, serviceName);</font>
            </font>
          </p>
        </blockquote>
        <p>
This will give us an address in the new structure and protect us from any future changes
(but we heard that somewhere before didn't we). Also, be aware that (as of time of
posting) the published services feed is not listing your services correctly (but they
are still accessible). Your new published services feed will also be: 
</p>
        <blockquote>
          <p>
            <font face="Courier New" color="#800000" size="2">http://[solution name].servicebus.windows.net/</font>
          </p>
        </blockquote>
        <p>
In the coming days, the team at Breeze will be walking through the new goodies the
March CTP brings so look out for future posts (of particular interest is the queuing
and routing features we have now!). <img width="0" height="0" src="http://blogs.breeze.net/scotts/aggbug.ashx?id=7ecf7283-0313-4c22-beb9-12d9855e5bb8" /></p>
      </body>
      <title>Breaking changes with Microsoft .NET Services SDK (March 2009 CTP)</title>
      <guid isPermaLink="false">http://blogs.breeze.net/scotts/PermaLink,guid,7ecf7283-0313-4c22-beb9-12d9855e5bb8.aspx</guid>
      <link>http://blogs.breeze.net/scotts/2009/04/02/BreakingChangesWithMicrosoftNETServicesSDKMarch2009CTP.aspx</link>
      <pubDate>Thu, 02 Apr 2009 02:24:56 GMT</pubDate>
      <description>&lt;p&gt;
In a (not so recent) post, I walked through the steps to get your BizTalk Server 2006
R2+ Orchestrations exposed to the Cloud. See &lt;a href="http://blogs.breezetraining.com.au/scotts/2008/11/28/ExposingBizTalkOrchestrationsToTheCloud.aspx" target="_blank"&gt;Exposing
BizTalk Orchestrations to the Cloud&lt;/a&gt;. With the release of the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8D1D1D5E-1332-4186-B33F-26D053759E49&amp;amp;displaylang=en" target="_blank"&gt;Microsoft
.NET Services SDK (March 2009 CTP)&lt;/a&gt; this week, you will find your existing .NET
Services endpoints no longer valid.
&lt;/p&gt;
&lt;p&gt;
Here's how to resolve the issue.
&lt;/p&gt;
&lt;p&gt;
At the moment your existing .NET Services endpoints are in the form: 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Courier New" color="#800000" size="2"&gt;sb://servicebus.windows.net/services/[solution
name]/[service name]/&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
This has now been changed to: &lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Courier New" color="#800000" size="2"&gt;sb://[solution name].servicebus.windows.net/[service
name]/&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;em&gt;Note: you can still register your service hierarchy as before (e.g. sb://.../[service
group]/[service name]) but for simplicity I have just used [service name] in the URI's
above.&lt;/em&gt; 
&lt;p&gt;
So, even if you followed Microsoft's advise and coded your service endpoints URI's
this way: &lt;blockquote&gt; 
&lt;p&gt;
&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#008080"&gt;Uri&lt;/font&gt; address =
new &lt;font color="#008080"&gt;Uri&lt;/font&gt;(&lt;font color="#008080"&gt;String&lt;/font&gt;.Format(&lt;font color="#800000"&gt;"sb://{0}/services/{1}/{2}"&lt;/font&gt;, &lt;font color="#008080"&gt;ServiceBusEnvironment&lt;/font&gt;.DefaultRelayHostName,
solutionName, serviceName));&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
that didn't get you out of trouble when the URI change was released. We are now encouraged
to use the following when generating endpoint addresses in code: &lt;blockquote&gt; 
&lt;p&gt;
&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#008080"&gt;Uri&lt;/font&gt; address = &lt;font color="#008080"&gt;ServiceBusEnvironment&lt;/font&gt;.CreateServiceUri(&lt;font color="#800000"&gt;"sb"&lt;/font&gt;,
solutionName, serviceName);&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
This will give us an address in the new structure and protect us from any future changes
(but we heard that somewhere before didn't we). Also, be aware that (as of time of
posting) the published services feed is not listing your services correctly (but they
are still accessible). Your new published services feed will also be: &lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Courier New" color="#800000" size="2"&gt;http://[solution name].servicebus.windows.net/&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
In the coming days, the team at Breeze will be walking through the new goodies the
March CTP brings so look out for future posts (of particular interest is the queuing
and routing features we have now!). &lt;img width="0" height="0" src="http://blogs.breeze.net/scotts/aggbug.ashx?id=7ecf7283-0313-4c22-beb9-12d9855e5bb8" /&gt;</description>
      <comments>http://blogs.breeze.net/scotts/CommentView,guid,7ecf7283-0313-4c22-beb9-12d9855e5bb8.aspx</comments>
      <category>BizTalk General</category>
      <category>Cloud Services</category>
    </item>
    <item>
      <trackback:ping>http://blogs.breeze.net/scotts/Trackback.aspx?guid=09631587-956f-40e5-a76e-09f41cd20fcf</trackback:ping>
      <pingback:server>http://blogs.breeze.net/scotts/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.breeze.net/scotts/PermaLink,guid,09631587-956f-40e5-a76e-09f41cd20fcf.aspx</pingback:target>
      <dc:creator>Scott Scovell</dc:creator>
      <wfw:comment>http://blogs.breeze.net/scotts/CommentView,guid,09631587-956f-40e5-a76e-09f41cd20fcf.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.breeze.net/scotts/SyndicationService.asmx/GetEntryCommentsRss?guid=09631587-956f-40e5-a76e-09f41cd20fcf</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This week I gave a presentation to the Sydney BizTalk User Group on <strong>(Biz)Talking
to the Cloud</strong>. I showed how we can quickly and easily configure a BizTalk
Receive Port to consume services hosted in the cloud. In the demo, we configured BizTalk
to participate in a multicast events scenario.
</p>
        <p>
I have been playing further with BizTalk and Cloud services and in this post I will
demonstrate how to expose BizTalk Orchestrations to the Cloud. To make it easy for
you to build this on your own environment, I have used the now famous (or infamous)
EchoService as the basis of this demo. This allows you to use the existing Microsoft
.NET Services SDK sample to call the BizTalk Orchestration through the cloud.
</p>
        <p>
          <strong>Before You Begin</strong>
        </p>
        <ol>
          <li>
Sign-up to Microsoft .NET Services and create your Solution.</li>
          <li>
Download the Microsoft .NET Services SDK and install on your BizTalk Server 2006 R2
development environment.<br /><em>Note: Nothing more is needed as far as BTS is concerned. I am pleased Microsoft
is making good on ensuring developers can use existing skills and technologies to
get started with cloud services. Furthermore, we can be fairly comfortable that playing
around with this stuff is not going to break or render our existing dev environment
useless. Credit where credit is due.</em></li>
        </ol>
        <p>
          <strong>BizTalk Development<br /><br /></strong>In this step we will create a simple orchestration that receives a generic
message, pulls the "echo" text out, creates the response message, and sends it back
out the two-way port. I have used System.Xml.XmlDocument types avoiding the need to
create schemas and simplifying the demo.
</p>
        <ol>
          <li>
In Visual Studio 2005, create a new Empty BizTalk project.</li>
          <li>
Go ahead and set your Assembly Key File and BizTalk Application project settings.
(I called my BizTalk App BizTalk Services as we will see later on)</li>
          <li>
Add a new Orchestration to the project.</li>
          <li>
Create the following messages:<br /></li>
        </ol>
        <table cellspacing="0" cellpadding="2" width="400" border="0">
          <tbody>
            <tr>
              <td valign="top" width="200">
                <strong>Name</strong>
              </td>
              <td valign="top" width="200">
                <strong>Type</strong>
              </td>
            </tr>
            <tr>
              <td valign="top" width="200">
msgRequest</td>
              <td valign="top" width="200">
System.Xml.XmlDocument</td>
            </tr>
            <tr>
              <td valign="top" width="200">
msgResponse</td>
              <td valign="top" width="200">
System.Xml.XmlDocument</td>
            </tr>
          </tbody>
        </table>
        <br />
        <li>
Create the following variables:<br /></li>
        <table cellspacing="0" cellpadding="2" width="400" border="0">
          <tbody>
            <tr>
              <td valign="top" width="200">
                <strong>Name</strong>
              </td>
              <td valign="top" width="200">
                <strong>Type</strong>
              </td>
            </tr>
            <tr>
              <td valign="top" width="200">
strText</td>
              <td valign="top" width="200">
string</td>
            </tr>
            <tr>
              <td valign="top" width="200">
strResponse</td>
              <td valign="top" width="200">
string</td>
            </tr>
            <tr>
              <td valign="top" width="200">
xmlDoc</td>
              <td valign="top" width="200">
System.Xml.XmlDocument</td>
            </tr>
          </tbody>
        </table>
        <br />
        <li>
Add the following shapes to the design surface<br /><br /><a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/orchestrationshapes.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="356" alt="orchestration shapes" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/orchestrationshapes_thumb.png" width="560" border="0" /></a><br /></li>
        <li>
In the Message Assignment shape enter the following code to construct the response
message:<br /></li>
        <blockquote>
          <pre class="csharpcode">
            <span class="rem">// Retrieve the text sent in
the request</span> strText = xpath(msgRequest, <span class="str">"string(//*[local-name()='text'])"</span>); <span class="rem">//
Construct the response</span> strResponse = System.String.Format(<span class="str">"&lt;EchoResponse
xmlns=\"http://samples.microsoft.com/ServiceModel/Relay/\"&gt;<br />
&lt;EchoResult&gt;{0}&lt;/EchoResult&gt;&lt;/EchoResponse&gt;"</span>, <span class="str">"BizTalk:
"</span> + strText); <span class="rem">// Create the response document</span> xmlDoc.LoadXml(strResponse); <span class="rem">//
Assign the response message variable</span> msgResponse = xmlDoc;<br /><br /></pre>
          <pre class="csharpcode">
            <br />
            <br />
            <br />
            <br />
 </pre>
        </blockquote>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <li>
Now add a Two-Way port setting the port Binding to <em>Specify Later</em> and the
Type Modifier to <em>Public</em>.<br /><em>Note: As we will be binding to a physical receive port, operation names are not
important here.</em></li>
        <li>
Wire up the port operations and don't forget to set the Activate property of the Receive
shape <img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif" /></li>
        <li>
Build and deploy your project.<br /></li>
        <p>
          <strong>BizTalk Application Configuration</strong>
        </p>
        <p>
In this step we will configure a WCF-Custom receive port to expose our newly created
orchestration to the cloud.
</p>
        <ol>
          <li>
In BizTalk Server Administration Console, navigate to the BizTalk Application you
just deployed to (mine was called BizTalk Services).</li>
          <li>
Create a new Request-Response receive port.</li>
          <li>
Add a new receive location and set the Transport type to WCF-Custom.<br /><br /><a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/newrecvloc.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="316" alt="new recv loc" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/newrecvloc_thumb.png" width="394" border="0" /></a><br /></li>
          <li>
Configure the WCF-Custom adapter.</li>
          <li>
Set the EndPoint Address to: 
<br /><br /><strong>        sb://servicebus.windows.net/services/[your
solution name]/EchoService/</strong><br /></li>
          <li>
Set the Binding Type to NetTcpRelayBinding<br /><em>Note: This is one of the new bindings added when you installed the Microsoft .NET
Services SDK<br /><br /></em><a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/nettcprelaybinding.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="526" alt="nettcprelaybinding" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/nettcprelaybinding_thumb.png" width="396" border="0" /></a><br /></li>
          <li>
On the Behaviors tab, add a new behavior extension called <em>transportClientEndpointBehavior</em> to
the EndPointBehavior node.</li>
          <li>
Set the credentialType to UserNamePassword and enter your solution credentials on
the UserNamePassword element of the ClientCredentials node.<br /><em>Note: If you are using Windows CardSpace instead, set the transportClientEndpointBehavior
to use it here instead.</em><br /><br /><a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/transportclientbehavior.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="418" alt="transport client behavior" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/transportclientbehavior_thumb.png" width="392" border="0" /></a><br /></li>
          <li>
Click Apply and verify no errors occurred with your WCF-Custom adapter configuration.</li>
          <li>
Click OK to close the Adapter configuration dialog.</li>
          <li>
Set the Receive Handler to your BizTalk Server Application host.</li>
          <li>
Leave the Receive and Send piplines as PassThru (as we are not requiring xml parsing
of the messages we are sending and receiving).</li>
          <li>
Click OK to save the new receive location.</li>
          <li>
Do likewise for the receive port.</li>
          <li>
Now, configure your orchestration bindings and start the BizTalk application.</li>
        </ol>
        <p>
          <strong>Verify the Service is Exposed to the Cloud</strong>
        </p>
        <p>
In this step we will browse to your Microsoft .NET Services service registry feed
and verify your service is exposed to the cloud.
</p>
        <ol>
          <li>
Launch Internet Explorer and browse to the following URL:<br /><br /><strong>     http://servicebus.windows.net/services/[your solution
name]/</strong><br /></li>
          <li>
You should now see your service endpoint listed in the Atom feed.</li>
        </ol>
        <p>
          <strong>Test Your Solution</strong>
        </p>
        <ol>
          <li>
In Windows Explorer, navigate to the samples folder under the install folder for Microsoft
.NET Services SDK<br /><em>Note: If you installed to the default folder it should be C:\Program Files\Microsoft
.NET Services (Nov 2008 CTP) SDK\Samples</em></li>
          <li>
Locate the ServiceBus\GettingStarted\Echo sample and open your flavour of choice (C#/VB)</li>
          <li>
Build the Solution using VS 2008 
</li>
          <li>
Run the Client.exe</li>
          <li>
Enter your Solution name and password.</li>
          <li>
Enter some text to send to your service.</li>
          <li>
Verify the service response includes BizTalk: &lt;your echo text&gt;<br /><br /><a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/testing.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="125" alt="testing" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/testing_thumb.png" width="388" border="0" /></a></li>
        </ol>
        <p>
          <strong>What did we just do?</strong>
        </p>
        <p>
Using only the new WCF features that were installed in the Microsoft .NET Services
SDK we were able to configure a request-response receive port in BizTalk that exposed
our orchestration to the cloud. This is very cool <img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" />. 
</p>
        <p>
At the very least, we could do away with the orchestration binding and just configure
the receive port to drop messages into the BizTalk MsgBox. We then use content based
routing to route the messages off to our existing orchestrations. 
</p>
        <p>
Think of the times you wanted to expose your BizTalk services to customers and clients
outside your organisation, but had to jump all those hurdles the IT infrastructure
team seams to magically come up with.
</p>
        <p>
This is just the beginning...
</p>
        <img width="0" height="0" src="http://blogs.breeze.net/scotts/aggbug.ashx?id=09631587-956f-40e5-a76e-09f41cd20fcf" />
      </body>
      <title>Exposing BizTalk Orchestrations to the Cloud</title>
      <guid isPermaLink="false">http://blogs.breeze.net/scotts/PermaLink,guid,09631587-956f-40e5-a76e-09f41cd20fcf.aspx</guid>
      <link>http://blogs.breeze.net/scotts/2008/11/28/ExposingBizTalkOrchestrationsToTheCloud.aspx</link>
      <pubDate>Fri, 28 Nov 2008 11:35:49 GMT</pubDate>
      <description>&lt;p&gt;
This week I gave a presentation to the Sydney BizTalk User Group on &lt;strong&gt;(Biz)Talking
to the Cloud&lt;/strong&gt;. I showed how we can quickly and easily configure a BizTalk
Receive Port to consume services hosted in the cloud. In the demo, we configured BizTalk
to participate in a multicast events scenario.
&lt;/p&gt;
&lt;p&gt;
I have been playing further with BizTalk and Cloud services and in this post I will
demonstrate how to expose BizTalk Orchestrations to the Cloud. To make it easy for
you to build this on your own environment, I have used the now famous (or infamous)
EchoService as the basis of this demo. This allows you to use the existing Microsoft
.NET Services SDK sample to call the BizTalk Orchestration through the cloud.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Before You Begin&lt;/strong&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Sign-up to Microsoft .NET Services and create your Solution.&lt;/li&gt;
&lt;li&gt;
Download the Microsoft .NET Services SDK and install on your BizTalk Server 2006 R2
development environment.&lt;br&gt;
&lt;em&gt;Note: Nothing more is needed as far as BTS is concerned. I am pleased Microsoft
is making good on ensuring developers can use existing skills and technologies to
get started with cloud services. Furthermore, we can be fairly comfortable that playing
around with this stuff is not going to break or render our existing dev environment
useless. Credit where credit is due.&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;BizTalk Development&lt;br&gt;
&lt;br&gt;
&lt;/strong&gt;In this step we will create a simple orchestration that receives a generic
message, pulls the "echo" text out, creates the response message, and sends it back
out the two-way port. I have used System.Xml.XmlDocument types avoiding the need to
create schemas and simplifying the demo.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
In Visual Studio 2005, create a new Empty BizTalk project.&lt;/li&gt;
&lt;li&gt;
Go ahead and set your Assembly Key File and BizTalk Application project settings.
(I called my BizTalk App BizTalk Services as we will see later on)&lt;/li&gt;
&lt;li&gt;
Add a new Orchestration to the project.&lt;/li&gt;
&lt;li&gt;
Create the following messages:&lt;br&gt;
&lt;/li&gt;
&lt;table cellspacing="0" cellpadding="2" width="400" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="200"&gt;
&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
msgRequest&lt;/td&gt;
&lt;td valign="top" width="200"&gt;
System.Xml.XmlDocument&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
msgResponse&lt;/td&gt;
&lt;td valign="top" width="200"&gt;
System.Xml.XmlDocument&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;li&gt;
Create the following variables:&lt;br&gt;
&lt;/li&gt;
&lt;table cellspacing="0" cellpadding="2" width="400" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="200"&gt;
&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
strText&lt;/td&gt;
&lt;td valign="top" width="200"&gt;
string&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
strResponse&lt;/td&gt;
&lt;td valign="top" width="200"&gt;
string&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="200"&gt;
xmlDoc&lt;/td&gt;
&lt;td valign="top" width="200"&gt;
System.Xml.XmlDocument&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;li&gt;
Add the following shapes to the design surface&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/orchestrationshapes.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="356" alt="orchestration shapes" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/orchestrationshapes_thumb.png" width="560" border="0"&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
In the Message Assignment shape enter the following code to construct the response
message:&lt;br&gt;
&lt;/li&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Retrieve the text sent in
the request&lt;/span&gt; strText = xpath(msgRequest, &lt;span class="str"&gt;"string(//*[local-name()='text'])"&lt;/span&gt;); &lt;span class="rem"&gt;//
Construct the response&lt;/span&gt; strResponse = System.String.Format(&lt;span class="str"&gt;"&amp;lt;EchoResponse
xmlns=\"http://samples.microsoft.com/ServiceModel/Relay/\"&amp;gt;&lt;br&gt;
&amp;lt;EchoResult&amp;gt;{0}&amp;lt;/EchoResult&amp;gt;&amp;lt;/EchoResponse&amp;gt;"&lt;/span&gt;, &lt;span class="str"&gt;"BizTalk:
"&lt;/span&gt; + strText); &lt;span class="rem"&gt;// Create the response document&lt;/span&gt; xmlDoc.LoadXml(strResponse); &lt;span class="rem"&gt;//
Assign the response message variable&lt;/span&gt; msgResponse = xmlDoc;&lt;br&gt;
&lt;br&gt;
&lt;/pre&gt;&lt;pre class="csharpcode"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&lt;/pre&gt;&lt;/blockquote&gt; &lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;li&gt;
Now add a Two-Way port setting the port Binding to &lt;em&gt;Specify Later&lt;/em&gt; and the
Type Modifier to &lt;em&gt;Public&lt;/em&gt;.&lt;br&gt;
&lt;em&gt;Note: As we will be binding to a physical receive port, operation names are not
important here.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
Wire up the port operations and don't forget to set the Activate property of the Receive
shape &lt;img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif"&gt;
&lt;/li&gt;
&lt;li&gt;
Build and deploy your project.&lt;br&gt;
&lt;/li&gt;&gt;
&lt;p&gt;
&lt;strong&gt;BizTalk Application Configuration&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
In this step we will configure a WCF-Custom receive port to expose our newly created
orchestration to the cloud.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
In BizTalk Server Administration Console, navigate to the BizTalk Application you
just deployed to (mine was called BizTalk Services).&lt;/li&gt;
&lt;li&gt;
Create a new Request-Response receive port.&lt;/li&gt;
&lt;li&gt;
Add a new receive location and set the Transport type to WCF-Custom.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/newrecvloc.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="316" alt="new recv loc" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/newrecvloc_thumb.png" width="394" border="0"&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Configure the WCF-Custom adapter.&lt;/li&gt;
&lt;li&gt;
Set the EndPoint Address to: 
&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb://servicebus.windows.net/services/[your
solution name]/EchoService/&lt;/strong&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Set the Binding Type to NetTcpRelayBinding&lt;br&gt;
&lt;em&gt;Note: This is one of the new bindings added when you installed the Microsoft .NET
Services SDK&lt;br&gt;
&lt;br&gt;
&lt;/em&gt;&lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/nettcprelaybinding.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="526" alt="nettcprelaybinding" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/nettcprelaybinding_thumb.png" width="396" border="0"&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
On the Behaviors tab, add a new behavior extension called &lt;em&gt;transportClientEndpointBehavior&lt;/em&gt; to
the EndPointBehavior node.&lt;/li&gt;
&lt;li&gt;
Set the credentialType to UserNamePassword and enter your solution credentials on
the UserNamePassword element of the ClientCredentials node.&lt;br&gt;
&lt;em&gt;Note: If you are using Windows CardSpace instead, set the transportClientEndpointBehavior
to use it here instead.&lt;/em&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/transportclientbehavior.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="418" alt="transport client behavior" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/transportclientbehavior_thumb.png" width="392" border="0"&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Click Apply and verify no errors occurred with your WCF-Custom adapter configuration.&lt;/li&gt;
&lt;li&gt;
Click OK to close the Adapter configuration dialog.&lt;/li&gt;
&lt;li&gt;
Set the Receive Handler to your BizTalk Server Application host.&lt;/li&gt;
&lt;li&gt;
Leave the Receive and Send piplines as PassThru (as we are not requiring xml parsing
of the messages we are sending and receiving).&lt;/li&gt;
&lt;li&gt;
Click OK to save the new receive location.&lt;/li&gt;
&lt;li&gt;
Do likewise for the receive port.&lt;/li&gt;
&lt;li&gt;
Now, configure your orchestration bindings and start the BizTalk application.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;Verify the Service is Exposed to the Cloud&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
In this step we will browse to your Microsoft .NET Services service registry feed
and verify your service is exposed to the cloud.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Launch Internet Explorer and browse to the following URL:&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://servicebus.windows.net/services/[your solution
name]/&lt;/strong&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
You should now see your service endpoint listed in the Atom feed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;Test Your Solution&lt;/strong&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
In Windows Explorer, navigate to the samples folder under the install folder for Microsoft
.NET Services SDK&lt;br&gt;
&lt;em&gt;Note: If you installed to the default folder it should be C:\Program Files\Microsoft
.NET Services (Nov 2008 CTP) SDK\Samples&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
Locate the ServiceBus\GettingStarted\Echo sample and open your flavour of choice (C#/VB)&lt;/li&gt;
&lt;li&gt;
Build the Solution using VS 2008 
&lt;/li&gt;
&lt;li&gt;
Run the Client.exe&lt;/li&gt;
&lt;li&gt;
Enter your Solution name and password.&lt;/li&gt;
&lt;li&gt;
Enter some text to send to your service.&lt;/li&gt;
&lt;li&gt;
Verify the service response includes BizTalk: &amp;lt;your echo text&amp;gt;&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/testing.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="125" alt="testing" src="http://www.breezetraining.com.au/blogs/scotts/content/binary/ExposingBizTalkOrchestrationstotheCloud_E780/testing_thumb.png" width="388" border="0"&gt;&lt;/a&gt; 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;What did we just do?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Using only the new WCF features that were installed in the Microsoft .NET Services
SDK we were able to configure a request-response receive port in BizTalk that exposed
our orchestration to the cloud. This is very cool &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif"&gt;. 
&lt;/p&gt;
&lt;p&gt;
At the very least, we could do away with the orchestration binding and just configure
the receive port to drop messages into the BizTalk MsgBox. We then use content based
routing to route the messages off to our existing orchestrations. 
&lt;/p&gt;
&lt;p&gt;
Think of the times you wanted to expose your BizTalk services to customers and clients
outside your organisation, but had to jump all those hurdles the IT infrastructure
team seams to magically come up with.
&lt;/p&gt;
&lt;p&gt;
This is just the beginning...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.breeze.net/scotts/aggbug.ashx?id=09631587-956f-40e5-a76e-09f41cd20fcf" /&gt;</description>
      <comments>http://blogs.breeze.net/scotts/CommentView,guid,09631587-956f-40e5-a76e-09f41cd20fcf.aspx</comments>
      <category>BizTalk General</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
  </channel>
</rss>