Utilizing .NET Services in Windows AzureThis might help out some people on the forums. It is cross posted from my blog: <a href="http://blog.philiprichardson.org/2009/05/23/utilizing-the-service-bus-in-windows-azure/">http://blog.philiprichardson.org/2009/05/23/utilizing-the-service-bus-in-windows-azure/</a><br/><br/>I've split it out into three parts here (because of forum post size limits).<br/><br/>Philip Richardson [MSFT]<br/>Lead Program Manager | .NET Services<br/><br/><br/>-----------------------<br/> <h1 style="margin:24pt 0in 0pt"><span style="font-family:Cambria;color:#365f91;font-size:large">Utilizing the Service Bus in Windows Azure</span></h1> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">In this basic tutorial we’ll focus on two basic scenarios:</span></p> <p class=MsoListParagraphCxSpFirst style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in"><span><span><span style="font-family:Calibri;font-size:small">1.</span><span style="font:7pt 'Times New Roman'">       </span></span></span><span style="font-family:Calibri;font-size:small">Service Bus Client in a Windows Azure Web or Worker Role</span></p> <p class=MsoListParagraphCxSpLast style="text-indent:-0.25in;margin:0in 0in 10pt 0.5in"><span><span><span style="font-family:Calibri;font-size:small">2.</span><span style="font:7pt 'Times New Roman'">       </span></span></span><span style="font-family:Calibri;font-size:small">Service Bus Listener in a Windows Azure Worker Role</span></p> <h2 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:medium">Pre-Requisites</span></h2> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">You’ll need to do some basic setup before you start coding. This tutorial assumes you have accounts for Windows Azure and .NET Services, have completed ‘Hello World’ style tutorials and have downloaded and installed all the relevant SDKs.</span></p> <h2 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:medium">Full Trust Code</span></h2> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">.NET Services required Full Trust to run. You’ll need to set the ‘enableNativeCodeExecution’ attribute to be true in the ServiceDefinition.csdef file of your Windows Azure Project.</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">&lt;?</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">xml</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">version</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">1.0</span>&quot;<span style="color:blue"> </span><span style="color:red">encoding</span><span style="color:blue">=</span>&quot;<span style="color:blue">utf-8</span>&quot;<span style="color:blue">?&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">ServiceDefinition</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">name</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">AzureSample</span>&quot;<span style="color:blue"> </span><span style="color:red">xmlns</span><span style="color:blue">=</span>&quot;<span style="color:blue">http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition</span>&quot;<span style="color:blue">&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">WebRole</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">name</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">WebRole</span>&quot;<span style="color:blue"> </span><span style="color:red">enableNativeCodeExecution</span><span style="color:blue">=</span>&quot;<span style="color:blue">true</span>&quot;<span style="color:blue">&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>    </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">InputEndpoints</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>      </span>&lt;!--</span><span style="font-family:'Courier New';color:green;font-size:10pt"> Must use port 80 for http and port 443 for https when running in the cloud </span><span style="font-family:'Courier New';color:blue;font-size:10pt">--&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>      </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">InputEndpoint</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">name</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">HttpIn</span>&quot;<span style="color:blue"> </span><span style="color:red">protocol</span><span style="color:blue">=</span>&quot;<span style="color:blue">http</span>&quot;<span style="color:blue"> </span><span style="color:red">port</span><span style="color:blue">=</span>&quot;<span style="color:blue">80</span>&quot;<span style="color:blue"> /&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>    </span>&lt;/</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">InputEndpoints</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;/</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">WebRole</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">WorkerRole</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">name</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">WorkerRole</span>&quot;<span style="color:blue"> </span><span style="color:red">enableNativeCodeExecution</span><span style="color:blue">=</span>&quot;<span style="color:blue">true</span>&quot;<span style="color:blue">&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;/</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">WorkerRole</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">&lt;/</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">ServiceDefinition</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <h2 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:medium">Service Bus Client</span></h2> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">In this example we’ll create a normal Service Bus Listener and run that on-premise. This Listener will receive messages from the Service Bus and display them in a console window. We’ll also create a small client library which can be run from a Windows Azure Web or Worker role.</span></p> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">Our scenario is a simple one: Imagine you wanted to get real time logging information from your Windows Azure application. Instead of writing to the Windows Azure log API, manually transferring the logs to a blob and then download the data – we’ll write out directly to the Service Bus.</span></p> <h3 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:small">The Listener</span></h3> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">This is a super simple Console Application consisting of 3 files: Program.cs, ILogContract and ILogService. This Listener differs slightly from a regular Service Bus application. It packages Microsoft.ServiceBus.dll directly in its bin (ie. It doesn’t care if you have the SDK or Redist installed) and it sets all the WCF/SB config in code. Becareful: By packaging Microsoft.ServiceBus.dll yourself you are now responsible for servicing (ie. Updating) this dll on any clients you distribute it to. You’ll also note that the User Name, Password and Service Bus URI have been stored in AppSettings.</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">ILogContract.cs</span></em></h4> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Collections.Generic;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">namespace</span><span style="font-family:'Courier New';font-size:10pt"> AzureSample</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>[<span style="color:#2b91af">ServiceContract</span>(Name = <span style="color:#a31515">&quot;ILogContract&quot;</span>, Namespace = <span style="color:#a31515">&quot;http://tempuri.org/&quot;</span>)]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span><span style="color:blue">public</span> <span style="color:blue">interface</span> <span style="color:#2b91af">ILogContract</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span>[<span style="color:#2b91af">OperationContract</span>]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span><span style="color:blue">void</span> WriteToLog(<span style="color:#2b91af">DateTime</span> eventDt, <span style="color:blue">string</span> source, <span style="color:blue">string</span> text);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span><span style="color:blue">public</span> <span style="color:blue">interface</span> <span style="color:#2b91af">ILogChannel</span> : <span style="color:#2b91af">ILogContract</span>, <span style="color:#2b91af">IClientChannel</span> { }</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">LogService.cs</span></em></h4> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Text;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">namespace</span><span style="font-family:'Courier New';font-size:10pt"> AzureSample</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>[<span style="color:#2b91af">ServiceBehavior</span>(Name = <span style="color:#a31515">&quot;LogService&quot;</span>, Namespace = <span style="color:#a31515">&quot;http://tempuri.org/&quot;</span>)]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span><span style="color:blue">class</span> <span style="color:#2b91af">LogService</span>: <span style="color:#2b91af">ILogContract</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span><span style="color:blue">public</span> <span style="color:blue">void</span> WriteToLog(<span style="color:#2b91af">DateTime</span> eventDt, <span style="color:blue">string</span> source, <span style="color:blue">string</span> text)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:blue">string</span>.Format(<span style="color:#a31515">&quot;From {0} at {1}: {2}&quot;</span>, eventDt.ToString(), source, text));</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">}</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">Program.cs</span></em></h4> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Configuration;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel.Description;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceBus;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceBus.Description;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">namespace</span><span style="font-family:'Courier New';font-size:10pt"> AzureSample</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span><span style="color:blue">class</span> <span style="color:#2b91af">Program</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span><span style="color:blue">static</span> <span style="color:blue">void</span> Main(<span style="color:blue">string</span>[] args)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:blue">string</span> endPoint = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;EndPoint&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:blue">string</span> userName = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;UserName&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:blue">string</span> password = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;Password&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">Uri</span> uri = <span style="color:blue">new</span> <span style="color:#2b91af">Uri</span>(endPoint);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">TransportClientEndpointBehavior</span> userNamePasswordServiceBusCredential = <span style="color:blue">new</span> <span style="color:#2b91af">TransportClientEndpointBehavior</span>();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>userNamePasswordServiceBusCredential.CredentialType = <span style="color:#2b91af">TransportClientCredentialType</span>.UserNamePassword;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>userNamePasswordServiceBusCredential.Credentials.UserName.UserName = userName;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>userNamePasswordServiceBusCredential.Credentials.UserName.Password = password;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">ServiceHost</span> host = <span style="color:blue">new</span> <span style="color:#2b91af">ServiceHost</span>(<span style="color:blue">typeof</span>(<span style="color:#2b91af">LogService</span>), uri);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">ContractDescription</span> contractDescription = <span style="color:#2b91af">ContractDescription</span>.GetContract(<span style="color:blue">typeof</span>(<span style="color:#2b91af">ILogContract</span>), <span style="color:blue">typeof</span>(<span style="color:#2b91af">LogService</span>));</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">ServiceEndpoint</span> serviceEndPoint = <span style="color:blue">new</span> <span style="color:#2b91af">ServiceEndpoint</span>(contractDescription);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>serviceEndPoint.Address = <span style="color:blue">new</span> <span style="color:#2b91af">EndpointAddress</span>(uri);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>     </span><span>       </span>serviceEndPoint.Binding = <span style="color:blue">new</span> <span style="color:#2b91af">NetTcpRelayBinding</span>();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>serviceEndPoint.Behaviors.Add(userNamePasswordServiceBusCredential);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>host.Description.Endpoints.Add(serviceEndPoint);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>host.Open();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#2b91af">String</span>.Format(<span style="color:#a31515">&quot;Listening at: {0}&quot;</span>, endPoint));</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">&quot;Press [Enter] to exit&quot;</span>);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">Console</span>.ReadLine();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>host.Close();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">}</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">App.config</span></em></h4> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">&lt;?</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">xml</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">version</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">1.0</span>&quot;<span style="color:blue"> </span><span style="color:red">encoding</span><span style="color:blue">=</span>&quot;<span style="color:blue">utf-8</span>&quot;<span style="color:blue"> ?&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">configuration</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">appSettings</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>    </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">add</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">key</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">UserName</span>&quot;<span style="color:blue"> </span><span style="color:red">value</span><span style="color:blue">=</span>&quot;<span style="color:blue">MY SOLUTION NAME</span>&quot;<span style="color:blue">/&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>    </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">add</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">key</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">Password</span>&quot;<span style="color:blue"> </span><span style="color:red">value</span><span style="color:blue">=</span>&quot;<span style="color:blue">MY PASSWORD</span>&quot;<span style="color:blue">/&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>    </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">add</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">key</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">EndPoint</span>&quot;<span style="color:blue"> </span><span style="color:red">value</span><span style="color:blue">=</span>&quot;<span style="color:blue">sb://mysolutionname.servicebus.windows.net/sample/log/</span>&quot;<span style="color:blue">/&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;/</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">appSettings</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="line-height:115%;font-family:'Courier New';color:blue;font-size:10pt">&lt;/</span><span style="line-height:115%;font-family:'Courier New';color:#a31515;font-size:10pt">configuration</span><span style="line-height:115%;font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <hr class=sig> This posting is provided &quot;AS IS&quot; with no warranties, and confers no rights.© 2009 Microsoft Corporation. All rights reserved.Thu, 19 Nov 2009 20:15:09 Z7bf74134-673e-4139-8c0c-5dab7a726bc7http://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#7bf74134-673e-4139-8c0c-5dab7a726bc7http://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#7bf74134-673e-4139-8c0c-5dab7a726bc7Philip Richardson [MSFT]http://social.msdn.microsoft.com/Profile/en-US/?user=Philip%20Richardson%20%5bMSFT%5dUtilizing .NET Services in Windows AzureThis might help out some people on the forums. It is cross posted from my blog: <a href="http://blog.philiprichardson.org/2009/05/23/utilizing-the-service-bus-in-windows-azure/">http://blog.philiprichardson.org/2009/05/23/utilizing-the-service-bus-in-windows-azure/</a><br/><br/>I've split it out into three parts here (because of forum post size limits).<br/><br/>Philip Richardson [MSFT]<br/>Lead Program Manager | .NET Services<br/><br/><br/>-----------------------<br/> <h1 style="margin:24pt 0in 0pt"><span style="font-family:Cambria;color:#365f91;font-size:large">Utilizing the Service Bus in Windows Azure</span></h1> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">In this basic tutorial we’ll focus on two basic scenarios:</span></p> <p class=MsoListParagraphCxSpFirst style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in"><span><span><span style="font-family:Calibri;font-size:small">1.</span><span style="font:7pt 'Times New Roman'">       </span></span></span><span style="font-family:Calibri;font-size:small">Service Bus Client in a Windows Azure Web or Worker Role</span></p> <p class=MsoListParagraphCxSpLast style="text-indent:-0.25in;margin:0in 0in 10pt 0.5in"><span><span><span style="font-family:Calibri;font-size:small">2.</span><span style="font:7pt 'Times New Roman'">       </span></span></span><span style="font-family:Calibri;font-size:small">Service Bus Listener in a Windows Azure Worker Role</span></p> <h2 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:medium">Pre-Requisites</span></h2> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">You’ll need to do some basic setup before you start coding. This tutorial assumes you have accounts for Windows Azure and .NET Services, have completed ‘Hello World’ style tutorials and have downloaded and installed all the relevant SDKs.</span></p> <h2 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:medium">Full Trust Code</span></h2> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">.NET Services required Full Trust to run. You’ll need to set the ‘enableNativeCodeExecution’ attribute to be true in the ServiceDefinition.csdef file of your Windows Azure Project.</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">&lt;?</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">xml</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">version</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">1.0</span>&quot;<span style="color:blue"> </span><span style="color:red">encoding</span><span style="color:blue">=</span>&quot;<span style="color:blue">utf-8</span>&quot;<span style="color:blue">?&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">ServiceDefinition</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">name</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">AzureSample</span>&quot;<span style="color:blue"> </span><span style="color:red">xmlns</span><span style="color:blue">=</span>&quot;<span style="color:blue">http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition</span>&quot;<span style="color:blue">&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">WebRole</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">name</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">WebRole</span>&quot;<span style="color:blue"> </span><span style="color:red">enableNativeCodeExecution</span><span style="color:blue">=</span>&quot;<span style="color:blue">true</span>&quot;<span style="color:blue">&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>    </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">InputEndpoints</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>      </span>&lt;!--</span><span style="font-family:'Courier New';color:green;font-size:10pt"> Must use port 80 for http and port 443 for https when running in the cloud </span><span style="font-family:'Courier New';color:blue;font-size:10pt">--&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>      </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">InputEndpoint</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">name</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">HttpIn</span>&quot;<span style="color:blue"> </span><span style="color:red">protocol</span><span style="color:blue">=</span>&quot;<span style="color:blue">http</span>&quot;<span style="color:blue"> </span><span style="color:red">port</span><span style="color:blue">=</span>&quot;<span style="color:blue">80</span>&quot;<span style="color:blue"> /&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>    </span>&lt;/</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">InputEndpoints</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;/</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">WebRole</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">WorkerRole</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">name</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">WorkerRole</span>&quot;<span style="color:blue"> </span><span style="color:red">enableNativeCodeExecution</span><span style="color:blue">=</span>&quot;<span style="color:blue">true</span>&quot;<span style="color:blue">&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;/</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">WorkerRole</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">&lt;/</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">ServiceDefinition</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <h2 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:medium">Service Bus Client</span></h2> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">In this example we’ll create a normal Service Bus Listener and run that on-premise. This Listener will receive messages from the Service Bus and display them in a console window. We’ll also create a small client library which can be run from a Windows Azure Web or Worker role.</span></p> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">Our scenario is a simple one: Imagine you wanted to get real time logging information from your Windows Azure application. Instead of writing to the Windows Azure log API, manually transferring the logs to a blob and then download the data – we’ll write out directly to the Service Bus.</span></p> <h3 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:small">The Listener</span></h3> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">This is a super simple Console Application consisting of 3 files: Program.cs, ILogContract and ILogService. This Listener differs slightly from a regular Service Bus application. It packages Microsoft.ServiceBus.dll directly in its bin (ie. It doesn’t care if you have the SDK or Redist installed) and it sets all the WCF/SB config in code. Becareful: By packaging Microsoft.ServiceBus.dll yourself you are now responsible for servicing (ie. Updating) this dll on any clients you distribute it to. You’ll also note that the User Name, Password and Service Bus URI have been stored in AppSettings.</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">ILogContract.cs</span></em></h4> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Collections.Generic;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">namespace</span><span style="font-family:'Courier New';font-size:10pt"> AzureSample</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>[<span style="color:#2b91af">ServiceContract</span>(Name = <span style="color:#a31515">&quot;ILogContract&quot;</span>, Namespace = <span style="color:#a31515">&quot;http://tempuri.org/&quot;</span>)]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span><span style="color:blue">public</span> <span style="color:blue">interface</span> <span style="color:#2b91af">ILogContract</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span>[<span style="color:#2b91af">OperationContract</span>]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span><span style="color:blue">void</span> WriteToLog(<span style="color:#2b91af">DateTime</span> eventDt, <span style="color:blue">string</span> source, <span style="color:blue">string</span> text);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span><span style="color:blue">public</span> <span style="color:blue">interface</span> <span style="color:#2b91af">ILogChannel</span> : <span style="color:#2b91af">ILogContract</span>, <span style="color:#2b91af">IClientChannel</span> { }</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">LogService.cs</span></em></h4> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Text;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">namespace</span><span style="font-family:'Courier New';font-size:10pt"> AzureSample</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>[<span style="color:#2b91af">ServiceBehavior</span>(Name = <span style="color:#a31515">&quot;LogService&quot;</span>, Namespace = <span style="color:#a31515">&quot;http://tempuri.org/&quot;</span>)]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span><span style="color:blue">class</span> <span style="color:#2b91af">LogService</span>: <span style="color:#2b91af">ILogContract</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span><span style="color:blue">public</span> <span style="color:blue">void</span> WriteToLog(<span style="color:#2b91af">DateTime</span> eventDt, <span style="color:blue">string</span> source, <span style="color:blue">string</span> text)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:blue">string</span>.Format(<span style="color:#a31515">&quot;From {0} at {1}: {2}&quot;</span>, eventDt.ToString(), source, text));</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">}</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">Program.cs</span></em></h4> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Configuration;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel.Description;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceBus;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceBus.Description;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">namespace</span><span style="font-family:'Courier New';font-size:10pt"> AzureSample</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span><span style="color:blue">class</span> <span style="color:#2b91af">Program</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span><span style="color:blue">static</span> <span style="color:blue">void</span> Main(<span style="color:blue">string</span>[] args)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:blue">string</span> endPoint = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;EndPoint&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:blue">string</span> userName = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;UserName&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:blue">string</span> password = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;Password&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">Uri</span> uri = <span style="color:blue">new</span> <span style="color:#2b91af">Uri</span>(endPoint);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">TransportClientEndpointBehavior</span> userNamePasswordServiceBusCredential = <span style="color:blue">new</span> <span style="color:#2b91af">TransportClientEndpointBehavior</span>();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>userNamePasswordServiceBusCredential.CredentialType = <span style="color:#2b91af">TransportClientCredentialType</span>.UserNamePassword;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>userNamePasswordServiceBusCredential.Credentials.UserName.UserName = userName;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>userNamePasswordServiceBusCredential.Credentials.UserName.Password = password;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">ServiceHost</span> host = <span style="color:blue">new</span> <span style="color:#2b91af">ServiceHost</span>(<span style="color:blue">typeof</span>(<span style="color:#2b91af">LogService</span>), uri);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">ContractDescription</span> contractDescription = <span style="color:#2b91af">ContractDescription</span>.GetContract(<span style="color:blue">typeof</span>(<span style="color:#2b91af">ILogContract</span>), <span style="color:blue">typeof</span>(<span style="color:#2b91af">LogService</span>));</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">ServiceEndpoint</span> serviceEndPoint = <span style="color:blue">new</span> <span style="color:#2b91af">ServiceEndpoint</span>(contractDescription);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>serviceEndPoint.Address = <span style="color:blue">new</span> <span style="color:#2b91af">EndpointAddress</span>(uri);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>     </span><span>       </span>serviceEndPoint.Binding = <span style="color:blue">new</span> <span style="color:#2b91af">NetTcpRelayBinding</span>();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>serviceEndPoint.Behaviors.Add(userNamePasswordServiceBusCredential);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>host.Description.Endpoints.Add(serviceEndPoint);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>host.Open();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#2b91af">String</span>.Format(<span style="color:#a31515">&quot;Listening at: {0}&quot;</span>, endPoint));</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">Console</span>.WriteLine(<span style="color:#a31515">&quot;Press [Enter] to exit&quot;</span>);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span><span style="color:#2b91af">Console</span>.ReadLine();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>            </span>host.Close();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span>    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">}</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">App.config</span></em></h4> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">&lt;?</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">xml</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">version</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">1.0</span>&quot;<span style="color:blue"> </span><span style="color:red">encoding</span><span style="color:blue">=</span>&quot;<span style="color:blue">utf-8</span>&quot;<span style="color:blue"> ?&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">configuration</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">appSettings</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>    </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">add</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">key</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">UserName</span>&quot;<span style="color:blue"> </span><span style="color:red">value</span><span style="color:blue">=</span>&quot;<span style="color:blue">MY SOLUTION NAME</span>&quot;<span style="color:blue">/&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>    </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">add</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">key</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">Password</span>&quot;<span style="color:blue"> </span><span style="color:red">value</span><span style="color:blue">=</span>&quot;<span style="color:blue">MY PASSWORD</span>&quot;<span style="color:blue">/&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>    </span>&lt;</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">add</span><span style="font-family:'Courier New';color:blue;font-size:10pt"> </span><span style="font-family:'Courier New';color:red;font-size:10pt">key</span><span style="font-family:'Courier New';color:blue;font-size:10pt">=</span><span style="font-family:'Courier New';font-size:10pt">&quot;<span style="color:blue">EndPoint</span>&quot;<span style="color:blue"> </span><span style="color:red">value</span><span style="color:blue">=</span>&quot;<span style="color:blue">sb://mysolutionname.servicebus.windows.net/sample/log/</span>&quot;<span style="color:blue">/&gt;</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt"><span>  </span>&lt;/</span><span style="font-family:'Courier New';color:#a31515;font-size:10pt">appSettings</span><span style="font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="line-height:115%;font-family:'Courier New';color:blue;font-size:10pt">&lt;/</span><span style="line-height:115%;font-family:'Courier New';color:#a31515;font-size:10pt">configuration</span><span style="line-height:115%;font-family:'Courier New';color:blue;font-size:10pt">&gt;</span></p> <hr class=sig> This posting is provided &quot;AS IS&quot; with no warranties, and confers no rights.Sat, 23 May 2009 05:06:21 Z2009-05-23T05:07:53Zhttp://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#e708b8ae-8f04-4c6b-b83d-594f5eeae739http://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#e708b8ae-8f04-4c6b-b83d-594f5eeae739Philip Richardson [MSFT]http://social.msdn.microsoft.com/Profile/en-US/?user=Philip%20Richardson%20%5bMSFT%5dUtilizing .NET Services in Windows Azure<strong>Part II: The Client in Windows Azure<br/><br/></strong> <h3 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:small">The Client</span></h3> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">Now we need to start sending some messages to the client. We’ll create a class which we can easily re-use in a Web or Worker project. In fact you could run this class on pretty much any remote hosting environment. You’ll also need to store some credentials and the URI in the web.config or app.config for a web or worker role respectively.</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">ServiceBusLoggerClass.cs</span></em></h4> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">This class can be added as an external DLL or directly to the Worker/Web Role. Remember it needs Microsoft.ServiceBus.dll to work.</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel.Activation;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceBus;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">namespace</span><span style="font-family:'Courier New';font-size:10pt"> AzureSample</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:blue">public</span> <span style="color:blue">class</span> <span style="color:#2b91af">ServiceBusLogger</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> <span style="color:#2b91af">ILogChannel</span> Channel {<span style="color:blue">get</span>;<span style="color:blue">set</span>;}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> ServiceBusLogger(<span style="color:blue">string</span> endPoint, <span style="color:blue">string</span> userName, <span style="color:blue">string</span> password)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:#2b91af">Uri</span> uri = <span style="color:blue">new</span> <span style="color:#2b91af">Uri</span>(endPoint);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:#2b91af">TransportClientEndpointBehavior</span> userNamePasswordServiceBusCredential = <span style="color:blue">new</span> <span style="color:#2b91af">TransportClientEndpointBehavior</span>();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>userNamePasswordServiceBusCredential.CredentialType = <span style="color:#2b91af">TransportClientCredentialType</span>.UserNamePassword;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>userNamePasswordServiceBusCredential.Credentials.UserName.UserName = userName;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>userNamePasswordServiceBusCredential.Credentials.UserName.Password = password;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:#2b91af">ChannelFactory</span>&lt;<span style="color:#2b91af">ILogChannel</span>&gt; channelFactory = <span style="color:blue">new</span> <span style="color:#2b91af">ChannelFactory</span>&lt;<span style="color:#2b91af">ILogChannel</span>&gt;();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>channelFactory.Endpoint.Address = <span style="color:blue">new</span> <span style="color:#2b91af">EndpointAddress</span>(uri);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>channelFactory.Endpoint.Binding = <span style="color:blue">new</span> <span style="color:#2b91af">NetTcpRelayBinding</span>();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>channelFactory.Endpoint.Contract.ContractType = <span style="color:blue">typeof</span>(<span style="color:#2b91af">ILogChannel</span>);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>channelFactory.Endpoint.Behaviors.Add(userNamePasswordServiceBusCredential);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">this</span>.Channel = channelFactory.CreateChannel();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="">    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">}</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">Calling the Logger – eg. A Worker Role</span></em></h4> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Collections.Generic;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Threading;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Linq;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Text;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceHosting.ServiceRuntime;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Configuration;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> AzureSample;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">namespace</span><span style="font-family:'Courier New';font-size:10pt"> AzureSample_WorkerRole</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:blue">public</span> <span style="color:blue">class</span> <span style="color:#2b91af">WorkerRole</span> : <span style="color:#2b91af">RoleEntryPoint</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">override</span> <span style="color:blue">void</span> Start()</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">string</span> endPoint = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;EndPoint&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">string</span> userName = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;UserName&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">string</span> password = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;Password&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:#2b91af">ServiceBusLogger</span> logger = <span style="color:blue">new</span> <span style="color:#2b91af">ServiceBusLogger</span>(endPoint, userName, password);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>logger.Channel.WriteToLog(<span style="color:#2b91af">DateTime</span>.UtcNow, <span style="color:#a31515">&quot;Worker Role&quot;</span>, <span style="color:#a31515">&quot;Role Started&quot;</span>);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">while</span> (<span style="color:blue">true</span>)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">                </span><span style="color:#2b91af">Thread</span>.Sleep(1000);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">                </span>logger.Channel.WriteToLog(<span style="color:#2b91af">DateTime</span>.UtcNow, <span style="color:#a31515">&quot;Worker Role&quot;</span>, <span style="color:#a31515">&quot;Working...&quot;</span>);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">override</span> <span style="color:#2b91af">RoleStatus</span> GetHealthStatus()</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:green">// This is a sample worker implementation. Replace with your logic.</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">return</span> <span style="color:#2b91af">RoleStatus</span>.Healthy;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>}</span></p> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="line-height:115%;font-family:'Courier New';font-size:10pt">}</span></p> <h4 style="margin:10pt 0in 0pt"><span style=""><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">SampleOutput</span></em></span></h4> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">Here is some sample output from the console:</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:Calibri;font-size:small">Listening at: sb://*******.servicebus.windows.net/sample/log/</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:Calibri;font-size:small">Press [Enter] to exit</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:Calibri;font-size:small">From 5/23/2009 4:30:44 AM at Worker Role: Role Started</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:Calibri;font-size:small">From 5/23/2009 4:30:51 AM at Worker Role: Working...</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:Calibri;font-size:small">From 5/23/2009 4:30:52 AM at Worker Role: Working...</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:Calibri;font-size:small">From 5/23/2009 4:30:53 AM at Worker Role: Working...</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:Calibri;font-size:small">From 5/23/2009 4:30:54 AM at Worker Role: Working...</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:Calibri;font-size:small">From 5/23/2009 4:30:55 AM at Worker Role: Working...</span></p><hr class="sig">This posting is provided &quot;AS IS&quot; with no warranties, and confers no rights.Sat, 23 May 2009 05:06:55 Z2009-05-23T05:06:55Zhttp://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#44086a0c-bd84-4f95-b693-d918880ff0bdhttp://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#44086a0c-bd84-4f95-b693-d918880ff0bdPhilip Richardson [MSFT]http://social.msdn.microsoft.com/Profile/en-US/?user=Philip%20Richardson%20%5bMSFT%5dUtilizing .NET Services in Windows Azure<strong>Part III: Hosting a Listener in a Windows Azure Worker Role<br/><br/><br/></strong> <h2 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:medium">Hosting a Listener in Worker Role</span></h2> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">It’s relatively straight forward to host a Service Bus Listener in a Worker Role. Here is a version of the Calculator Service running inside Worker Role.</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">CalculatorService.c s</span></em></h4> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">Here is the CalculatorService.cs from the .NET Services SDK to refresh your memory. I’ve added this class directly to my worker role. I’ve remove the Access Control helpers from this sample for simplicity’s sake.</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">namespace</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceBus.Samples</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:blue">using</span> System;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:blue">using</span> System.Runtime.Serialization;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:blue">using</span> System.ServiceModel;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:blue">using</span> System.ServiceModel.Channels;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:green">// Define a service contract.</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>[<span style="color:#2b91af">ServiceContract</span>(Name = <span style="color:#a31515">&quot;Calculator&quot;</span>, Namespace = <span style="color:#a31515">&quot;http://Microsoft.ServiceModel.Samples&quot;</span>)]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:blue">public</span> <span style="color:blue">interface</span> <span style="color:#2b91af">ICalculator</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>[<span style="color:#2b91af">OperationContract</span>(Action = <span style="color:#a31515">&quot;Add&quot;</span>, ReplyAction = <span style="color:#a31515">&quot;AddResponse&quot;</span>)]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">double</span> Add(<span style="color:blue">double</span> n1, <span style="color:blue">double</span> n2);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>[<span style="color:#2b91af">OperationContract</span>(Action = <span style="color:#a31515">&quot;Subtract&quot;</span>, ReplyAction = <span style="color:#a31515">&quot;SubtractResponse&quot;</span>)]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">double</span> Subtract(<span style="color:blue">double</span> n1, <span style="color:blue">double</span> n2);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>[<span style="color:#2b91af">OperationContract</span>(Action = <span style="color:#a31515">&quot;Multiply&quot;</span>, ReplyAction = <span style="color:#a31515">&quot;MultiplyResponse&quot;</span>)]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">double</span> Multiply(<span style="color:blue">double</span> n1, <span style="color:blue">double</span> n2);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">   </span><span style="">     </span>[<span style="color:#2b91af">OperationContract</span>(Action = <span style="color:#a31515">&quot;Divide&quot;</span>, ReplyAction = <span style="color:#a31515">&quot;DivideResponse&quot;</span>)]</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">double</span> Divide(<span style="color:blue">double</span> n1, <span style="color:blue">double</span> n2);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:green">// Service class which implements the service contract.</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:blue">public</span> <span style="color:blue">class</span> <span style="color:#2b91af">CalculatorService</span> : <span style="color:#2b91af">ICalculator</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">double</span> Add(<span style="color:blue">double</span> n1, <span style="color:blue">double</span> n2)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">return</span> n1 + n2;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">double</span> Subtract(<span style="color:blue">double</span> n1, <span style="color:blue">double</span> n2)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">return</span> n1 - n2;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">double</span> Multiply(<span style="color:blue">double</span> n1, <span style="color:blue">double</span> n2)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">return</span> n1 * n2;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">double</span> Divide(<span style="color:blue">double</span> n1, <span style="color:blue">double</span> n2)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">return</span> n1 / n2;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">}</span></p> <h4 style="margin:10pt 0in 0pt"><em><span style="font-family:Cambria;color:#4f81bd;font-size:small">WorkerRole.cs</span></em></h4> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">Here is my WorkerRole.cs. I’ve configured my Service Bus listener with code only (with App Settings for the URI and credentials only). I’ve also physically included the Microsoft.ServiceBus.dll in my project. You’ll also note I’ve over-ridden the Stop() method of RoleEntryPoint to close the Host when the Worker Role shuts down.</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Collections.Generic;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Threading;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Linq;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Text;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceHosting.ServiceRuntime;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.Configuration;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceBus.Samples;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> System.ServiceModel.Description;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceBus;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">using</span><span style="font-family:'Courier New';font-size:10pt"> Microsoft.ServiceBus.Description;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';color:blue;font-size:10pt">namespace</span><span style="font-family:'Courier New';font-size:10pt"> AzureSample_WorkerRole</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span><span style="color:blue">public</span> <span style="color:blue">class</span> <span style="color:#2b91af">WorkerRole</span> : <span style="color:#2b91af">RoleEntryPoint</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">private</span> <span style="color:#2b91af">ServiceHost</span> host;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">override</span> <span style="color:blue">void</span> Start()</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">string</span> endPoint = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;EndPoint&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">string</span> userName = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;UserName&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">string</span> password = <span style="color:#2b91af">ConfigurationSettings</span>.AppSettings[<span style="color:#a31515">&quot;Password&quot;</span>];</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">     </span><span style="">       </span><span style="color:#2b91af">Uri</span> uri = <span style="color:blue">new</span> <span style="color:#2b91af">Uri</span>(endPoint);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:#2b91af">TransportClientEndpointBehavior</span> userNamePasswordServiceBusCredential = <span style="color:blue">new</span> <span style="color:#2b91af">TransportClientEndpointBehavior</span>();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>userNamePasswordServiceBusCredential.CredentialType = <span style="color:#2b91af">TransportClientCredentialType</span>.UserNamePassword;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>userNamePasswordServiceBusCredential.Credentials.UserName.UserName = userName;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>userNamePasswordServiceBusCredential.Credentials.UserName.Password = password;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>host = <span style="color:blue">new</span> <span style="color:#2b91af">ServiceHost</span>(<span style="color:blue">typeof</span>(<span style="color:#2b91af">CalculatorService</span>), uri);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:#2b91af">ContractDescription</span> contractDescription = <span style="color:#2b91af">ContractDescription</span>.GetContract(<span style="color:blue">typeof</span>(<span style="color:#2b91af">ICalculator</span>), <span style="color:blue">typeof</span>(<span style="color:#2b91af">CalculatorService</span>));</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:#2b91af">ServiceEndpoint</span> serviceEndPoint = <span style="color:blue">new</span> <span style="color:#2b91af">ServiceEndpoint</span>(contractDescription);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>serviceEndPoint.Address = <span style="color:blue">new</span> <span style="color:#2b91af">EndpointAddress</span>(uri);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>serviceEndPoint.Binding = <span style="color:blue">new</span> <span style="color:#2b91af">NetTcpRelayBinding</span>();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>serviceEndPoint.Behaviors.Add(userNamePasswordServiceBusCredential);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>host.Description.Endpoints.Add(serviceEndPoint);</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>host.Open();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">while</span> (<span style="color:blue">true</span>)</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">                </span><span style="color:green">//Loop</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">override</span> <span style="color:blue">void</span><span style="">  </span>Stop()</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span>host.Close();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style=""> </span><span style="">     </span><span style="">        </span><span style="color:blue">base</span>.Stop();</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"> </span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span><span style="color:blue">public</span> <span style="color:blue">override</span> <span style="color:#2b91af">RoleStatus</span> GetHealthStatus()</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>{</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:green">// This is a sample worker implementation. Replace with your logic.</span></span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">            </span><span style="color:blue">return</span> <span style="color:#2b91af">RoleStatus</span>.Healthy;</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">        </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt"><span style="">    </span>}</span></p> <p class=MsoNormal style="line-height:normal;margin:0in 0in 0pt"><span style="font-family:'Courier New';font-size:10pt">}</span></p> <h2 style="margin:10pt 0in 0pt"><span style="font-family:Cambria;color:#4f81bd;font-size:medium">Advanced Scenarios</span></h2> <p class=MsoNormal style="margin:0in 0in 10pt"><span style="font-family:Calibri;font-size:small">In these examples we used a basic NetTcpRelay Binding. You could easily imagine expanding these very simple scenarios to take advantage of other bindings, queues and routes provided by the Service Bus.</span></p> <br/><hr class="sig">This posting is provided &quot;AS IS&quot; with no warranties, and confers no rights.Sat, 23 May 2009 05:07:28 Z2009-05-23T05:07:28Zhttp://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#04ea59d3-f92d-4ce0-a488-cfff8a390127http://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#04ea59d3-f92d-4ce0-a488-cfff8a390127Lenni Lobelhttp://social.msdn.microsoft.com/Profile/en-US/?user=Lenni%20LobelUtilizing .NET Services in Windows Azure<p>Great info Philip, thanks. It's been very helpful.</p> <p>Unfortunately, I'm having a problem deploying a worker role to Azure. That is, the worker-role-hosted-WCF service exposed by the Service Bus works fine in the dev fabric, but fails to run when deployed to the cloud. Also note that the project I'm working on is for Microsoft, for the purposes of demonstrating how to port a .NET application (StockTrader, in this case) to Azure. Here are the details:</p> <p>Specifically, I am hosting one of three WCF services in a worker role using a Service Bus endpoint. The other two WCF services are hosted in web roles, and they run fine both in the dev fabric and in the real cloud. The WCF service hosted in the worker role, however, runs just fine in the dev fabric but sits forever in the Initializing state when deploying to Azure. As a sanity check, I built a HelloWorld WCF app, and I'm experiencing exactly the same thing: Worker role runs and hosts the WCF service via the Service Bus just fine in dev fabric, but hangs forever in Initializing state when deploying to Azure.</p> <p>Deployment ID: de51e019844e4bbea4b3a702c9bb44fb<br/>Web Site URL: <a href="http://stocktrader2.cloudapp.net/">http://stocktrader2.cloudapp.net/</a></p> <p>Here is the HelloWorld worker role code:</p> <p>using System;<br/>using System.Collections.Generic;<br/>using System.Threading;<br/>using System.Linq;<br/>using System.Text;</p> <p>using Microsoft.ServiceHosting.ServiceRuntime;</p> <p>using System.ServiceModel;<br/>using System.ServiceModel.Description;<br/>using Microsoft.ServiceBus;<br/>using WcfServiceImplementation;</p> <p>namespace WcfWorkerRole<br/>{<br/> public class WorkerRole : RoleEntryPoint<br/> {<br/>  private ServiceHost _host;</p> <p>  public override void Start()<br/>  {<br/>   RoleManager.WriteToLog(&quot;Information&quot;, &quot;Host is starting&quot;);<br/>   this._host = new ServiceHost(typeof(Service1));<br/>   this._host.Open();</p> <p>   ServiceRegistrySettings settings = new ServiceRegistrySettings();<br/>   settings.DiscoveryMode = DiscoveryType.Public;<br/>   foreach (ServiceEndpoint se in this._host.Description.Endpoints)<br/>   {<br/>    se.Behaviors.Add(settings);<br/>   }</p> <p>   RoleManager.WriteToLog(&quot;Information&quot;, &quot;Host is running&quot;);<br/>  }</p> <p>  public override void Stop()<br/>  {<br/>   RoleManager.WriteToLog(&quot;Information&quot;, &quot;Host is stopping&quot;);<br/>   this._host.Close();<br/>   base.Stop();<br/>   RoleManager.WriteToLog(&quot;Information&quot;, &quot;Host is stopped&quot;);<br/>  }</p> <p>  public override RoleStatus GetHealthStatus()<br/>  {<br/>   // This is a sample worker implementation. Replace with your logic.<br/>   return RoleStatus.Healthy;<br/>  }<br/> }<br/>}</p> <p>And here is the worker role's App.Config (Service Bus password replaced with *******)</p> <p>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;<br/>&lt;configuration&gt;<br/> &lt;system.serviceModel&gt;<br/>  &lt;services&gt;<br/>   &lt;service name=&quot;WcfServiceImplementation.Service1&quot;&gt;<br/>    &lt;endpoint<br/>     address=&quot;<a href="http://stocktraderservices.servicebus.windows.net/service1">http://stocktraderservices.servicebus.windows.net/service1</a>&quot;<br/>     binding=&quot;basicHttpRelayBinding&quot;<br/>     contract=&quot;WcfContracts.IService1&quot;<br/>     behaviorConfiguration=&quot;ServiceBusBehavior&quot;<br/>    /&gt;<br/>   &lt;/service&gt;<br/>  &lt;/services&gt;<br/>  &lt;behaviors&gt;<br/>   &lt;endpointBehaviors&gt;<br/>    &lt;behavior name=&quot;ServiceBusBehavior&quot;&gt;<br/>     &lt;transportClientEndpointBehavior credentialType=&quot;UserNamePassword&quot;&gt;<br/>      &lt;clientCredentials&gt;<br/>       &lt;userNamePassword<br/>          userName=&quot;StockTraderServices&quot; password=&quot;********&quot; /&gt;<br/>      &lt;/clientCredentials&gt;<br/>     &lt;/transportClientEndpointBehavior&gt;<br/>    &lt;/behavior&gt;<br/>   &lt;/endpointBehaviors&gt;<br/>  &lt;/behaviors&gt;<br/> &lt;/system.serviceModel&gt;<br/>&lt;/configuration&gt;</p> <p>The service contract is simple; just does an echo to prove that client and server are communicating properly. No need to include that code in the post, unless you request it. Again, as I said, it runs fine in the dev fabric.</p> <p>I need to finish this project for Microsoft in the next day or two, and if necessary will need to document this problem with the deliverables, but I'd much rather get a resolution and have it working properly for MS. I've also posted this to the Azure forum at <a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/328f9dc7-b27b-4324-8981-7145717f1fd3">http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/328f9dc7-b27b-4324-8981-7145717f1fd3</a>, but haven't gotten a resolution there yet. Please help! Thanks in advance.</p>Tue, 20 Oct 2009 04:28:10 Z2009-10-20T04:28:10Zhttp://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#3e874871-ac90-4977-9a56-abfbd1a7ae69http://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#3e874871-ac90-4977-9a56-abfbd1a7ae69Paul Arundelhttp://social.msdn.microsoft.com/Profile/en-US/?user=Paul%20ArundelUtilizing .NET Services in Windows Azure<p class=MsoNormal>Hi Lenni,</p> <p class=MsoNormal>Are you missing the while(true) loop in your worker role start() method as in Philip's example?</p> <p class=MsoNormal>It's interesting you are using the worker role to host the relay endpoint. Why have you not used a web role WCF service for this particular endpoint?</p> <p class=MsoNormal>Paul</p>Tue, 20 Oct 2009 08:50:04 Z2009-10-20T08:50:04Zhttp://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#02adb576-0cc7-46cb-9d84-1d3e76218294http://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#02adb576-0cc7-46cb-9d84-1d3e76218294Lenni Lobelhttp://social.msdn.microsoft.com/Profile/en-US/?user=Lenni%20LobelUtilizing .NET Services in Windows AzureHi Paul,<br/><br/>I actually believe the while(true) loop in Philip's example is incorrect. A worker role is similar to a Windows service in the sense that there are separate Start and Stop methods called by some service control manager. So when the Start method completes, the host remains running until the Stop method is invoked when the service is explicity stopped. But I did try it with the while(true) loop anyway, just to be sure, and as I expected, I got &quot;Service is busy&quot; errors trying to call it.<br/><br/>You're 100% correct that a web role is preferred over a worker role to host a WCF service in Azure. This project is a demonstration of how to do different things in Azure, one of which is how to host a WCF service in a worker role.<br/><br/>I did get a reply to my other forum post at <a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/328f9dc7-b27b-4324-8981-7145717f1fd3">http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/328f9dc7-b27b-4324-8981-7145717f1fd3</a>, which I'm going to try now, and will post the results as soon as I get them.<br/><br/>Thanks!<br/><br/>~ LenniTue, 20 Oct 2009 12:28:12 Z2009-10-20T12:28:12Zhttp://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#4ba77d2f-41c8-4659-995f-e3331611ae82http://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#4ba77d2f-41c8-4659-995f-e3331611ae82Paul Arundelhttp://social.msdn.microsoft.com/Profile/en-US/?user=Paul%20ArundelUtilizing .NET Services in Windows Azure<p class=MsoNormal style="line-height:normal;background:white"><span style="font-size:12.0pt;font-family:'Times New Roman','serif';color:black">I've been thinking of worker roles in terms of periodic background processes and was thinking of a while loop with a Thread.Sleep(n) rather than an empty while(true){}.</span></p> <p class=MsoNormal style="line-height:normal;background:white"><span style="font-size:12.0pt;font-family:'Times New Roman','serif';color:black">I was under the impression that the Start method is more like a main method than a Windows service. The <a href="http://msdn.microsoft.com/en-us/library/microsoft.servicehosting.serviceruntime.roleentrypoint.initialize.aspx">docs</a> </span><span style="font-size:12.0pt;font-family:'Times New Roman','serif';color:black">state that the Role is restarted if the Start method returns.</span></p> <p class=MsoNormal style="line-height:normal;background:white"><span style="font-family:'Times New Roman', serif;font-size:16px">Though this doesn't explain why you are not having problems in the dev fabric....</span></p> <p class=MsoNormal style="line-height:normal;background:white"><span style="font-size:12.0pt;font-family:'Times New Roman','serif';color:black">Cheers</span></p> <p class=MsoNormal style="line-height:normal;background:white"><span style="font-size:12.0pt;font-family:'Times New Roman','serif';color:black">Paul</span></p>Tue, 20 Oct 2009 16:24:24 Z2009-10-20T17:46:30Zhttp://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#71e8e492-1cc9-4a88-b7ba-07b5e5e37225http://social.msdn.microsoft.com/Forums/en-US/netservices/thread/7bf74134-673e-4139-8c0c-5dab7a726bc7#71e8e492-1cc9-4a88-b7ba-07b5e5e37225Lenni Lobelhttp://social.msdn.microsoft.com/Profile/en-US/?user=Lenni%20LobelUtilizing .NET Services in Windows Azure<p>Quite right Paul. The endless loop seems to be needed to keep the Start method from returning. Though like you say it doesn't explain why it doesn't seem to be needed when running in the dev fabric.</p> <p>Apparently, the real problem was the fact that I was configuring WCF using &lt;system.serviceModel&gt; settings in app.config (which btw also works fine in dev fabric but not in the cloud) rather than the code-only approach in C#. I've since modified the HelloWorld worker role service and web role client to configure the WCF settings using code-only, rather than app.config/web.config. I also made sure to package Microsoft.ServiceBus.dll in the bin folder, as per Philip Richardson's post. With no more settings in app.config, I am also able to continue running successfully in the dev fabric.</p> <p>Now the Worker Role does in fact start when deployed to Azure, rather than getting stuck in the Initializing state like it was before. So it is clear that switching to code-only WCF configuration corrected the problem I reported. Enter new problem!</p> <p>New problem is, when the service method is invoked by the client on the channel, it fails with either &quot;404 not found&quot; (if I implement the infinite while-true loop) or &quot;An existing connection was forcibly closed by the remote host&quot; (if I don't). Philip Richardson's post uses the infinite while-true loop, but I'm desperately trying everything possible to get it working in the cloud. And again, it works fine in dev fabric -- both with and without the infinite while-true loop.</p> <p>With the infinite loop version, the worker role starts normally, and seems to remain in a Started state indefinitely. But as soon as the first client request is issued, the worker role crashes and a 404 gets thrown on the client. After that, the worker restarts and then crashes continuously.</p> <p>Without the infinite loop, the worker role never remains in a Started state indefinitely, even if a client request is never issued. So I'm pretty sure that the inifinite loop is correct and required, as shown in Philip Richardson's post.</p> <p>[WebException: The remote server returned an error: (404) Not Found.]<br/>   System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) +728<br/>   System.ServiceModel.Channels.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result) +133</p> <p>[EndpointNotFoundException: There was no endpoint listening at <a href="http://stocktraderservices.servicebus.windows.net/service1">http://stocktraderservices.servicebus.windows.net/service1</a> that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.]<br/>   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +10259418<br/>   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp; msgData, Int32 type) +539<br/>   WcfContracts.IService1.GetData(Int32 value) +0<br/>   WcfWebRoleClient._Default.btnTest_Click(Object sender, EventArgs e) in C:\Projects\WcfWorkerRolePOC\WcfWebRoleClient\Default.aspx.cs:38<br/>   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +90<br/>   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +138<br/>   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +32<br/>   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3087</p> <p>Why is this happening?!?</p> <p>I'm at my wits end on this, and just can't get it to work. Here's the code (no more app.config)</p> <p>public override void Start()<br/>  {<br/>   string endPoint = &quot;<a href="http://stocktraderservices.servicebus.windows.net/service1">http://stocktraderservices.servicebus.windows.net/service1</a>&quot;;<br/>   string userName = &quot;StockTraderServices&quot;;<br/>   string password = &quot;paradox&quot;;</p> <p>   Uri uri = new Uri(endPoint);</p> <p>   var creds = new TransportClientEndpointBehavior();<br/>   creds.CredentialType = TransportClientCredentialType.UserNamePassword;<br/>   creds.Credentials.UserName.UserName = userName;<br/>   creds.Credentials.UserName.Password = password;</p> <p>   _host = new ServiceHost(typeof(Service1), uri);</p> <p>   var contractDescription = ContractDescription.GetContract(typeof(IService1), typeof(Service1));</p> <p>   var serviceEndPoint = new ServiceEndpoint(contractDescription);<br/>   serviceEndPoint.Address = new EndpointAddress(uri);<br/>   serviceEndPoint.Binding = new BasicHttpRelayBinding();<br/>   serviceEndPoint.Behaviors.Add(creds);</p> <p>   _host.Description.Endpoints.Add(serviceEndPoint);<br/>   _host.Open();</p> <p>   // Worker role starts and runs fine, but upon first client request, then crashes and client gets a 404 exception<br/>   // Only in the cloud... not in dev fabric!<br/>   while (true)<br/>   {<br/>   }<br/>  }</p> <p>And here's the client code (a button click event in a web role aspx page):</p> <p>  protected void btnTest_Click(object sender, EventArgs e)<br/>  {<br/>   string endPoint = &quot;<a href="http://stocktraderservices.servicebus.windows.net/service1">http://stocktraderservices.servicebus.windows.net/service1</a>&quot;;<br/>   string userName = &quot;StockTraderServices&quot;;<br/>   string password = &quot;paradox&quot;;</p> <p>   Uri uri = new Uri(endPoint);</p> <p>   var creds = new TransportClientEndpointBehavior();<br/>   creds.CredentialType = TransportClientCredentialType.UserNamePassword;<br/>   creds.Credentials.UserName.UserName = userName;<br/>   creds.Credentials.UserName.Password = password;</p> <p>   var cf = new ChannelFactory&lt;IService1Channel&gt;();<br/>   cf.Endpoint.Address = new EndpointAddress(uri);<br/>   cf.Endpoint.Binding = new BasicHttpRelayBinding();<br/>   cf.Endpoint.Contract.ContractType = typeof(IService1Channel);<br/>   cf.Endpoint.Behaviors.Add(creds);</p> <p>   var channel = cf.CreateChannel();</p> <p>   var result = channel.GetData(5);</p> <p>   Response.Write(result + &quot;&lt;br /&gt;&quot;);<br/>  }</p> <p>Runs like a charm in dev fabric; crashes miserably when deployed to the cloud. Please help!</p>Thu, 22 Oct 2009 18:28:04 Z2009-10-22T18:28:04Z