tag:blogger.com,1999:blog-388959592024-03-13T20:37:39.062+00:00Simon HartFormer Microsoft Mobility MVP 2008, 2009, 2010, 2011 now at MSFTSimon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.comBlogger295125tag:blogger.com,1999:blog-38895959.post-60626143193565181842017-03-01T14:36:00.000+00:002017-03-01T14:36:01.704+00:00The method personal_unlockAccount does not exist/is not availableWow, it's been almost 5 long years since I wrote a blog post... Life is busy at Microsoft, mostly in the IoT space but I am back, and I am back for good reason. I felt the need to document my learnings on Blockchain (the technology bitcoin is based on), because there does not seem to be a whole lot of technical information out there right now when you run into problems.<br />
<br />
<em>(Skip to the section "The Fix" if you know the background to this problem, as per the title)</em><br />
<br />
If you are new to Blockchain (when I use the word chain from here on in, it means the same thing as Blockchain), then I suggest ramping up using this <a href="https://www.reddit.com/r/Entrepreneur/comments/3l7gj2/i_want_to_learn_everything_about_the_blockchain/" target="_blank">link</a>. I will write many other introductory posts to Blockchain often specifically focused at running on Azure but for now back to the topic of this post: <strong>The method personal_unlockAccount does not exist/is not available. </strong>If you are using the Nethereum SDK to connect to your chain, the exception you will get back is: <span style="font-weight: bold;">Nethereum.JsonRpc.Client.RpcResponseException.</span><br />
<strong></strong><br />
Before you can write to the chain, that is publish a smartcontract, create an account etc. you have to "unlock" the account that you are using to write to the chain. This problem is very specific to the Ethereum Blockchain and by default the transaction nodes running Ethereum will be locked down, meaning you cannot remote RPC into the transaction nodes. Of course you can attach to the geth process on each node and unlock the accounts this way but to do it programmatically, please continue to read the rest of this post. In Azure we use the Golang implementation (called geth). <br />
<br />
This problem you may be getting is also independent on the client library you are using and there are many out there. I am actually using Nethereum - a .NET implementation of the client, you can get that here: <a href="https://github.com/Nethereum/Nethereum">https://github.com/Nethereum/Nethereum</a> If you like JavaScript then the web3 client library may interest you instead.<br />
<br />
<strong><span style="font-size: x-large;">The fix</span></strong><br />
SSH/RDP into one of your transaction nodes on the Ethereum network, this needs to be done on every transaction node within the network.<br />
<br />
Edit file:<span style="font-family: "courier new" , "courier" , monospace;"> /home/<usr>/start-private-blockchain.sh</usr></span> from below (line 54):<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">nohup geth --datadir $GETH_HOME -verbosity $VERBOSITY --bootnodes $BOOTNODE_URLS --maxpeers $MAX_PEERS --nat none --networkid $NETWORK_ID --identity $IDENTITY $MINE_OPTIONS $FAST_SYNC --rpc --rpcaddr "$IPADDR" --rpccorsdomain "*" >> $GETH_LOG_FILE_PATH 2>&1 &</span><br />
<br />
To this:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">nohup geth --datadir $GETH_HOME -verbosity $VERBOSITY --bootnodes $BOOTNODE_URLS --maxpeers $MAX_PEERS --nat none --networkid $NETWORK_ID --identity $IDENTITY $MINE_OPTIONS $FAST_SYNC --rpc --rpcaddr "$IPADDR" --rpccorsdomain "*" <span style="background-color: yellow;">--rpcapi "eth,net,web3,admin,personal"</span> >> $GETH_LOG_FILE_PATH 2>&1 &</span><br />
<br />
Notice the additional parameter that has been added to the above command: <span style="font-family: "Courier New", Courier, monospace;">--rpcapi "eth,net,web3,admin,personal".</span> This will enable all the API's over the RCP JSON protocol which is what the Ethereum clients use to unlock accounts etc. The Ubuntu image in Azure does not enable these API's by default which is why we need to turn them on here. You need to do this for every transaction node within your Ethereum network.<br />
<br />
Now reboot your OS by running command:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">$sudo reboot</span><br />
<span style="font-family: Courier New;"></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1yjbqq.dm2301.livefilestore.com/y3prsBJAeqxkqYh8tFcKHibewJIL22xXtUdaIQPj4CZht9ONBA-goiOMvUkqm5siIl6bCzwSmpGGpfSzj-qpbJN_7-2wqZJaT3ol05qglcDP0cZy-vcS3yrtL_pXCpBScyt9hrzlDy2s7eU610FS6Fx131Qy24VH0aAbt6-y_5bKps/sudoreboot.png?psid=1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="377" src="https://1yjbqq.dm2301.livefilestore.com/y3prsBJAeqxkqYh8tFcKHibewJIL22xXtUdaIQPj4CZht9ONBA-goiOMvUkqm5siIl6bCzwSmpGGpfSzj-qpbJN_7-2wqZJaT3ol05qglcDP0cZy-vcS3yrtL_pXCpBScyt9hrzlDy2s7eU610FS6Fx131Qy24VH0aAbt6-y_5bKps/sudoreboot.png?psid=1" width="640" /></a></div>
<br />
<br />
To test if this worked, you can try to run some code against this transaction node, for example try creating an account, or run the following command:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">ps aux | grep geth</span><br />
<span style="font-family: Courier New;"></span><br />
If all worked well, then you should get something back that looks like the below (notice the additional <span style="font-family: "Courier New", Courier, monospace;">rpcapi</span> parameter):<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">geth --datadir /home/simon/.ethereum -verbosity 4 --bootnodes enode://_mynode_and_IP/port --bootnodes enode://_mybootnodes_and_port_ --maxpeers 25 --nat none --networkid _my_id_ --identity bled72mw2-tx0 --fast --rpc --rpcaddr _myinternal_IP_ --rpccorsdomain "*" --rpcapi "eth,net,web3,admin,personal"</span><br />
<span style="font-family: Courier New;"></span><br />
<span style="font-family: Times New Roman;">Hopefully this worked for you and happy Blockchaining!</span>Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com10tag:blogger.com,1999:blog-38895959.post-84553736946399296522012-07-12T10:03:00.001+00:002012-07-12T10:03:58.440+00:00Could not load file or assembly 'Microsoft.Data.Services.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.Have you seen the following error recently while trying to use the new <a href="http://www.windowsazure.com/en-us/home/features/media-services/" target="_blank">Windows Azure Media Services</a> features:<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;">Could not load file or assembly 'Microsoft.Data.Services.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.</span><br />
<br />
I received the above error while attempting to use the Windows Azure Media Services SDK v1.0 <span style="font-family: 'Courier New', Courier, monospace;">CloudMediaContext</span> class:<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;">return new CloudMediaContext("myAccount", "myAccountKey");</span><br />
<br />
After looking at the pre-binding probe log, I found this:<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;">=== Pre-bind state information ===<br />
LOG: User = <domain>\<user><br />
LOG: DisplayName = Microsoft.Data.Services.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35<br />
(Fully-specified)<br />
LOG: Appbase = </user></domain></span><a href="file:///C:/Workspaces/Windows"><span style="font-family: 'Courier New', Courier, monospace;">file:///C:/Workspaces/Windows</span></a><span style="font-family: 'Courier New', Courier, monospace;"> Azure Media Services SDK Samples Project/C#/bin/Debug/<br />
LOG: Initial PrivatePath = NULL<br />
Calling assembly : Microsoft.WindowsAzure.MediaServices.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.<br />
===<br />
LOG: This bind starts in default load context.<br />
LOG: Using application configuration file: C:\Workspaces\Windows Azure Media Services SDK Samples Project\C#\bin\Debug\MediaServicesSDKSamples.vshost.exe.Config<br />
LOG: Using host configuration file: <br />
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.<br />
LOG: Post-policy reference: Microsoft.Data.Services.Client, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35<br />
LOG: Attempting download of new URL </span><a href="file:///C:/Workspaces/Windows"><span style="font-family: 'Courier New', Courier, monospace;">file:///C:/Workspaces/Windows</span></a><span style="font-family: 'Courier New', Courier, monospace;"> Azure Media Services SDK Samples Project/C#/bin/Debug/Microsoft.Data.Services.Client.DLL.<br />
LOG: Attempting download of new URL </span><a href="file:///C:/Workspaces/Windows"><span style="font-family: 'Courier New', Courier, monospace;">file:///C:/Workspaces/Windows</span></a><span style="font-family: 'Courier New', Courier, monospace;"> Azure Media Services SDK Samples Project/C#/bin/Debug/Microsoft.Data.Services.Client/Microsoft.Data.Services.Client.DLL.<br />
LOG: Attempting download of new URL </span><a href="file:///C:/Workspaces/Windows"><span style="font-family: 'Courier New', Courier, monospace;">file:///C:/Workspaces/Windows</span></a><span style="font-family: 'Courier New', Courier, monospace;"> Azure Media Services SDK Samples Project/C#/bin/Debug/Microsoft.Data.Services.Client.EXE.<br />
LOG: Attempting download of new URL </span><a href="file:///C:/Workspaces/Windows"><span style="font-family: 'Courier New', Courier, monospace;">file:///C:/Workspaces/Windows</span></a><span style="font-family: 'Courier New', Courier, monospace;"> Azure Media Services SDK Samples Project/C#/bin/Debug/Microsoft.Data.Services.Client/Microsoft.Data.Services.Client.EXE.</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span><br />
It seems the Media Services DLL is dependent on the out-of-band <a href="http://msdn.microsoft.com/en-us/library/hh487257(v=vs.103).aspx" target="_blank">WCF Data Services</a> OData assembly v5.0.<br />
<br />
There is a lot of talk on the web that these issues is due to the fact that Windows Azure Media Servers v1.0 only works with the Windows Azure SDK v1.6 and will not work with Windows Azure SDK v1.7 installed as well, for a thread on this, see here: <a href="http://social.msdn.microsoft.com/Forums/en-US/MediaServices/thread/d02e268e-e30a-481d-acb7-138646a0c4fb">http://social.msdn.microsoft.com/Forums/en-US/MediaServices/thread/d02e268e-e30a-481d-acb7-138646a0c4fb</a><br />
<br />
But..I didn't read the pre-requisite documentation correctly and once I installed WCF Data Services v5.0 all was ok:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb71kNhk0QZGSwVVrl6OiAga4nIqrFVhTJ4Npz0Kj_txCIxQqsbxtyvo9yNbl5-cXwFIHRQenjJ6HAP_DrPmPGFNhi2jgAQDXDVUSVzwKUTHtmScKf7h9LaJrHblXMhrTuxR0/s1600/odata5.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb71kNhk0QZGSwVVrl6OiAga4nIqrFVhTJ4Npz0Kj_txCIxQqsbxtyvo9yNbl5-cXwFIHRQenjJ6HAP_DrPmPGFNhi2jgAQDXDVUSVzwKUTHtmScKf7h9LaJrHblXMhrTuxR0/s1600/odata5.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Figure 1</b>: WCF Data Services 5 installer</td></tr>
</tbody></table>
<div class="separator" style="clear: both;">
You can find the pre-requisites here: <a href="http://msdn.microsoft.com/en-us/library/jj129588">http://msdn.microsoft.com/en-us/library/jj129588</a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<br /></div>Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-80624249731738088322012-06-11T08:36:00.004+00:002012-06-11T08:36:57.053+00:00Microsoft server software support for Windows Azure Virtual MachinesI keep getting asked questions as to what and what will not run on the new Windows Azure Virtual Machine services. This is in regards to Micosoft server, features and roles on Microsoft platforms.<br />
<br />
This Microsoft support article will hopefully clear up this confusion (note this is suject to change): <a href="http://support.microsoft.com/kb/2721672">http://support.microsoft.com/kb/2721672</a><br />Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-65637078569208876852012-05-01T20:32:00.000+00:002012-05-01T20:33:11.218+00:00SQL Azure vs Microsoft SQL ServerI've been working on a response to an RFI recently and I needed to list the limitations of SQL Azure over SQL Server.<br />
<br />
There are limitations, but there is one major advantage of SQL Azure over SQL Server and that is clustering. SQL Azure out of the box gives me a three node active cluster without doing a single thing. This is because for every write operation on SQL Azure, you get the same data written to two other databases within the same data centre.<br />
<br />
As we are on the subject of advantages, there is actually one-other major advantage, and that is it makes it easier to synchronise your SQL Azure database to provide synchronisation with another data centre for resilience using the DataSync component which is based on the SyncFramework which is very easy to use and setup. Synchronising SQL Server is a little more complex as you have more choice albeit, you could use the SyncFramework also, in a clustered environment you'd normally use mirroring or in BizTalk server log shipping. Now you'd use AlwaysOn Availability Groups provided by SQL Server 2012 - not yet released BTW.<br />
<br />
I found this really good technet resource that compares SQL Azure features with SQL Server: <a href="http://social.technet.microsoft.com/wiki/contents/articles/996.compare-sql-server-with-sql-azure.aspx#Scalability">http://social.technet.microsoft.com/wiki/contents/articles/996.compare-sql-server-with-sql-azure.aspx#Scalability</a><br />
<br />
But for convenience, I provided the table here on my blog (for my benefit in the future too!):<br />
<br />
<div style="text-align: -webkit-auto;">
</div>
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableLightShadingAccent1" style="border-collapse: collapse; border: none; mso-border-bottom-alt: solid #4F81BD 1.0pt; mso-border-bottom-themecolor: accent1; mso-border-top-alt: solid #4F81BD 1.0pt; mso-border-top-themecolor: accent1; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"><tbody>
<tr> <td style="border-bottom: solid #4F81BD 1.0pt; border-left: none; border-right: none; border-top: solid #4F81BD 1.0pt; mso-border-bottom-themecolor: accent1; mso-border-top-themecolor: accent1; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-line-height-alt: 8.25pt; mso-yfti-cnfc: 5; text-align: center;">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Feature<o:p></o:p></span></b></div>
</td> <td style="border-bottom: solid #4F81BD 1.0pt; border-left: none; border-right: none; border-top: solid #4F81BD 1.0pt; mso-border-bottom-themecolor: accent1; mso-border-top-themecolor: accent1; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-line-height-alt: 8.25pt; mso-yfti-cnfc: 1; text-align: center;">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">SQL Server (On-premise)<o:p></o:p></span></b></div>
</td> <td style="border-bottom: solid #4F81BD 1.0pt; border-left: none; border-right: none; border-top: solid #4F81BD 1.0pt; mso-border-bottom-themecolor: accent1; mso-border-top-themecolor: accent1; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-line-height-alt: 8.25pt; mso-yfti-cnfc: 1; text-align: center;">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">SQL Azure<o:p></o:p></span></b></div>
</td> <td style="border-bottom: solid #4F81BD 1.0pt; border-left: none; border-right: none; border-top: solid #4F81BD 1.0pt; mso-border-bottom-themecolor: accent1; mso-border-top-themecolor: accent1; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div align="center" class="MsoNormal" style="margin-bottom: .0001pt; margin-bottom: 0cm; mso-line-height-alt: 8.25pt; mso-yfti-cnfc: 1; text-align: center;">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Mitigation<o:p></o:p></span></b></div>
</td> </tr>
<tr> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Data Storage<o:p></o:p></span></b></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">No size limits as such<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* The Web Edition Database is best suited for small Web applications and workgroup or departmental applications. This edition supports a database with a maximum size of 1 or 5 GB of data.<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* The Business Edition Database is best suited for independent software vendors (ISVs), line-of-business (LOB) applications, and enterprise applications. This edition supports a database of up to 150 GB of data, in increments of 10 GB.<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Exact size and pricing information can be obtained at <a href="http://www.microsoft.com/windowsazure/pricing/#sql" target="_blank"><span style="color: #00749e; text-decoration: none;">Pricing Overview</span></a><o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">· An archival process can be created where older data can be migrated to another database in SQL Azure or on premise.<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">· Because of above size constraints, one of the recommendations is to partition the data across databases. Creating multiple databases will allow you take maximum advantage of the computing power of multiple nodes. The biggest value in the Azure model is the elasticity of being able to create as many databases as you need, when your demand peaks and delete/drop the databases as your demand subsides. The biggest challenge is writing the application to scale across multiple databases. Once this is achieved, the logic can be extended to scale across N number of databases.<o:p></o:p></span></div>
</td> </tr>
<tr> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Edition<o:p></o:p></span></b></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">· Express<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">· Workgroup<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">· Standard<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">· Enterprise<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* Web Edition<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* Business Edition<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">For more information, see <a href="http://msdn.microsoft.com/en-us/library/ee621788.aspx" target="_blank"><span style="color: #00749e; text-decoration: none;">Accounts and Billing in SQL Azure</span></a><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"></td> </tr>
<tr> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Connectivity<o:p></o:p></span></b></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">· SQL Server Management Studio<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">· SQLCMD<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* The SQL Server Management Studio from SQL Server 2008 R2 and SQL Server 2008 R2 Express can be used to access, configure, manage and administer SQL Azure. Previous versions of SQL Server Management Studio are not supported.<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">*<a href="http://msdn.microsoft.com/en-us/library/gg442309.aspx" target="_blank"><span style="color: #00749e; text-decoration: none;">The Management portal for SQL Azure</span></a><o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* SQLCMD<br />
<br />
For more information, see<a href="http://msdn.microsoft.com/en-us/library/ee621784.aspx" target="_blank"><span style="color: #00749e; text-decoration: none;">Tools and Utilities Support <img alt="Description: http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-components-sitefiles/10_5F00_external.png" border="0" height="10" src="file:///C:\Users\SIMON~1.SIM\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" v:shapes="Picture_x0020_8" width="10" /> </span></a>.<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"></td> </tr>
<tr> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Data Migration<o:p></o:p></span></b></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<br /></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">For more information, see<a href="http://msdn.microsoft.com/en-us/library/ee730904.aspx" target="_blank"><span style="color: #00749e; text-decoration: none;">Migrating Databases to SQL Azure</span></a><o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<br /></div>
</td> </tr>
<tr> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Authentication<o:p></o:p></span></b></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* SQL Authentication<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* Windows Authentication<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">SQL Server Authentication only<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Use SQL Server authentication<o:p></o:p></span></div>
</td> </tr>
<tr> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Schema<o:p></o:p></span></b></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">No such limitation<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">SQL Azure does not support heaps. ALL tables must have a clustered index before data can be inserted.<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Check all scripts to make sure all table creation scripts include a clustered index. If a table is created without a clustered constraint, a clustered index must be created before an insert operation is allowed on the table.<o:p></o:p></span></div>
</td> </tr>
<tr> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">TSQL Supportability<o:p></o:p></span></b></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"></td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Certain Transact-SQL commands are fully supported; some are partially supported while others are unsupported.<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* Supported Transact-SQL: <a href="http://msdn.microsoft.com/en-us/library/ee336270.aspx" target="_blank"><span style="color: #00749e; text-decoration: none;">http://msdn.microsoft.com/en-us/library/ee336270.aspx</span></a><o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* Partially Supported Transact-SQL: <a href="http://msdn.microsoft.com/en-us/library/ee336267.aspx" target="_blank"><span style="color: #00749e; text-decoration: none;">http://msdn.microsoft.com/en-us/library/ee336267.aspx</span></a><o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">* Unsupported Transact-SQL: <a href="http://msdn.microsoft.com/en-us/library/ee336253.aspx" target="_blank"><span style="color: #00749e; text-decoration: none;">http://msdn.microsoft.com/en-us/library/ee336253.aspx</span></a><o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"></td> </tr>
<tr> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">“USE” command<o:p></o:p></span></b></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Supported<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">In Microsoft SQL Azure Database, the USE statement does not switch between databases. To change databases, you must directly connect to the database.<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">In SQL Azure, each of the databases created by the user may not be on the same physical server. So the application has to retrieve data separately from multiple databases and consolidate at the application level.<o:p></o:p></span></div>
</td> </tr>
<tr> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Transactional Replication<o:p></o:p></span></b></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Supported<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Not supported<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">You can use BCP or SSIS to get the data out on-demand into an on premise SQL Server. When this article is being updated, the Customer Technology Preview of <a href="http://social.technet.microsoft.com/wiki/contents/articles/sql-azure-data-sync-overview.aspx"><span style="color: #00749e; text-decoration: none;">SQL Azure Data Sync</span></a> is also available. You can use it to keep on-premise SQL Server and SQL Azure in sync, as well as two or more SQL Azure servers.<br />
For more information on available migration options, see<a href="http://msdn.microsoft.com/en-us/library/ee730904.aspx" target="_blank"><span style="color: #00749e; text-decoration: none;">Migrating Databases to SQL Azure <img alt="Description: http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-components-sitefiles/10_5F00_external.png" border="0" height="10" src="file:///C:\Users\SIMON~1.SIM\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" v:shapes="Picture_x0020_3" width="10" /> </span></a>.<o:p></o:p></span></div>
</td> </tr>
<tr> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Log Shipping<o:p></o:p></span></b></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Supported<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Not supported<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"></td> </tr>
<tr> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Database Mirroring<o:p></o:p></span></b></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Supported<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Not supported<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"></td> </tr>
<tr> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">SQL Agent<o:p></o:p></span></b></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Supported<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Cannot run SQL agent or jobs on SQL Azure<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">You can run SQL Server Agent on your on-premise SQL Server and connect to SQL Azure Database.<o:p></o:p></span></div>
</td> </tr>
<tr> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Server options<o:p></o:p></span></b></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Supported<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Some system views are supported<br />
For more information, see <span style="color: #00749e; text-decoration: none;"><a href="http://msdn.microsoft.com/en-us/library/ee336238.aspx" target="_blank">System Views (SQL Azure Database)</a> </span>on MSDN.<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">The idea is most system level metadata is disabled as it does not make sense in a cloud model to expose server level information<o:p></o:p></span></div>
</td> </tr>
<tr> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Connection Limitations<o:p></o:p></span></b></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">N/A<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">In order to provide a good experience to all SQL Azure customers, your connection to the service may be closed. For more information, see <span style="color: #00b0e0; text-decoration: none;"><a href="http://msdn.microsoft.com/en-us/library/ee336245.aspx" target="_blank" title="General Guidelines and Limitations">General Guidelines and Limitations</a> </span>on MSDN and <a href="http://social.technet.microsoft.com/wiki/contents/articles/1541.sql-azure-connection-management-en-us.aspx" title="Click to view the page titled: SQL Azure Connection Management"><span style="color: #00749e; text-decoration: none;">SQL Azure Connection Management</span></a>.<o:p></o:p></span></div>
</td> <td style="border: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"></td> </tr>
<tr> <td style="background: #D3DFEE; border-bottom: solid #4F81BD 1.0pt; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; mso-border-bottom-themecolor: accent1; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<b><span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">SQL Server Integration Services (SSIS)<o:p></o:p></span></b></div>
</td> <td style="background: #D3DFEE; border-bottom: solid #4F81BD 1.0pt; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; mso-border-bottom-themecolor: accent1; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Can run SSIS on-premise<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border-bottom: solid #4F81BD 1.0pt; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; mso-border-bottom-themecolor: accent1; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">SSIS service not available on Azure platform<o:p></o:p></span></div>
</td> <td style="background: #D3DFEE; border-bottom: solid #4F81BD 1.0pt; border: none; mso-background-themecolor: accent1; mso-background-themetint: 63; mso-border-bottom-themecolor: accent1; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"><div class="MsoNormal">
<span style="color: #2a2a2a; font-family: 'Segoe UI', sans-serif; font-size: 9pt;">Run SSIS on site and connect to SQL Azure with ADO.NET provider<o:p></o:p></span></div>
</td> </tr>
</tbody></table>
<br />
<div class="MsoNormal">
<br /></div>Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-89160223924002093622012-04-28T12:30:00.000+00:002012-04-28T15:08:57.983+00:00My first week at Microsoft***non-techie - personal post***<br />
<br />
For those who don't know, I recently joined Microsoft and work on the World Wide Windows Azure Centre of Excellence team - a small team of highly skilled technical people, many of which have been at Microsoft for a number of years in different organisations. We are known internally as "Azure COE".<br />
<br />
The team is based out of Redmond, WA but I live in the UK and my responsibility is the EMEA region but no doubt, I will get involved in other regions as well once I get settled in. This is no doubt the best job I have ever had, I know it is early days but that is my feeling right now. I am no longer billable, so my responsibilities are to help customers, internal employees and partners be successful in deploying Windows Azure as a technology solution from an architectural and technology perspective.<br />
<br />
It is up to me to define what I will take ownership of, this truly excites me. I will take a few weeks to determine gaps, strategic direction and areas where I can focus more of my time and this is what I find the best thing about this role.<br />
<br />
It is also a very exciting time for anyone in our industry to be involved in cloud computing. Everyone that is, ISV's, SI's (System Integrator's), CIO's, CTO's should at least consider a cloud platform as a tool to be used in the vast tool set for any business problem that can be solved using technology today. It might not be the correct technology to use in all cases but it should be considered like any other.<br />
<br />
My first day, I arrived in Reading, Thames Valley Park, UK (known as Microsoft UK). I was quite tired when I arrived after a 3.5 hr drive due to the M25 London orbital motorway (known here as the car-park) being congested as ever. I actually found myself watching BBC News 24 on my Samsung Galaxy S2 device while parked up on the motorway! It saved me from extreme boredom.<br />
<br />
After checking-in, I met up with Tim Furnell who was acting as "host manager" to bed me into Microsoft nicely. Tim did a good job of getting all the things I needed and getting connected to corp net.<br />
<br />
The next day I worked from home and did a lot of NDA stuff that I can't talk about but you will eventually hear about in the future. This is another cool thing about the job. I get to hear about, work-on technology before it's even announced publicly. This enables me to make better decisions for our customers and to be more well informed in what's coming. I also get to address what is known as "whitespace" areas which are gaps in Microsoft products.<br />
<br />
That's another thing they love here - home-working, office-working, coffee-shop wherever, it doesn't matter where you work so long as you get your work done. Not a 9-5 person? - doesn't matter! They promote the use of on-line conference calls all the time. I have calls pretty much every day over Lync (internal VoIP).<br />
<br />
Then the next two days I spent time with my colleague Dennis Mulder from the Netherlands. After these two days my head was rather full of information. You don't realize just how big and how much information is at your finger-tips until you work here.<br />
<br />
Think of the biggest library you have ever set foot-in, multiply it by about 1000 then you might come close to the vast quantity of information available here at Microsoft.<br />
<br />
Microsoft are very supportive in pretty much every area you can think of. But the most important to me is learning, they totally promote it. You'd think this would be the same for all companies, but many other companies are interested in your billable time first and foremost and not you as an individual and your aspirations and career goals.<br />
<br />
I'm also finding everything highly efficient and smooth running. It's because everything is automated - where it can be. Example, applying for a AMEX corp card, I applied using //... (DNS) is used for everything there is a name for everything i.e. //training //sqlsvr etc... then after applying, the next day the card turned up!<br />
<br />
Booking travel, hotels, cars is automated and billed to your cost centre to reduce admin expense claims. So far the next 3 months will be fairly busy and a bit of international travel for some really interesting events.<br />
<br />
Dennis and I will be running the Tech Ed 2012 EMEA Pre-Conference Azure bootcamp workshop in June, so if you're going we'll see you there!<br />
<br />
And finally, if you're from Microsoft reading this and need the Azure CoE's help within EMEA, ping me internally (note we are free - non-UBI).Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com2tag:blogger.com,1999:blog-38895959.post-46387817673650275442012-04-14T13:23:00.000+00:002012-04-14T13:23:36.382+00:00SQL Server setup does not support the language of the OS or does not have ENU localized files<div class="separator" style="clear: both;">
I encountered a very strange error this morning when attempting to install Microsoft SQL Server R2 EN Standard Edition from my file server which I have successfully done many times before - mainly from VM's. </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Today, when I attempted to run the SQL installer on a fairly new Windows 7 EN OS physical machine, I got the following error:</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAzcxgV58dmLT9JX5D9BJgC2oupFznB_F7-FdxxbJc4jj135MTSznmDS2sehXDoYJJl8UcLolp6eIucAeR4UZRMvyl9xtUQBvSVfBlXJG8sbsR9KITMedO4UvE6_ROhZixffc/s1600/serverServerError.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAzcxgV58dmLT9JX5D9BJgC2oupFznB_F7-FdxxbJc4jj135MTSznmDS2sehXDoYJJl8UcLolp6eIucAeR4UZRMvyl9xtUQBvSVfBlXJG8sbsR9KITMedO4UvE6_ROhZixffc/s1600/serverServerError.png" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
After reading about this problem on Connect here: <a href="http://connect.microsoft.com/SQLServer/feedback/details/556958/sql-server-setup-media-does-not-support-the-language-of-the-os">http://connect.microsoft.com/SQLServer/feedback/details/556958/sql-server-setup-media-does-not-support-the-language-of-the-os</a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
I tried some of the workarounds mentioned on Connect above, none worked. So as my machine is a dev machine, I'm happy to put the developer edition on which doesn't appear to be localized?!?</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
But before doing this I really wanted to figure out why I was getting this problem. I am running an English version of Windows that is set to the United Kingdom as the locale. Why is this not working for me!?</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
So then as I was attempting to install from a network file server, I thought I'd burn to disc and then try it from a DVD. So I fired up Windows 7 USB/DVD Download Tool (get the code from here: <a href="http://wudt.codeplex.com/">http://wudt.codeplex.com/</a>). Ran it and I got this error:</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrWP5D5RtbX3fUlfGCIbVHvHk7RjS2w0O7PcR8okzjukjFcfatpQKq6W-myClY25APl5FTutaCvMGygrOLRKrJK1K6AMAgVk8DQBFdHm8N-8QJC4-ZdBZzap8JwVSHA-As-hU/s1600/notValidISO.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrWP5D5RtbX3fUlfGCIbVHvHk7RjS2w0O7PcR8okzjukjFcfatpQKq6W-myClY25APl5FTutaCvMGygrOLRKrJK1K6AMAgVk8DQBFdHm8N-8QJC4-ZdBZzap8JwVSHA-As-hU/s1600/notValidISO.png" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
So this is really weird as I have installed SQL Server from that ISO before (at least I think I have).</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
So in the end I downloaded a new fresh copy of SQL Server, ran it from the network server and it worked! So this error for me was a red hearing.</div>
<div class="separator" style="clear: both;">
<br /></div>Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com1tag:blogger.com,1999:blog-38895959.post-69735762191471975252012-04-03T09:15:00.000+00:002012-05-02T22:41:57.253+00:00Windows Azure Traffic Manager to handle your public cloud DR strategyI did a talk last month at the Windows Azure User Group in London. To be honest I had too much content to get through and part of my talk was to talk about drastic recovery otherwise known as disaster recovery (DR). I ran out of time and didn't get a chance to talk about it unfortunately.<br />
<br />
<strong><span style="font-size: x-large;">What is Drastic (Disaster) Recovery</span></strong><br />
Some people say DR is not possible or difficult to implement in a Cloud Platform such as the PaaS model. This is in contrast to Cloud Platform IaaS as you have more control over hardware/configuration in a IaaS environment than you do in PaaS. But hopefully after you have read this article, you'll soon realise it is very easy now in Windows Azure.<br />
<br />
<div>
</div>
For people not aware of DR, I'll explain it using a picture that illustrates the problem when using Windows Azure, consider figure 1 below:<br />
<div>
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5he-YxkeU6Thx57_BnWFuLV-tZwA6LI_QCBjNReskhyaeMIy_RGKXER9jBu2DXYVbj9FBObRmkYLzIJyOhAtUWp1VYiuJ88PJY1GSQsh4NOLlgDfpfiOTh6KqA6In5wtT_9U/s1600/DRStrategy.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5he-YxkeU6Thx57_BnWFuLV-tZwA6LI_QCBjNReskhyaeMIy_RGKXER9jBu2DXYVbj9FBObRmkYLzIJyOhAtUWp1VYiuJ88PJY1GSQsh4NOLlgDfpfiOTh6KqA6In5wtT_9U/s1600/DRStrategy.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 1</strong>: Basic drastic recovery fail over configuration</td></tr>
</tbody></table>
In the above diagram we have some roles running in a Windows Azure data centre in both Europe and North Central US and a consumer that is consuming from 1 data centre, Europe.<br />
<br />
<div>
</div>
The configuration depicted above is known as a failover or active/passive configuration which is very commonly found in drastic recovery configurations in the enterprise today. If the above were a private data centre whether this is private cloud or a traditional data centre, it would look almost identical.<br />
<br />
<div>
</div>
When you deploy an application in an Azure data centre, you can't spread it across multiple data centres for resiliance or to implement DR. Well you can but you'll get a different URL for each data centre you deploy your application into. For example for the Europe data centre above, our full URL could be: <a href="http://myamazingapp-europe.cloudapp.net/">http://myamazingapp-europe.cloudapp.net/</a> <br />
<br />
<div>
</div>
Then for the North Central US data centre, the URL has to be something different like: <a href="http://myamazingapp-us.cloudapp.net/">http://myamazingapp-us.cloudapp.net/</a><br />
<br />
<div>
</div>
Because we have two different URL's this leads us to a problem because if the Europe data centre goes down, which in the above case is our active configuration, the users will not be able to use the application which affects availability unless the active configuration becomes the DR environment which is the USA data centre.<br />
<br />
This means the Europe data centre is currently serving up the users requests all the time and the USA data centre is in passive/sleep state - in other words not being used unless of a failure in the Europe data centre. When/if this failure occurs, we need to switch from Europe to the USA data centre. This is not easy with the current configuration because the users/actors will have to switch URLs from Europe to the USA data centre - this is far from ideal as often the user/actor probably wouldn't know when to try the other URL, it really needs to be seamless.<br />
<br />
So we really want to use a single URL that has the ability to reference both data centres when we need to without the users actually knowing.<br />
<br />
<strong><span style="font-size: x-large;">A simple way to implement DR in Windows Azure</span></strong><br />
This is where DNS (<a href="http://en.wikipedia.org/wiki/Domain_Name_System" target="_blank">Domain Name Service</a>) play a very important role in hardware infrastructure and helps us solve this problem relatively easilly.<br />
<br />
Now consider an amendment to the above diagram (figure 1) to now abstract the user from the <span style="font-family: 'Courier New', Courier, monospace;">*.cloudapp.net</span> domain name using a internet DNS registrar and a <a href="http://en.wikipedia.org/wiki/CNAME_record" target="_blank">CNAME record</a> that resolves to the Azure data centre required. Remember, each cloudapp sub domain represents a single data centre region. When you design for a drastic recovery solution, you wouldn't normally use the same data centre as it kind of defeats the purpose of having a DR strategy.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdDK5Y1nFALAZeMOm5nNnvCVwvMlmqytosrlL1ra47qmkYL6eQ4CghJCltz52B01qW6aaVwLv6DtIWkAWjT3FlGIZymejwI80Le8w5Mtl7oye2cmoREF7jkSCJCDasscBZJhU/s1600/DRStrategyWithDNS.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdDK5Y1nFALAZeMOm5nNnvCVwvMlmqytosrlL1ra47qmkYL6eQ4CghJCltz52B01qW6aaVwLv6DtIWkAWjT3FlGIZymejwI80Le8w5Mtl7oye2cmoREF7jkSCJCDasscBZJhU/s1600/DRStrategyWithDNS.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 2</strong>: Basic drastic recovery fail over configuration with DNS</td></tr>
</tbody></table>
With the amendment above, we can give url: <a href="http://myamazingapp.com/">http://myamazingapp.com</a> to end users/actors. They are now completely unaware of where their application is being served up - which is how it should be.<br />
<br />
Of course they could run a trace (TRACERT) on <a href="http://myamazingapp.com/">http://myamazingapp.com</a> and see where it resolves to. In fact, I have made the above configuration on a application I have deployed in Azure right now. If I run TRACERT on my sub domain: <a href="http://remotemedia.simonrhart.com/">http://remotemedia.simonrhart.com</a> I get the following:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS-74WBHxw_S7ekXsKyxfwb5Z6QLE1nE2cI99lvSt7cARJkfqSWR7oImVqGjbCOuGQe2kpZ9a_RanY6eKTAUGl2pQYWzOQ_YRof04VNzs9eldNblUXI2FkgvzNPKNq9zO3gH0/s1600/tracert.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS-74WBHxw_S7ekXsKyxfwb5Z6QLE1nE2cI99lvSt7cARJkfqSWR7oImVqGjbCOuGQe2kpZ9a_RanY6eKTAUGl2pQYWzOQ_YRof04VNzs9eldNblUXI2FkgvzNPKNq9zO3gH0/s1600/tracert.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 3</strong>: Running TRACERT on my sample app hosted in Azure</td></tr>
</tbody></table>
You can see from the above trace, my subdomain resolves to Microsoft's data centre DNS <a href="http://remotemedia.cloudapp.net/">http://remotemedia.cloudapp.net</a> IP address: 94.245.89.251.<br />
<br />
We know that IP address is a real Azure data centre as it is registered to Microsoft. Here is the result from running a whois on the resolved IP address:<br />
<div class="hdtagline">
WHOIS information for <a href="http://94.245.89.251/" rel="nofollow">94.245.89.251</a>:</div>
<br />
<div>
</div>
<pre class="bodyMed">[Querying whois.arin.net]
[Redirected to whois.ripe.net:43]
[Querying whois.ripe.net]
[whois.ripe.net]
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See http://www.ripe.net/db/support/db-terms-conditions.pdf
% Note: this output has been filtered.</pre>
<pre class="bodyMed whoisRest" id="whoisRest">% To receive output for a database update, use the "-B" flag.
% Information related to '94.245.64.0 - 94.245.127.255'
inetnum: 94.245.64.0 - 94.245.127.255
descr: Microsoft Limited
org: ORG-MA42-RIPE
netname: UK-MICROSOFT-20081107
country: GB
admin-c: AS9763-RIPE
tech-c: EN603-RIPE
tech-c: BR329-ARIN
status: ALLOCATED PA
mnt-by: RIPE-NCC-HM-MNT
mnt-lower: MICROSOFT-MAINT
mnt-domains: MICROSOFT-MAINT
mnt-routes: MICROSOFT-MAINT
source: RIPE # Filtered
organisation: ORG-MA42-RIPE
org-name: Microsoft Limited
org-type: LIR
<span style="background-color: yellow;">address: Microsoft
Darren Norman
One Microsoft Way
WA 98052 Redmond
UNITED STATES</span>
phone: +1 (425) 703 6647
fax-no: +1 425 936 7329
e-mail: danorm@microsoft.com
admin-c: NORM1-RIPE
admin-c: NORM1-RIPE
admin-c: NORM1-RIPE
mnt-ref: MICROSOFT-MAINT
mnt-ref: RIPE-NCC-HM-MNT
mnt-by: RIPE-NCC-HM-MNT
source: RIPE # Filtered
person: Allie Settlemyre
address: Microsoft Limited
address: One Microsoft Way,
address: Redmond, WA 98052
address: USA
phone: +1 (425) 705 0516
phone: +1 (425) 936 7329
e-mail: iprrms@microsoft.com
nic-hdl: AS9763-RIPE
source: RIPE # Filtered
person: Bharat Ranjan
address: Microsoft Corporation
address: Redmond, WA, 98102
address: One Microsoft Way
address: USA
phone: +1 (425) 706 3230
fax-no: +1 (425) 936 7329
nic-hdl: BR329-ARIN
source: RIPE # Filtered
e-mail: bharatr@microsoft.com
person: Edet Nkposong
address: Microsoft, One Microsoft Way,Redmond, WA 98052
address: USA
e-mail: edetn@microsoft.com
phone: +14257071045
nic-hdl: EN603-RIPE
mnt-by: MICROSOFT-MAINT
source: RIPE # Filtered
</pre>
<br />
So that is wonderful isn't it? DR and failover problem sorted. Well kindof. It's not perfect as it's very manual. If the European data centre where my application is deployed goes down, I need to know about it so I can tell my DNS registrar to change the CNAME record to point to the application that is deployed in the DR data centre - North Central US.<br />
<br />
This means I will have to log into my DNS registrar and change the CNAME when a failure occurs like so:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpwCc-60PHyumgH7Zx2PxX4MOhABOHOnDKdzAq0G0hn5T-wNz9aCztqFaI45AUv9Qsb8Xh69TGIazqfTUF00P39rH5GbndPPcgq2sYkri4HsJ6dqF-_oFTgJ9cEfE87yRzuQ8/s1600/editCNAME.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpwCc-60PHyumgH7Zx2PxX4MOhABOHOnDKdzAq0G0hn5T-wNz9aCztqFaI45AUv9Qsb8Xh69TGIazqfTUF00P39rH5GbndPPcgq2sYkri4HsJ6dqF-_oFTgJ9cEfE87yRzuQ8/s1600/editCNAME.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 4</strong>: Setting up a CNAME record</td></tr>
</tbody></table>
I don't really want my IT admins having to deal with this as it's expensive and adds complexity. I could automate it but then I'd have to put a load of process in place and write some custom code not to mention I'll need some infrastructure running on-premise (most probably).<br />
<br />
Surely there is a better way?<br />
<br />
<strong><span style="font-size: x-large;">Windows Azure Traffic Manager</span></strong><br />
Although what I have talked about above will work, it's fairly simple and I have done this for some time. But thankfully there is a better way. Microsoft has made available in Community Technical Preview (CTP) a feature called Windows Azure Traffic Manager.<br />
<br />
Unlike the way the beta programmes work in Azure, you can start using the Traffic Manager right away. There is no request to make in order to start using it - <em>as per the beta programme</em><br />
<br />
Windows Azure Traffic Manager can solve you're failover DR strategy without having to touch any DNS server/registrar once it's setup and more. It supports the following:<br />
<ol>
<li><strong>Performance</strong> – traffic is forwarded to the closest hosted service in terms of network latency</li>
<li><strong>Round Robin</strong> – traffic is distributed equally across all hosted services</li>
<li><strong>Failover </strong> – traffic is sent to a primary service and, if this service goes offline, to the next available service in a list</li>
</ol>
As we are talking about failover, the feature we need from Traffic Manager is number 3: Failover.<br />
So Traffic Manager will solve our problem of having to manually update the DNS registrar with the new Azure data centre DNS cloudapp domain name. Great, how do I do it?<br />
<br />
<strong><span style="font-size: large;">Enabling Traffic Manager</span></strong><br />
To start using Traffic Manager you need to use the Windows Azure Management Portal to create a policy. <br />
<br />
To do this navigate to the Windows Azure Management Portal and sign-in: <a href="http://windows.azure.com/">http://windows.azure.com</a>. Then click <strong>Virtual Network > Get Started With Traffic Manager. </strong><br />
<strong><br /></strong><br />
See figure 5 below:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKVpGrpeTuDuygOlHWZ87wANjAkV5kcSuI3hs14kQoRWzb9ZzLlP11aLeZ9koj4uNom7eO3fPe-KH12atI1HILb_4wUD0L_c6LeI_1SBDGK_wBx2iiUhzUmlZfVGKNWPVaJiE/s1600/TrafficManager.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKVpGrpeTuDuygOlHWZ87wANjAkV5kcSuI3hs14kQoRWzb9ZzLlP11aLeZ9koj4uNom7eO3fPe-KH12atI1HILb_4wUD0L_c6LeI_1SBDGK_wBx2iiUhzUmlZfVGKNWPVaJiE/s1600/TrafficManager.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 5</strong>: Getting started with Windows Azure Traffic Manager</td></tr>
</tbody></table>
Notice how this is different from using the beta programmes in Windows Azure. With Traffic Manager you can start using it straight away and right now there is no cost to using it.<br />
<br />
Once you click the <strong>Get Started with Traffic Manager</strong> button, you'll see a dialog box similar to the following popup:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiixGyWWc_R8VRK9PbxNsvEiVM3c4OHXjOXznabBoWOgiHGqMI9peZ8Ch8mNyo6sUI4yQP8tSyRwUtti_Q9noXHmpep9_li2qWi92rbqak7noe14MHHEDJXFSW1D7l1nmsC2d4/s1600/creatingTrafficManagerPolicy.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiixGyWWc_R8VRK9PbxNsvEiVM3c4OHXjOXznabBoWOgiHGqMI9peZ8Ch8mNyo6sUI4yQP8tSyRwUtti_Q9noXHmpep9_li2qWi92rbqak7noe14MHHEDJXFSW1D7l1nmsC2d4/s1600/creatingTrafficManagerPolicy.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 6</strong>: Creating a Traffic Manager Policy</td></tr>
</tbody></table>
<br />
Notice, there is a lab that you can do that covers all this setup of Traffic Manager here: <a href="http://msdn.microsoft.com/en-us/gg197529">http://msdn.microsoft.com/en-us/gg197529</a> but I have included here for the bigger picture of what specifically Traffic Manager is designed to solve and how you would solve these problems without it.<br />
<br />
I have filled in the policy above as per the original high-level architecture diagram in figure 1 above. <em>Note: DNS names are different from my diagram but the concept and design is the same</em>.<br />
<br />
<div>
</div>
In the above, as mentioned we select Failover as a load-balancing method. We specify Europe (remotemedia) as our primary active configuration and the North Central US (remotemedia-dr) namespace as the failover data centre. This one is our passive configuration, the application is there, deployed and waiting to be used should a failure occur.<br />
<br />
Some data here is important, one piece is the <strong>DNS time to live (TTL).</strong> This is the maximum time users will have to wait until the DNS server gets updated with the new URL should a failure occur. The default is 5 minutes (300 seconds). The other important peice of information is the <strong>Traffic Manager DNS Prefix</strong> field.<br />
<br />
Well, the <strong>Traffic Manager DNS Prefix</strong> field can be anything we want (so long as it hasn't been used already) as the users will never see it. Later we will reconfigure our DNS registrar to point to this DNS address.<br />
<br />
Once I click OK, the policy is then created and it is active in Traffic Manager:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbctdHrTg2kVYHoqLaJ9GyvqcspmuTSRSXGMt4SZ0CR_UrrMXk3Jm_5lObSSPxaP7VG7WJEq2QgloNDf47IKPj1t8IoxYkup6Sv1XLy-FOimV1fpB94_bHD4TgVoxLVqaSzt4/s1600/trafficManagerPolicies.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbctdHrTg2kVYHoqLaJ9GyvqcspmuTSRSXGMt4SZ0CR_UrrMXk3Jm_5lObSSPxaP7VG7WJEq2QgloNDf47IKPj1t8IoxYkup6Sv1XLy-FOimV1fpB94_bHD4TgVoxLVqaSzt4/s1600/trafficManagerPolicies.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 7</strong>: Our policy in traffic manager</td></tr>
</tbody></table>
Figure 7 above shows how these policies look in Traffic Manager. There is 1 thing left to do though, and that is to configure our DNS registrar to point our custom DNS to our specified traffic manager policy URL we chose.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO9xdb8u7024-hujJ1bkxbQLoZ9Q5EkwFX7H742Kn7NgsyOeixeGJEqi62doNSivsUfrPti8Q8YQ-I4wfoB637xm0jj8LgcWV0XsI2vkgNOq0ct0JJOEz-rf0yTz1BpT638E4/s1600/dnsTrafficManagerConfigured.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO9xdb8u7024-hujJ1bkxbQLoZ9Q5EkwFX7H742Kn7NgsyOeixeGJEqi62doNSivsUfrPti8Q8YQ-I4wfoB637xm0jj8LgcWV0XsI2vkgNOq0ct0JJOEz-rf0yTz1BpT638E4/s1600/dnsTrafficManagerConfigured.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 8</strong>: That's it, our DNS configured and never needs to change again!</td></tr>
</tbody></table>
Figure 8 above shows our final DNS configuration. So what happened here?<br />
<br />
We are simply handing the problem of failover over to Windows Azure. So in the above case, Azure will handle changing the DNS CNAME configuration should a failure occur.<br />
<br />
<strong><span style="font-size: x-large;">Making Sure Traffic Manager is Working</span></strong><br />
What we now need to do is test that the Traffic Manager failover feature is working correctly.<br />
<br />
If we now run a trace route on our new traffic manager URL it should resolve to the Europe data centre (in my case <a href="http://remotemedia.cloudapp.net/">http://remotemedia.cloudapp.net</a>) - remember I have two data centres 1 in Europe (active) and 1 in North Central US (passive):<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjajTngq04ZUQeoH69Cmrq3hiAH0MygJJqDWkdLUKc9279hpvvxHmk4DnwJb5abE53uL5UWBDDcXHG2QhswgCXJqGgj-sPf07nTKgBKCUf0IYd9p5XUfjMroot9IZ_1om3wppw/s1600/traceToTrafficManagerEurope.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjajTngq04ZUQeoH69Cmrq3hiAH0MygJJqDWkdLUKc9279hpvvxHmk4DnwJb5abE53uL5UWBDDcXHG2QhswgCXJqGgj-sPf07nTKgBKCUf0IYd9p5XUfjMroot9IZ_1om3wppw/s1600/traceToTrafficManagerEurope.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 9</strong>: Tracing traffic manager configuration</td></tr>
</tbody></table>
So I'm happy with that, Traffic Manager's DNS configuration looks correct to me.<br />
<br />
Now I want to force a failure so I can test the failover. This is easy, all I need to do is shutdown the Europe data centre services like so:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidBgIWdpxBu4gAi0rzANRsr0DpNXVo2m_HmJNSN764qyAG-lUHUp6Hv0waoZ7s-IZxSJPvMjUFxSeO2h0ZEkv_QqcZbl8XPE8nJA1s4CvkTv-oCO3c2ivcDONJVWBR511SZxo/s1600/europeServiceStopped.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidBgIWdpxBu4gAi0rzANRsr0DpNXVo2m_HmJNSN764qyAG-lUHUp6Hv0waoZ7s-IZxSJPvMjUFxSeO2h0ZEkv_QqcZbl8XPE8nJA1s4CvkTv-oCO3c2ivcDONJVWBR511SZxo/s1600/europeServiceStopped.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 10</strong>: Shutting down active node in Windows Azure</td></tr>
</tbody></table>
Now that my Europe data centre services are not running as per figure 10 above, I'll need to wait the 5 minutes (which is what I configured) before I test the failover.<br />
<br />
Once 5 minutes has elapsed, I'll run the same trace route command via a command-prompt like so:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjboisPeTf2qpm9Y2Um7FrMi7pzgcy-dE6revIMvjGAekCjAK9GqKqnuhQyqM1Y75e7QLZRkx4jVdET7M1Hw7CSuQDqU82kT-x3OF6YYvHl8pf6FRDxM4606T3NUVdCvQ5qxP0/s1600/traceOnFailover.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjboisPeTf2qpm9Y2Um7FrMi7pzgcy-dE6revIMvjGAekCjAK9GqKqnuhQyqM1Y75e7QLZRkx4jVdET7M1Hw7CSuQDqU82kT-x3OF6YYvHl8pf6FRDxM4606T3NUVdCvQ5qxP0/s1600/traceOnFailover.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 11</strong>: Tracing now that Europe services are down</td></tr>
</tbody></table>
I think this is a success, notice the trace now resolves to our North Central US data centre (my URL: <a href="http://remotemedia-dr.cloudapp.net/">http://remotemedia-dr.cloudapp.net</a>)<br />
<br />
Also, if I run the trace one layer out from my custom domain: <a href="http://remotemedia.simonrhart.com/">http://remotemedia.simonrhart.com</a>, I get the expected failover data centre as above [<span style="font-family: 'Courier New', Courier, monospace;">remotemedia-dr.cloudapp.net</span>]:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrAO5vueHOHGsuIfKPfj3EZjbchKtqelc6fkhQWHnFMVc4cM_Efzo0i-MeNF2KR7gUN3s7hIxApF0lW9uTG7rWnoDwcay33QsNQkWl7uLIKEzopoibm7WHHtkofbgpa9XN_Z4/s1600/traceUpperLevelDNS.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrAO5vueHOHGsuIfKPfj3EZjbchKtqelc6fkhQWHnFMVc4cM_Efzo0i-MeNF2KR7gUN3s7hIxApF0lW9uTG7rWnoDwcay33QsNQkWl7uLIKEzopoibm7WHHtkofbgpa9XN_Z4/s1600/traceUpperLevelDNS.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 12</strong>: Running a trace route from my custom domain</td></tr>
</tbody></table>
So now you can see how the actual Traffic Manager DNS that you pick can be anything you want, it doesn't really matter what it is.<br />
<br />
How does all this look, consider the new amended high-level architecture diagram in figure 13 below:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL9dh8rFKuKFTFYLLM4dO_l4Cm3elVA1XsidwhDuRxGkPE-SvvlE3asJC5eFDKpQhK5pfMgl_wYvZX97R3EZRfzgKfPZ0L4UpJQLWGID4y_alBE1EfiBEbcLTFoVtBfjL3NoE/s1600/DRStrategyWithTrafficManager.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL9dh8rFKuKFTFYLLM4dO_l4Cm3elVA1XsidwhDuRxGkPE-SvvlE3asJC5eFDKpQhK5pfMgl_wYvZX97R3EZRfzgKfPZ0L4UpJQLWGID4y_alBE1EfiBEbcLTFoVtBfjL3NoE/s1600/DRStrategyWithTrafficManager.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 13</strong>: Complete high-level architecture diagram using Traffic Manager for DR</td></tr>
</tbody></table>
<br />
<strong><span style="font-size: x-large;">Conclusion</span></strong><br />
<div>
So I think the Windows Azure Traffic Manager is a good solution at solving your Windows Azure failover needs. Checkout the Traffic Manager training lab for a hands-on exercise on how to use it in more detail.<br />
<br /></div>
<div>
In this article, I have also used a public DNS registrar, but if your users are within a corporate LAN but you want to make use of a public cloud platform like Windows Azure, the same concepts apply to an internal DNS server farm.<br />
<br /></div>
<div>
In this blog post, I wanted to show how DR can be done in a PaaS model like Windows Azure - hopefully you can see how easy it is with Windows Azure Traffic Manager.</div>Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-2870559890084733702012-03-29T20:53:00.000+00:002012-03-29T20:53:27.583+00:00Buxton Sketch font for use with the patterns & practices style Visio stencilI wrote a blog post recently that included a link where you can download a Microsoft Visio 2010 stencil that resembles the stencils the Microsoft patterns & practices team use here: <a href="http://www.simonrhart.com/2012/03/how-to-create-architecture-diagrams.html">http://www.simonrhart.com/2012/03/how-to-create-architecture-diagrams.html</a><br />
<br />
You can download this stencil here: <a href="https://bitbucket.org/azurebook/windows-media-remote-control/src/2ec03aa26249/Artefacts/Diagramming/Templates/AzureBook.vss">https://bitbucket.org/azurebook/windows-media-remote-control/src/2ec03aa26249/Artefacts/Diagramming/Templates/AzureBook.vss</a><br />
<br />
I created it on a machine that runs the Windows 8 Consumer Preview build and used a font called Buxton Sketch as it looks like a handwritten font and looks quite good for a diagramming white board effect. It seems Windows 8 CP already has the needed Buxton Sketch font installed as part of the standard OS install. So if you haven't got that font installed on your machine when you fire up the stencil (and Windows 7 doesn't), Visio will just default to its default font which doesn't look very good.<br />
<br />
So you need to download the Buxton Sketch font and install it from here: <a href="http://fontsforweb.com/font/generatezip/?id=1049">http://fontsforweb.com/font/generatezip/?id=1049</a> I will upload this to bitbucket in due course.<br />
<br />Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com1tag:blogger.com,1999:blog-38895959.post-19822021092628114592012-03-24T14:00:00.000+00:002012-03-24T14:04:09.696+00:00Git and remote branchesIf you use Git as a source control system, and if you're anything like me, you might forget the commands to push a local branch to create a new remote branch on origin or to just create a remote branch from master or to delete remote branches etc..<br />
<br />
There are a couple posts that I read periodically whenever I need to do those things as I simply don't use them enough in order to remember them unless I write scripts to do so (which I try to avoid as this obfuscates Git for other Git users).<br />
<br />
The first one is here:<br />
<a href="http://gitready.com/beginner/2009/02/02/push-and-delete-branches.html">http://gitready.com/beginner/2009/02/02/push-and-delete-branches.html</a><br />
<br />
and this one is very good:<br />
<a href="http://www.zorched.net/2008/04/14/start-a-new-branch-on-your-remote-git-repository/">http://www.zorched.net/2008/04/14/start-a-new-branch-on-your-remote-git-repository/</a>Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-4300581725443437072012-03-23T09:00:00.000+00:002012-03-26T08:58:46.653+00:00Today is my last day at Smart421<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUT7-4lOt9aAc0nJhnZJ43lhN0zfbLRlWcyiFlNs0wKmAopcDNAGS1yt7MQKXHa36P3xT1wvumF3aXmN2Z_NhWRdxq4TZxS87ohrwKS4Ry77T6wNr36dGObqg6IVx-uhuloH4/s1600/Smart421.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUT7-4lOt9aAc0nJhnZJ43lhN0zfbLRlWcyiFlNs0wKmAopcDNAGS1yt7MQKXHa36P3xT1wvumF3aXmN2Z_NhWRdxq4TZxS87ohrwKS4Ry77T6wNr36dGObqg6IVx-uhuloH4/s1600/Smart421.png" /></a></div>
<br />
Today is my last day at Smart421. It's been fairly short (1.5 yrs) but it's been a very memorable varied experience!<br />
<br />
I blogged about joining Smart in November 2010 here: <a href="http://www.simonrhart.com/2010/11/smart421.html">http://www.simonrhart.com/2010/11/smart421.html</a><br />
<br />
As mentioned in that blog post I had hoped to become a TOGAF practitioner, I am not TOGAF certified (not taken the course or exams) but I have gained a much broader level of architecture experience and not just application architecture.<br />
<br />
Being a Smartie (permie at Smart421) has been very different from most companies I have worked at. They have a very flat hierarchy and a very family feel to the place. For instance, the Managing Director - Neil Miles periodically buys everyone fish and chips from a fish and chip van that parks up outside the office on a Friday! how cool is that :) The CTO Robin Meehan often attends techie developer user group sessions in London in response to someone sending a message to one of the practises distribution lists! I can have a beer with the management team as if they were on my team on a project.<br />
<br />
When you're out on a customers site and having to stay in a hotel, every few months, most of the management team will come down and take the whole team out for supper and drinks which last well into the night.<br />
<br />
So why I am leaving? well I was contacted by Microsoft head hunter - Alina Burnus back in November regarding a World Wide Windows Azure CoE (Centre of Excellence) Solution Architect role (wow, what a mouthful). After reading the job specification for this role I jumped at the opportunity. Windows Azure, Solution Architecture and helping customers and the community to deliver business benefits using technology are what I want to do every day. I love writing code, but there is a time when you no longer code in your day job. I also love Technical Architecture and no doubt there will be an element of this in my new role. I will still stay current with language features, trends and patterns, I just won't be knee deep in code every day.<br />
<br />
3 months, 9 interviews and n hours later, I was offered a job on this great team headed up by <a href="http://blogs.msdn.com/b/steve_fox/" target="_blank">Steve Fox</a>.<br />
<br />
Having been a Microsoft Device Application Development MVP in the past, I have a fairly good idea what it is like at Microsoft. It's also not that my interests have changed in that I don't focus purely on mobility anymore, my job has lead me to be much broader in terms of Solution Architecture and less focused on the detail. I will always have a passion for mobile as I think it's one the most challenging and rewarding forms of software development today.<br />
<br />
The team will be doing a full day pre-conference bootcamp at both TechEd EMEA and TechEd North America this year: TechEd EMEA: <a href="http://europe.msteched.com/PreCons">http://europe.msteched.com/PreCons</a> TechEd USA: <a href="http://northamerica.msteched.com/preconferenceseminars#fbid=s9KpbHxjNTg">http://northamerica.msteched.com/preconferenceseminars#fbid=s9KpbHxjNTg</a><br />
<br />
I start at Microsoft on the 10 April and no doubt you will hear about many cool and exciting things coming out of the cloud space in the form of Azure...stay tuned...Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com5tag:blogger.com,1999:blog-38895959.post-29810706840003296392012-03-21T22:09:00.000+00:002012-03-21T22:14:28.467+00:00Windows 8 - not able to install Windows Identity FoundationIf you try to install <a href="http://www.microsoft.com/download/en/details.aspx?id=17331" target="_blank">Windows Identity Foundation (WIF) runtime system</a> (pre-req for the WIF SDK) on Windows 8 Consumer Preview, you will get the error "<b>The update is not applicable to your computer</b>" in figure 1:<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8-FO3kmOVkUSeIgmrLfik8kVw4l49GOwmXQowuV8crDRI2pnncKAoJ_H4v4BGn3UQXkBpm2oZAHfph88qnvkBqW-C2ZYBHT3swGJxYN1XeUa53x6Sj7Q__N4u85ImqcPykQU/s1600/wifFailed.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8-FO3kmOVkUSeIgmrLfik8kVw4l49GOwmXQowuV8crDRI2pnncKAoJ_H4v4BGn3UQXkBpm2oZAHfph88qnvkBqW-C2ZYBHT3swGJxYN1XeUa53x6Sj7Q__N4u85ImqcPykQU/s1600/wifFailed.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Figure 1</b>: Error when trying to install WIF on Windows 8</td></tr>
</tbody></table>
To fix this, the WIF runtime system is now part of Windows 8 and can be installed as a Windows feature like IIS, so the WIF runtime system doesn't need to be downloaded. To do this run <b>Control Panel</b> > <b>Programs and Features</b> > <b>Turn Windows Features on or off. </b><br />
<br />
Then check the Windows Identity Foundation 3.5 check box in the <b>Windows Features</b> dialogue box and click OK:<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAcTgWnmRnvsqSEnceUK74PmkHXMohg1SEdpgFCotFvRxQJM864xUH89__HSY46gYBuEQkgvCiCd1DRugdvmNDY9my56DXT1BlOZDwZg4VRXdsDKjhs6u3XfFViXkRRGCASIA/s1600/installingWIFOnWin8.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAcTgWnmRnvsqSEnceUK74PmkHXMohg1SEdpgFCotFvRxQJM864xUH89__HSY46gYBuEQkgvCiCd1DRugdvmNDY9my56DXT1BlOZDwZg4VRXdsDKjhs6u3XfFViXkRRGCASIA/s1600/installingWIFOnWin8.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Figure 2</b>: Installing WIF on Windows 8</td></tr>
</tbody></table>
<br />
Once you have done that then you'll be able to install the <a href="http://www.microsoft.com/download/en/details.aspx?id=4451" target="_blank">WIF SDK</a>.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-SGe8zNUw-X4cSTCmxL1vy_ig_MxA9bv2zgeJ10VEIa6sIGuRI-0sjqmrTFpeWJ8W6Q_AOu-kcCytR06WgKHnY70mS7uNZx1n3Dd4L6jJR5S7BclF-M1UMVSGg3AY-lvCQUk/s1600/WIFSDK.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-SGe8zNUw-X4cSTCmxL1vy_ig_MxA9bv2zgeJ10VEIa6sIGuRI-0sjqmrTFpeWJ8W6Q_AOu-kcCytR06WgKHnY70mS7uNZx1n3Dd4L6jJR5S7BclF-M1UMVSGg3AY-lvCQUk/s1600/WIFSDK.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Figure 3</b>: Now able to install WIF SDK on Windows 8</td></tr>
</tbody></table>
<br />
Once the WIF SDK installer is complete, you'll be able to reference the WIF API's from Visual Studio and use WIF on Windows 8 for your federated identity needs.Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com7tag:blogger.com,1999:blog-38895959.post-2649977838098783442012-03-19T19:49:00.000+00:002012-03-19T19:52:35.336+00:00How to create architecture diagrams like the Microsoft p&p team using Visio 2010Have you ever wanted to create the same type of diagrams the <a href="http://msdn.microsoft.com/en-us/library/ff921345.aspx" target="_blank">patterns & practices team</a> do at Microsoft in terms of the shapes and themes they use?<br />
<br />
Well, as I am co-authoring a Windows Azure book, it is important we all use the same stencil for our architecture diagrams. So I decided to create a Microsoft Visio 2010 stencil that looks much like the one the p&p team uses.<br />
<br />
Here is an example of a simple diagram from the chapter I am writing on Service Bus. This is the very first diagram in the book to explain the Windows Azure Service Bus Relay feature:<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidK-tq_HgD6Kojwo-CEudMcd5qTG6psKsYjGrJ48GlDw0JFVhV9KdlIfJQVJJBPRvxTbKgIGI9mo_7JO0Yu-1H3GYRo8pb7OHQt_j5DKklwUEkBoCjHsF361mVprFDhjy8s44/s1600/SimpleRelay.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidK-tq_HgD6Kojwo-CEudMcd5qTG6psKsYjGrJ48GlDw0JFVhV9KdlIfJQVJJBPRvxTbKgIGI9mo_7JO0Yu-1H3GYRo8pb7OHQt_j5DKklwUEkBoCjHsF361mVprFDhjy8s44/s1600/SimpleRelay.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Figure 1</b>: Example p&p like diagram in Visio 2010</td></tr>
</tbody></table>
<br />
It would be great to hear some feedback on this stencil.<br />
<br />
You can get this stencil here: <a href="https://bitbucket.org/azurebook/windows-media-remote-control/src/2ec03aa26249/Artefacts/Diagramming/Templates/AzureBook.vss">https://bitbucket.org/azurebook/windows-media-remote-control/src/2ec03aa26249/Artefacts/Diagramming/Templates/AzureBook.vss</a><br />
<br />Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com2Norwich, UK52.6308859 1.29735550.0844614 -3.756356 55.1773104 6.3510659999999994tag:blogger.com,1999:blog-38895959.post-12578884949060837912012-03-13T18:05:00.000+00:002012-03-13T20:46:14.960+00:00Apache Hadoop on Windows Azure - Now in CTPThis is a huge subject - <a href="http://en.wikipedia.org/wiki/Big_data" target="_blank">Big Data</a> so I'm not going to attempt to explain what it is here. But what I will say is the <a href="https://www.hadooponazure.com/" target="_blank">Apache Hadoop project is now available in Azure as a CTP offering</a> (which is one way to implement Big Data). You also have the opportunity to get on the Technical Adoption Programme (TAP) and work directly with the Microsoft Azure product group.<br />
<br />
Being on the TAP enables you to give feedback on what you think of early drops of Microsoft software which in turn allows you to help shape Microsoft products.<br />
<br />
Here is a snip from the Apache Hadoop project website on what it is:<br />
<br />
<blockquote class="tr_bq">
The Apache™ Hadoop™ project develops open-source software for reliable, scalable, distributed computing. </blockquote>
<blockquote class="tr_bq">
The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using a simple programming model. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-avaiability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-availabile service on top of a cluster of computers, each of which may be prone to failures.</blockquote>
<br />
To learn more about the Apache Hadoop project, see here: <a href="http://hadoop.apache.org/">http://hadoop.apache.org/</a><br />
<br />
For more information on Hadoop for Windows Azure, see here: <a href="https://www.hadooponazure.com/">https://www.hadooponazure.com/</a> and to register to be considered for this CTP, please see here: <a href="https://connect.microsoft.com/SQLServer/Survey/Survey.aspx?SurveyID=13697">https://connect.microsoft.com/SQLServer/Survey/Survey.aspx?SurveyID=13697</a><br />
<br />Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0Norwich, Norfolk, UK52.6308859 1.29735552.5537859 1.1394265000000001 52.707985900000004 1.4552835tag:blogger.com,1999:blog-38895959.post-80801072702412781622012-03-09T21:47:00.000+00:002012-03-13T17:04:37.715+00:00Smart421 - UK Azure User Group Reference Architecture using Service Bus for pub/sub<b>UPDATE 12/03/12:</b> Source code for my presentation is now available here: <a href="https://bitbucket.org/azurebook/windows-media-remote-control/overview">https://bitbucket.org/azurebook/windows-media-remote-control/overview</a> You will need to edit various config files to include your X.509 certs, Service Bus and ACS namespaces and ACS Simple Web Token (SWT) symmetric keys. I will write a blog post on how to do all these things and get it running in due course.<br />
<br />
I presented at the recent <a href="http://www.lwaug.net/" target="_blank">UK Windows Azure User Group</a> on Tuesday 6th March. You can view my Prezi presentation here: <a href="http://t.co/FH4S03gL" style="font-family: 'Times New Roman', serif; font-size: 12pt;">http://t.co/FH4S03gL</a><br />
<br />
My colleague Mark Want has written a post regarding this event on the Smart421 blog here: <a href="http://smart421.wordpress.com/2012/03/09/uk-windows-axure-user-group/">http://smart421.wordpress.com/2012/03/09/uk-windows-axure-user-group/</a><br />
<br />
I'm really starting to like this group and getting to know the folks from this group is great fun. They are now starting to run events in Manchester as well as London.<br />
<br />
I talked about a reference architecture that I have been working on in my spare time over the last few weeks. The code will be available soon and I will blog and tweet when made available.<br />
<br />
The solution uses quite a few features of Azure such as: MVC 4 Web Role, ACS, SAML 2.0 and SWT tokens, Google as an identity provider, Service Bus Relay services, Topics and subscriptions, Castle Windsor with the Service Bus and Topics/Subscriptions for pub/sub, a DR strategy and global DNS to enable DR and hide the cloudapp.net domain.<br />
<br />
Next I want to show ADFS as an STS over ACS, Idempotent messaging when using WCF with the Service Bus and load testing using VM Roles.<br />
<br />
<br />Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-44942663863235279052012-03-01T23:44:00.000+00:002012-03-02T11:15:50.466+00:00Getting the RSS feed from an iTunes podcastHave you ever wanted to get the RSS feed URI from a iTunes podcast page because you don't want iTunes installed on your machine?<br />
<br />
I found this website (<a href="http://itunes.so-nik.com/">http://itunes.so-nik.com/</a>) that gives you the RSS XML URI from the passed iTunes URL:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM8_x1XNyS2XEtszigyMpu8muZgVxxTVhF46U_4ScjfvZBKzaUajXbP-d3JWh7S5uiTPhCztH3ZLGanir350exLpl5MPdRAVfhz_Fd2TabMKaA11qJDbpWzDHJlGr1ARZnc8U/s1600/so-nik1.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM8_x1XNyS2XEtszigyMpu8muZgVxxTVhF46U_4ScjfvZBKzaUajXbP-d3JWh7S5uiTPhCztH3ZLGanir350exLpl5MPdRAVfhz_Fd2TabMKaA11qJDbpWzDHJlGr1ARZnc8U/s1600/so-nik1.PNG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Figure 1</b>: Enter iTunes URL into the text box and hit submit</td></tr>
</tbody></table>
Simply enter the iTunes podcast URL into the text box in the page and hit Submit. In my example I wanted the RSS feed to this podcast: <a href="http://itunes.apple.com/podcast/judge-jules-presents-judgement/id302973072">http://itunes.apple.com/podcast/judge-jules-presents-judgement/id302973072</a><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjfXkfHoXcMtpbQ7BtCZZClA4rqoksNbqmt2EgeAqDe7eUtiG-svi1PbAlGM0nAqQL8yAcd-nQbDf7P-zAagF1fi-QxgkNSgdi_kExfr6_Wd8QsRWjp8xldTbBsD5jDGIbBRs/s1600/so-nik2.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjfXkfHoXcMtpbQ7BtCZZClA4rqoksNbqmt2EgeAqDe7eUtiG-svi1PbAlGM0nAqQL8yAcd-nQbDf7P-zAagF1fi-QxgkNSgdi_kExfr6_Wd8QsRWjp8xldTbBsD5jDGIbBRs/s1600/so-nik2.PNG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>Figure </b>2: Result of the tool that greps the RSS URI</td></tr>
</tbody></table>
The tool (as if by magic) figures out what the RSS feed is so you can use it in other non-proprietary tools. I wanted the above for my Zune HD. Nice eh!?Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-78092918477326478932012-02-28T20:52:00.000+00:002012-02-28T20:52:42.627+00:00Where is the "New Virtual Machine Role" menu option in Visual Studio 2010?A while back I wrote about the new-ish VM Role feature in Windows Azure (still in beta right now). You can read that post <a href="http://www.simonrhart.com/2012/01/vm-role-custom-vhd-instance-in-azure.html" target="_blank">here</a>.<br />
<br />
If you're not sure what the VM Role is, then this <a href="http://msdn.microsoft.com/en-us/gg502178" target="_blank">MSDN post</a> should clear that up for you.<br />
<br />
Once you have joined the VM Role beta programme, the status should have changed in the Azure Portal to <strong>Active, </strong>and you should have received an email with links to <span style="font-family: "Courier New", Courier, monospace;">.reg</span> files which alter relevant Azure Visual Studio registry keys which in turn enables this menu option in Visual Studio.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy7Fh7lEYd2vjjdkHJimmu5Kh3bVdVb7QHXIAa97F8nNNxrGX8FiKFrBrnd0IVqw4vAnFInX744hk3WF2gg9cLbUY3AsBRfjDES3PHBLdtzprW05jdK9GHc8Dmxnvqlsy5oqg/s1600/vmroleActive.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy7Fh7lEYd2vjjdkHJimmu5Kh3bVdVb7QHXIAa97F8nNNxrGX8FiKFrBrnd0IVqw4vAnFInX744hk3WF2gg9cLbUY3AsBRfjDES3PHBLdtzprW05jdK9GHc8Dmxnvqlsy5oqg/s1600/vmroleActive.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 1</strong>: Active VM Role feature</td></tr>
</tbody></table>
Unfortunately for me, I received no such email. So I searched the Internet for them and found the location where they can be downloaded.<br />
<br />
For 64-bit operating systems see here: <a href="http://go.microsoft.com/fwlink/?LinkID=206860">http://go.microsoft.com/fwlink/?LinkID=206860</a><br />
For 32-bit operating systems see here: <a href="http://go.microsoft.com/fwlink/?LinkID=205313">http://go.microsoft.com/fwlink/?LinkID=205313</a><br />
<br />
Alternatively, you can simply use this key for 64-bit:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">[HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Windows Azure Tools for Microsoft Visual Studio 2010\1.0]<br />"VirtualMachineRoleEnabled"=dword:00000001</span><br />
<br />
For 32-bit:<br />
<br />
<span style="font-family: "Courier New", Courier, monospace;">[HKEY_CURRENT_USER\Software\Microsoft\Windows Azure Tools for Microsoft Visual Studio 2010\1.0]<br />"VirtualMachineRoleEnabled"=dword:00000001</span><br />
Once you have run either of those commands, or edited your registry manually, restart Visual Studio and you should now see the new menu option that will enable you to create a VM role to deploy to Windows Azure:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimyFI-0AZMMaoF_NK3SJMv3cjEOeLZ1cXqfqYA27E0bfjAGpyI2_9zuetam4TGs7qx8jVLvbhKbxp9-1NX6PsP5_M-lZawtvt0WnZExbdUWSvjUCat3zxiTsHBGoDePGBImFU/s1600/vmroleoptioninVS.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimyFI-0AZMMaoF_NK3SJMv3cjEOeLZ1cXqfqYA27E0bfjAGpyI2_9zuetam4TGs7qx8jVLvbhKbxp9-1NX6PsP5_M-lZawtvt0WnZExbdUWSvjUCat3zxiTsHBGoDePGBImFU/s1600/vmroleoptioninVS.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><strong>Figure 2</strong>: The new "New Virtual Machine Role" menu option</td></tr>
</tbody></table>
<br />
Enjoy!<br />Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0Norwich, Norfolk, UK52.6308859 1.29735552.5537859 1.1394265000000001 52.707985900000004 1.4552835tag:blogger.com,1999:blog-38895959.post-2822314116415193402012-02-16T23:38:00.001+00:002012-02-16T23:45:43.303+00:00Testing a Custom Filter Provider in ASP.NET MVC 3There are many <a href="http://www.thecodinghumanist.com/blog/archives/2011/1/27/structuremap-action-filters-and-dependency-injection-in-asp-net-mvc-3">good articles</a> published on how to write a <a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.filterattributefilterprovider%28v=vs.98%29.aspx">custom Filter Provider in MVC 3</a> in order to make dependency injection possible on the web. So I'm not going to talk about that, but there doesn't seem to be many articles on how to test those custom filter providers.<br />
<br />
The role of the filter provider is to simply return filters for a given controller, but this post assumes you know what a filter provider does so I'm going to skip the explaination. I've provided an MSDN link to the FilterProvider technical page for more information.<br />
<br />
The <span style="font-family: 'Courier New', Courier, monospace;">FilterAttributeFilterProvider</span> as provided by the ASP.NET MVC framework looks like the following: (I have the ASP.NET MVC source code on my machine, will show how to install and access this code in another post...)<br />
<br />
<pre> public class FilterAttributeFilterProvider : IFilterProvider
{
private readonly bool _cacheAttributeInstances;
public FilterAttributeFilterProvider()
: this(true) {
}
public FilterAttributeFilterProvider(bool cacheAttributeInstances) {
_cacheAttributeInstances = cacheAttributeInstances;
}
protected virtual IEnumerable<filterattribute> GetActionAttributes(ControllerContext
controllerContext, ActionDescriptor actionDescriptor) {
return actionDescriptor.GetFilterAttributes(_cacheAttributeInstances);
}
protected virtual IEnumerable<filterattribute> GetControllerAttributes(ControllerContext
controllerContext, ActionDescriptor actionDescriptor) {
return actionDescriptor.ControllerDescriptor.GetFilterAttributes(_cacheAttributeInstances);
}
public virtual IEnumerable<filter> GetFilters(ControllerContext controllerContext,
ActionDescriptor actionDescriptor) {
ControllerBase controller = controllerContext.Controller;
if (controller == null) {
return Enumerable.Empty<filter>();
}
var typeFilters = GetControllerAttributes(controllerContext, actionDescriptor)
.Select(attr => new Filter(attr, FilterScope.Controller, null));
var methodFilters = GetActionAttributes(controllerContext, actionDescriptor)
.Select(attr => new Filter(attr, FilterScope.Action, null));
return typeFilters.Concat(methodFilters).ToList();
}
}
</pre>
It is the <span style="font-family: 'Courier New', Courier, monospace;">GetFilters</span> method we are interested in as this is the method we override in our custom filter provider to provide things like dependency injection support.<br />
<br />
So your custom filter provider might look something like the following (IoC container StructureMap specific):<br />
<pre>
public class StructureMapFilterProvider : FilterAttributeFilterProvider
{
private readonly IContainer container;
public StructureMapFilterProvider(IContainer container)
{
container = container;
}
public override IEnumerable<Filter> GetFilters(ControllerContext controllerContext,
ActionDescriptor actionDescriptor)
{
var filters = base.GetFilters(controllerContext, actionDescriptor);
if (filters != null)
{
foreach (var filter in filters)
{
container.BuildUp(filter.Instance);
}
return filters;
}
return default(IEnumerable<Filter>);
}
}
</pre>
<br />
In the above filter provider, we are getting a list of filters for the passed controller context, and then calling <span style="font-family: 'Courier New', Courier, monospace;">BuildUp</span> on those instances using StructureMap IoC container. This is a neat feature of StructureMap that allows you to support property injection without having to use decorators in the filter classes. If you'd like to learn more about StructureMaps <span style="font-family: 'Courier New', Courier, monospace;">BuildUp</span> feature, please see this link: <a href="http://codebetter.com/jeremymiller/2009/01/16/quot-buildup-quot-existing-objects-with-structuremap/">http://codebetter.com/jeremymiller/2009/01/16/quot-buildup-quot-existing-objects-with-structuremap/</a><br />
<br />
You probably know already that ideally you'd want to call the <span style="font-family: 'Courier New', Courier, monospace;">base.GetFilters(ControllerContext, ActionDescriptor)</span> to be on an interface so it can be easilly stubbed out in out unit tests, but it's not, its part of the superclass that we are deriving from.<br />
<br />
So we are going to have to construct a <span style="font-family: 'Courier New', Courier, monospace;">ControllerContext</span> and <span style="font-family: 'Courier New', Courier, monospace;">ActionDescriptor</span> in order to pass into our filter provider during testing. All we are really aiming to test here is that the container <span style="font-family: 'Courier New', Courier, monospace;">BuildUp</span> method is called against the filter instance. Your requirement might be slightly different depending on what you are trying to achieve and perhaps the IoC container you might or might not be using. But the principles should be the same.<br />
<br />
Before I show how to test the above we need some supporting code. The first being a mocked controller that is decorated with a filter:<br />
<br />
<pre>public class FilterProviderControllerMock : Controller
{
[CustomErrorHandler]
public void MockAction()
{
}
}</pre>
<br />
So here we simply have a controller with an action named <span style="font-family: 'Courier New', Courier, monospace;">MockAction</span> that includes a custom action and does nothing. Notice how the action is decorated with a <span style="font-family: 'Courier New', Courier, monospace;">CustomErorHandler</span> attribute - which is a custom filter. It's this attribute that we want to inject our dependencies into. I've not shown the code for this as it's not important, what is important is to realise that this filter has dependencies that cannot be injected via the constructor due to limitations in .NET (i.e. it being an attribute).<br />
<br />
First consider the actual test code (note: I'm using <a href="http://code.google.com/p/moq/">Moq</a> as my mocking tool of choice - just because it's a change to <a href="http://ayende.com/blog/tags/rhino-mocks">Rhino</a>):
<br />
<br />
<pre>[TestFixture]
public class StructureMapFilterProviderTests
{
private Mock<IContainer> containerMock;
private StructureMapFilterProvider filterProvider;
private Filter customFilter;
private List<Filter> customFilterCollection;
private CustomErrorHandlerAttribute customActionFilter;
private Mock<HttpContextBase> httpContextMock;
[TestFixtureSetUp]
public void Setup()
{
customActionFilter = new CustomErrorHandlerAttribute();
customFilter = new Filter(customActionFilter, FilterScope.Action, 1);
customFilterCollection = new List<filter>();
customFilterCollection.Add(customFilter);
containerMock = new Mock<icontainer>();
filterProvider = new StructureMapFilterProvider(this.containerMock.Object);
httpContextMock = new Mock<HttpContextBase>();
}
[Test]
public void CanInterceptCreationOfFilters()
{
// Arrange
containerMock.Setup(x => x.BuildUp(customActionFilter));
var controllerMock = new FilterProviderControllerMock();
var routeData = new RouteData();
var controllerContext = new ControllerContext(this.httpContextMock.Object, routeData, controllerMock);
ControllerDescriptor controllerDescriptor = new
ReflectedControllerDescriptor(typeof(FilterProviderControllerMock));
var mockActionMethodInfo = controllerMock.GetType()
.GetMethods(BindingFlags.Public | BindingFlags.Instance)
.Where(x => x.Name.Equals("MockAction")).FirstOrDefault();
ActionDescriptor actionDescriptor = new
ReflectedActionDescriptor(mockActionMethodInfo, "MockAction", controllerDescriptor);
// Act
var filters = filterProvider.GetFilters(controllerContext, actionDescriptor);
// Assert
containerMock.Verify(x => x.BuildUp(this.customActionFilter), Times.Once());
}
}</icontainer></pre>
So what's going on here, there seems to be a lot of code. There is because the superclass filter provider is hard to test due to how it was designed (using inheritance).
So the test above is simply creating a <span style="font-family: 'Courier New', Courier, monospace;">ControllerContext</span> and an <span style="font-family: 'Courier New', Courier, monospace;">ActionDescriptor</span> which is required in order to call the filter provider. Doing these things requires a bit of .NET reflection that would normally be done by the MVC framework at runtime.
Once reflection has been used and the correct action method has been identified, the provider can easily select the correct filter then our custom filter can build it up (inject all required dependencies into the filter). We then finally assert that the build up happens on our custom filter at least once otherwise the test will fail.<br />
<br />
I'm sure in later releases of ASP.NET MVC this will improve, but for now this is a work around to test your custom filter providers.<br />
<br />
This sample code is up on BitBucket here if you want it: <a href="http://code.simonrhart.com/mvc-3-examples/src/5b122b445c86/Testing%20StructureMap%20Filter%20Provider">http://code.simonrhart.com/mvc-3-examples/src/5b122b445c86/Testing%20StructureMap%20Filter%20Provider</a><br />
<br />
Enjoy!Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-81432100367355010652012-01-31T15:17:00.000+00:002012-01-31T15:19:58.028+00:00MakeCert Error: Too many parametersI was just reading this MSDN post on creating a self-signed certificate for use with ADFS: <a href="http://msdn.microsoft.com/en-us/library/bfsktky3.aspx">http://msdn.microsoft.com/en-us/library/bfsktky3.aspx</a><br />
<br />
The command I need, looks like the following:
<br />
<br />
<pre #cccccc;="" #f0f0f0;="" 0px;="" 12px;="" 1px="" 20px;="" 99%;"="" arial;="" auto;="" background:="" black;="" border:="" color:="" dashed="" font-family:="" font-size:="" height:="" left;="" line-height:="" overflow:="" padding:="" text-align:="" width:=""><code style="color: black; word-wrap: normal;">Makecert -r
-pe
-n CN="www.example.com"
-b 05/10/2010
-e 12/22/2011
-eku 1.3.6.1.5.5.7.3.1
-ss my
-sr localmachine
-sky exchange
-sp "Microsoft RSA SChannel Cryptographic Provider"
-sy 12
</code></pre>
<br />
If you copy the sample command from the MSDN page above and run it via the command-line, you'll get error <b>"Too many parameters"</b>. It turns out the dash used in the MSDN post above is actually character: \u2013 (DASH-EN) and not minus \u002D and it's the minus character that the tool is expecting.<br />
<br />
So to make this work, simply replace the hyphen with the minus sign when keying in the command as defined above. In the above sample, I have replaced the incorrect character with the correct one so feel free to just copy and paste it.<br />
<br />
I learned this from here <a href="http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/1e41910f-2f89-439c-93a6-57e5c391d7ca/">http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/1e41910f-2f89-439c-93a6-57e5c391d7ca/</a><br />
<br />
Thanks to Carlos Figueira for finding this.Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com1tag:blogger.com,1999:blog-38895959.post-43604992385499854852012-01-11T23:28:00.003+00:002012-01-13T17:09:14.073+00:00My Microsoft Windows Azure 2012 wish-list<b>UPDATE:</b> Also I'd like to see a version of the Service Bus that's compiled against the .NET Framework v3.5 as not all consumers are able to move to .NET 4 right now.<br />
<br />
I have come up with my Microsoft Windows Azure wish-list for 2012 below (hope the Azure product group read this :)<br />
<div class="MsoPlainText">
</div>
<ol>
<li>Auto scale compute instances (I know third-party tools exist) </li>
<li>Allow for scheduled suspended instances that do not eat compute time and
also allow for auto scaling out/in schedules without having to delete services
from Azure </li>
<li>Load balancing (F5) for compute instances not round robin </li>
<li>Ability to configure topic/subscriptions rules via the Azure Management Portal </li>
<li>Access Control Service support (or any type of federated security support) for SQL Azure for alternate additional security</li>
<li>Out of the box storage
editor for managing blobs, tables and queues (I know 3rd party tools exist and you can do this in Visual Studio) </li>
<li>Developer fabric for Service Bus and Service Bus queues and topics (this would be awesome)</li>
<li>Portal
support for VM roles i.e. uploading VHD's (I know command-line tools exist) </li>
<li>Out of the box support for viewing Service Bus queues and topics and verifying Service Bus endpoints without retrieving the ATOM service bus feed (I know open
source code exists) </li>
<li>Access Control Service support for storage, tables, blobs, and queues </li>
<li>Support for Hadoop/Big Data on Azure or any type of high performance computing perhaps a
instance that targets or VM role to support Windows Server HPC 2008</li>
<li>An easy DR strategy for all Azure services i.e. compute, storage etc.</li>
<li>Managed Service Management API</li>
<li>Give MSDN subscription holders 12 month usage</li>
</ol>
<div>
<br /></div>
<div>
There in no particular order, not asking much am I!</div>
<br />
<div class="MsoPlainText">
<o:p></o:p></div>Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-50519061854009799752012-01-05T23:46:00.003+00:002012-01-06T23:48:52.596+00:00VM Role custom VHD instance in Azure Compute - avoid the gotchas!<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgunllYNkesHNgVjbJC1YFfaoQ-zlNo-v27Kv8pkhWcTQRQoe86_19UlPMriamiY5K7HspfN2mWrJewWZ1NTEc0B7zoaKiLjrwU3py5Il0-68a5UgbouMGuSYCPEqu6RC7L6jY/s1600/windows-azure-logo-nimbo1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" rea="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgunllYNkesHNgVjbJC1YFfaoQ-zlNo-v27Kv8pkhWcTQRQoe86_19UlPMriamiY5K7HspfN2mWrJewWZ1NTEc0B7zoaKiLjrwU3py5Il0-68a5UgbouMGuSYCPEqu6RC7L6jY/s1600/windows-azure-logo-nimbo1.png" /></a></div>
<br />
<strong><span style="font-size: large;">Background on the VM Role for Windows Azure</span></strong><br />
Even though I have a ultimate MSDN account which means I have 1500 hrs of free compute time on Azure, I'm using the free 3 month trial anyone can get regardless of whether you have an MSDN account or not.<br />
<br />
I got this account (let me correct that) I received this Azure account from a colleague due to sickness and haven't given it back! since then I have been exploring many of the new features within Azure using this account. The thing that has caught my attention, is that, many people within the community is referring to the VM Role as IaaS or Microsoft's attempt at IaaS (which it is *not*).<br />
<br />
Steve Plank DPE in Microsoft Reading UK has a very good post on this subject here just to clear up any confusion: (Windows Azure VMRole != IaaS) <a href="http://blogs.msdn.com/b/plankytronixx/archive/2010/10/29/windows-azure-vmrole-iaas.aspx">http://blogs.msdn.com/b/plankytronixx/archive/2010/10/29/windows-azure-vmrole-iaas.aspx</a><br />
<br />
Remember, once your custom VM Role instance is deployed and you are running code on that image, the PaaS model works in the exact same way as a out-of-the-box Azure OS image does when using either Web Role or a Worker Role compute instance. Meaning that on reboot the image could be rebuilt and deployed in another rack or sector and any data you might have written to that particular instance will have been lost.<br />
<br />
VM Role compliments the Worker and Web roles in Azure compute. All these services still fall under the standard PaaS compute model in Azure. It just so happens that you are in control of the actual image (OS image) that gets deployed to the instances you have specified. The image currently (as of Jan 2012) has to be Windows Server 2008 R2 Standard or Windows Server 2008 R2 Enterprise edition. In terms of licencing the OS, this is covered as part of the compute costs when you actually deploy your application to run on the custom image.<br />
<br />
Today (Jan 2012) the VM Role feature is in beta and if you attempt to upload a custom VM VHD to Azure without being in the beta, it will fail - don't learn this the hard way like I did! instead simply request to be in the beta programme from the Azure Management Portal. You can do this by logging onto the Azure portal management web site: <a href="http://windows.azure.com/">http://windows.azure.com/</a> then clicking <strong>Home</strong>. Then right at the top click <strong>Beta Programmes</strong>. You should then see the VM Role feature, simply click the check box then click Apply or OK. Once you do this you will normally be accepted within 1 day or so.<br />
<br />
My Azure 3 month trial account has now been disabled so I can't show screen shots until I sign up using my MSDN account which I haven't done yet. Finding this beta programme link isn't hard though.<br />
<br />
<strong><span style="font-size: large;">Types of VM technologies supported</span></strong><br />
Notice I keep saying VM Role <strong>VHD</strong> instance. Yes you are correct, Azure today only supports Hyper-V virtual images. I am unaware of any technology that will create these images other than a physical Windows Server machine running Hyper-V. I do happen to have a couple lying around so creating them wasn't an issue for me but I can see it being a problem for folks that do not have hardware lying around to use. I'm interested to hear any potential solutions around this. My desktop vitalisation technology of choice today is Oracle VirtualBox. VirtualBox can mount and run VHD's but I'm unaware of being able to actually create them using VirtualBox.<br />
<br />
<strong><span style="font-size: large;">Uploading a VM Role image to Windows Azure</span></strong><br />
This post talks you through the entire process of creating a VHD and deploying to Azure, it's very good: <a href="http://msdn.microsoft.com/en-us/gg502178">http://msdn.microsoft.com/en-us/gg502178</a> This article also shows you how to target that custom image in Visual Studio.<br />
<br />
The syntax is slightly wrong for the upload of a VHD image though. It is actually quite strange with the odd quotes and hyphens etc. Just to be clear, today, there is no support for uploading a VHD using the portal, you need to use the Azure SDK tool <strong>csupload</strong>. I am unaware of a RESTful API to do this, no doubt there is.<br />
<br />
An example of it's usage is as follows:<br />
<br />
<pre style="background: #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: 126px; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 98.68%;"><code style="color: black; word-wrap: normal;"> csupload Add-VMImage -Connection "SubscriptionId=xxxxxxxx-388a-4304-90c7-d239c3843624;
CertificateThumbprint=xxxxxxxxxxxxxxxxxxxxA115BE5D35A45D4E18F7"
-Description "Base image Windows Server 2008 R2"
-LiteralPath "\\<server>\nodes\baseimage.vhd"
-Name baseimage.vhd -Location "North Europe"
</code></pre>
<br />
You'll need to run that command from an administrative Azure command-prompt.<br />
<br />
Of course you need to use you're own Windows Azure Subscription ID and x.509 certificate thumbprint. Note, regarding certificates, even if you have the correct thumbprint, you will need the actual certificate installed in the certificate store from where you run this upload command.<br />
<br />
The tool is quite clever in that it compresses the VM image before upload. The web site link above covers this process in quite nice detail and where you go from here.<br />
<br />
Be patient though, this process takes a while to run - of course depending on your upload speed.<br />
<br />
<strong><span style="font-size: large;">So why would I ever use a VM Role?</span></strong><br />
This has been talked about so much already in the community but I though I'd add my view on the subject.<br />
<br />
There are many cases where you simply need custom code running within the standard image that would otherwise not be possible or installable as a start up custom task (the process of running custom installers when the instance is booted and comes out of sys-prep mode).<br />
<br />
One example is performance testing. It could be that you setup a core base image with a tool such as LoadUI for performing performance testing in the cloud saving the need to run this testing on on-premise hardware. This could also include configuration for performance counters.<br />
<br />
There are many other scenarios similar to the above. But remember, treat any data being written locally as transient data.Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-61996901731235166162011-12-31T20:20:00.000+00:002011-12-31T20:27:26.327+00:00The trust relationship between this workstation and the primary domain failedThis evening I encountered an error while attempting to log onto my Windows 7 client machine: <span style="font-family: "Courier New", Courier, monospace;">The trust relationship between this workstation and the primary domain failed</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-icPvK10bSmc/Tv9spWVLU_I/AAAAAAAAAlY/0lV-GYF-6EM/s1600/Windows7domaintrustissue.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" rea="true" src="http://2.bp.blogspot.com/-icPvK10bSmc/Tv9spWVLU_I/AAAAAAAAAlY/0lV-GYF-6EM/s1600/Windows7domaintrustissue.png" /></a></div>
<div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;">
<br /></div>
<div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;">
I have a Windows Server 2008 R2 domain controller running DHCP, DNS and of course ADDS.<br />
<br />
I figured out the issue (although I would have never of suspected it) moments before the error, I was reconfiguring the DNS IP address for a scope against my DHCP server.</div>
<div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;">
<br /></div>
<div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;">
Below is the DHCP scope editor for DHCP in Windows Server 2008 R2. This is a fairly old box which I haven't changed that much over 2 or so years and it is used by many devices/machines.</div>
<div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;">
<br /></div>
<div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;">
Searching the web didn't really give any firm solutions other than to rejoin to the domain. so I tried that and it worked.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-MPxK7VFWpM4/Tv9tiKM9I5I/AAAAAAAAAlw/t-dXzCmWALg/s1600/domaintrustissue.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" rea="true" src="http://3.bp.blogspot.com/-MPxK7VFWpM4/Tv9tiKM9I5I/AAAAAAAAAlw/t-dXzCmWALg/s1600/domaintrustissue.png" /></a></div>
<br />
I think it would be a good idea to raise a bug report for this.<br />
<br />
Happy new year!Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-29638341407796347392011-12-08T19:45:00.001+00:002012-01-16T22:18:52.873+00:00London Windows Azure User Group LWAUG - first meeting updateLWAUG - what a mouthful! As mentioned in an earlier post, I attended the LWAUG first meeting on Tuesday night in London. I thoroughly enjoyed it and learned a lot from it. I also found it particularly useful talking to various folks during breaks and after the talks - as I do with most user groups, engaging with members and exchanging experiences/knowledge is one of the reasons I attend.<br />
<br />
Sadly though, I could only stay for Richard Conway's talk on Service Management API's in Windows Azure. Service Management API's allow you to programmatically create and deploy services into Azure. I missed Andy Cross's talk on diagnostics as I had to get back to Norfolk, I didn't get home until 00:30am. Andy's slides can be obtained here: <a href="http://lwaugbe.blob.core.windows.net/talks/Fluent%20Diagnostics%20Dec%2011.pptx">http://lwaugbe.blob.core.windows.net/talks/Fluent%20Diagnostics%20Dec%2011.pptx</a>. (note the use of Azure blob storage to store the files!). <br />
<br />
I am told some of the service management API's as demoed by Richard are undocumented. Everything talks via REST in Azure, sorry SOAP folks, nothing to see! REST is removing all the fluff you get with SOAP. SOAP just doesn't scale when you're trying to consume services over constrained low-bandwidth networks such as EDGE and GPRS. As we have a ever so increasing breadth of varied connected devices, i.e. net books, smart phones, laptops, PDAs, tablets etc this is a very big deal. So I'm glad the Microsoft Azure architects stuck with REST in Azure. Anyway, I think this is a big subject and one we could discuss at a future LWAUG event(s).<br />
<br />
See here for documentation around Service Management REST API's in Azure: <a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee460812.aspx">http://msdn.microsoft.com/en-us/library/windowsazure/ee460812.aspx</a> it seems fairly extensive, those messages can easily be sent via Fiddler so you don't need to write anything to play around with the API.<br />
<br />
You can download Richards slides here: <a href="http://lwaugbe.blob.core.windows.net/talks/Service%20Management%20Dec%2011.pptx">http://lwaugbe.blob.core.windows.net/talks/Service%20Management%20Dec%2011.pptx</a> (again from blob storage)<br />
<br />
Also Richard has uploaded his code used in his demo's here: <a href="http://lwaugbe.blob.core.windows.net/talks/HostedServices.etc.zip">http://lwaugbe.blob.core.windows.net/talks/HostedServices.etc.zip</a> definitely worth looking at if you want to auto-deploy your Windows Azure services into Azure Compute via mechanisms like continuous deployment for seamless integration for your testers and developers.<br />
<br />
I'm looking forward to the next meet.Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-67012952627297662762011-12-05T17:51:00.001+00:002011-12-05T18:08:31.985+00:00London Azure User Group first meeting - 6th December<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5_nyvqj1C8NEAJUhQSOc3qLSivdfqYuT9ybhUa5aROfgqRft53SuFDinFMX3kSIJAwKOoq9xzdfO1fTpOiJnZqVyl1qu9hetW0xplXWh0MC_gk4XZbgQ7rPfu7oNlqOUQwsg/s1600/lwaug.png" imageanchor="1" style="clear: right; cssfloat: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" dda="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5_nyvqj1C8NEAJUhQSOc3qLSivdfqYuT9ybhUa5aROfgqRft53SuFDinFMX3kSIJAwKOoq9xzdfO1fTpOiJnZqVyl1qu9hetW0xplXWh0MC_gk4XZbgQ7rPfu7oNlqOUQwsg/s1600/lwaug.png" /></a></div>
Tomorrow night (6th December 2011) I'll be attending the new <a href="http://www.lwaug.net/">London Windows Azure User Group</a> meeting near Liverpool Street.<br />
<br />
I learn't about it when I attended the recent <a href="http://plankytronixx.com/azbootcamp.aspx">Windows Azure Bootcamp</a> run by Steve Planky due to the fact that the person that was mean't to go couldn't due to sickness, so I went instead. <br />
<br />
I plan to do future presentations for this group and looking forward to it.<br />
<br />
There is another Azure user group called UK AzureNet that started in 2009. Lately it has been rather quiet so it's good to see some interest in Azure once again in the community.<br />
<br />
If you are quick there seems to be a couple places left, register here: <a href="http://www.lwaug.net/">http://www.lwaug.net/</a>Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0tag:blogger.com,1999:blog-38895959.post-26859267412917477042011-12-04T22:04:00.000+00:002012-03-13T16:08:33.661+00:00Why I prefer BitBucket over GitHub<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiSydQMGoCV2ll-YdFDQcwILAfnp9NKFijUcVnCcNv6xD-WeTjTv_jlA5V3MtDssKg58MaXSrWyVc188p3pk2MG0Mu0qDwu2_UZk5mRxubzOhyphenhyphenklSf9H8-yB8O7JUQOK2F1sM/s1600/github.jpg" imageanchor="1" style="cssfloat: left; margin-left: 1em; margin-right: 1em;"><img border="0" hda="true" height="88" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiSydQMGoCV2ll-YdFDQcwILAfnp9NKFijUcVnCcNv6xD-WeTjTv_jlA5V3MtDssKg58MaXSrWyVc188p3pk2MG0Mu0qDwu2_UZk5mRxubzOhyphenhyphenklSf9H8-yB8O7JUQOK2F1sM/s200/github.jpg" width="200" /></a></div>
<div style="border: currentColor;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn2096MqL1UMiqBbyoCqbeJJ8SLePbDsmh6YYGms89YncEKrybGeQOfjEbhcbrDQDVpBLCg8sTTALdkR3bVNCFAUV4M4q_ZB-57HSyYN0SCr4vxoQJZepzeZRmr__yb1xBlmw/s1600/bitbucket-now-with-git1.png" imageanchor="1" style="cssfloat: right; margin-left: 1em; margin-right: 1em;"><img border="0" hda="true" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn2096MqL1UMiqBbyoCqbeJJ8SLePbDsmh6YYGms89YncEKrybGeQOfjEbhcbrDQDVpBLCg8sTTALdkR3bVNCFAUV4M4q_ZB-57HSyYN0SCr4vxoQJZepzeZRmr__yb1xBlmw/s320/bitbucket-now-with-git1.png" width="320" /></a></div>
<div style="border: currentColor;">
<strong>UPDATE 07/01/2012:</strong> Thanks to Atlassian for the free BitBucket T-Shirt! :)<br />
<br />
I don't really care that GitHub has more repositories or has more traffic or is more popular than X in this case <a href="http://bitbucket.org/" target="_blank">BitBucket</a>. All I really care about is features, and I think BitBucket has more of them.<br />
<br /></div>
I wrote about how excited I was about BitBucket a few days ago on my other blog here: <a href="http://smart421.wordpress.com/2011/11/17/why-i-like-bitbucket/">http://smart421.wordpress.com/2011/11/17/why-i-like-bitbucket/</a><br />
<br />
I recently read this post: <a href="http://www.pocoo.org/~blackbird/github-vs-bitbucket/bitbucket.html">http://www.pocoo.org/~blackbird/github-vs-bitbucket/bitbucket.html</a> that talks how GitHub is identical to BitBucket except according to Google, GitHub has a much larger community than BitBucket. I think that goes without saying. There is even support for GitHub in <a href="http://linkedin.com/" target="_blank">linkedin</a> so you can link your repositories to your linkedin profile - I like that.<br />
<br />
However with GitHub you have to pay for things like; disk space and private repositories. Well, you do get 300Mb free with GitHub - with BitBucket there is no limit. I need to elaborate on this a bit more. GitHub says these limits are "Soft Limits" and this is to prevent abuse, abuse from what!? adding everything I have ever written to a repository perhaps!<br />
<br />
With GitHub the Web UI is just not very intuitive. For example, I was just trying to create a repository, and I'm still trying to figure out how to do it. This could be because I do not have a credit card on file. When clicking "Repositories" I'd expect some kind of link, or button to create a new repo or something.<br />
<br />
With BitBucket this is so much finer, I find it a lot more intuitive and I don't have to enter a credit card unless I need to exceed the 5 free contributors I got when I signed up.<br />
<br />
Another feature I really like with BitBucket (not sure if you can do this with GitHub) is import repositories from other source control systems such as Git, Mercurial or SVN. You can also create new repositories using Mercurial or Git.<br />
<br />
And finally, I like that fact with BitBucket the ability to use a custom internet domain for all my repositories. For example I've set a CNAME record: <a href="http://code.simonrhart.com/">http://code.simonrhart.com/</a> to resolve to bitbucket.org. And it just works, navigating to my above sub domain, resolves to my BitBucket account.<br />
<br />
So remind me again why I'd use GitHub over BitBucket?Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com15tag:blogger.com,1999:blog-38895959.post-35674123503769400902011-12-01T23:29:00.001+00:002011-12-01T23:36:54.236+00:00MSDN Subscribers - get you're free Azure account...MSDN subscribers: <a href="http://www.microsoft.com/windowsazure/msdn-benefits/">http://www.microsoft.com/windowsazure/msdn-benefits/</a><br />
<br />
Non MSDN subscribers for the 90 day trial: <a href="http://www.microsoft.com/windowsazure/free-trial/">http://www.microsoft.com/windowsazure/free-trial/</a><br />
<br />
There used to be a link on the MSDN subscription page but it has seemed to have been moved so I wrote this blog post so I never lose it again and hopefully inform others.<br />
<br />
The benefits vary depending on your level of MSDN subscription. For example ultimate users get 1500 compute hours per month - I think that is pretty good. <br />
<br />
Nice!Simon Harthttp://www.blogger.com/profile/08526568682625258690noreply@blogger.com0