Perhaps you have seen the following error:  “The workflow template has specified no FormURN for this page.”

Often times, this is due to unecessary URL values:  AssociationUrl, InstantiationUrl, ModificationUrl

You may have code that refers to a TaskType that doesn’t exist!  This is a simple mistake!

Task.TaskProperties.TaskType = 1;

We had a Task1 InfoPath form, but refactored and removed the obsolete form.
After updating TaskType to 0, it can correctly find the Task0_FormURN!

<Task0_FormURN>urn:schemas-microsoft-com:office:infopath:MySpecialCustomForm:-myXSD-2011-10-03T18-41-25</Task0_FormURN>


At the Windows Azure Boot Camp this weekend I shared some links that I thought were interesting and useful.

Tallahassee Microsoft Oriented User Groups

Capital City .NET Users Group

http://www.meetup.com/tally-dot-net/

Tallahassee SharePoint Experts Exchange for Developers (SPEED)

http://www.tallahasseespeed.com/

Tallahassee SQL Server User Group

http://www.meetup.com/Tally-SSUG/

Azure Links To Check Out

1100% Savings for Microsoft Partner Network Logo Builder!
http://microsoftpartnernetwork.com/PartnerPerspective/Permalink/33#fbid=82tV8hZLe3p

Azure White Papers

http://www.microsoft.com/windowsazure/whitepapers/ 

Benefits for MSDN Subscribers

Special offer for Visual Studio with MSDN Subscribers
http://www.microsoft.com/windowsazure/msdn-benefits/

Compute Instance Size Definitions

http://www.microsoft.com/windowsazure/compute/

Container Specific Video

http://www.microsoft.com/showcase/en/us/details/84f44749-1343-4467-8012-9c70ef77981c

FISMA

Microsoft’s Cloud Infrastructure Receives FISMA Approval
http://blogs.technet.com/b/gfs/archive/2010/12/02/microsoft-s-cloud-infrastructure-receives-fisma-approval.aspx

Hardware Form Factor
Microsoft optimizes servers for the cloud
http://www.datacenterdynamics.com/focus/archive/2011/04/microsoft-optimizes-servers-for-azure,-bing-clouds

House Redistricting App

http://mydistrictbuilder.floridaredistricting.org
http://mydistrictbuilder.codeplex.com/


Snapshots provide read-only versions of blobs. Once a snapshot has been created, it can be read, copied, or deleted, but not modified. http://msdn.microsoft.com/en-us/library/ee691971.aspx

Windows Azure Platform Training Kit (dated: 05/18/2011), Lab: Exploring Windows Azure Storage VS2010 - Exercise 2: Working with Blobs - This lab specifically says “To delete a blob that contains snapshots, all of its snapshots must be deleted first. (That functionality is not provided in this solution)“.It took me a while to determine how to format the SnapshotTime and formulate the request to delete a specific Snapshot. It is much easier if you delete a blob and want to delete all associated Snapshots - I wanted to delete a single snapshot - so I have created this brief writeup.

If you stumbled upon this writeup and are only interested in the format.  Here it is.  Note that it must be UrlEncoded in your Blob URI.

          yyyy-MM-ddTHH:mm:ss.fffffffZ

Step 1 - Storage:

Setup Storage Account, Blob Client and Blob Container references:

// DataConnectionString and ContainerName are role configuration values
CloudStorageAccount account = CloudStorageAccount.FromConfigurationSetting(”DataConnectionString”);
CloudBlobClient client = account.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue(”ContainerName”));

Step 2 - Retrieve Snapshot data

This will be done independently based on your application. You should have some mechanism to store and track the SnapshotTime values so they can be passed through to the code that deletes the Snapshot. Here is an example of very basic Snapshot retrieval:

// retrieve snapshots
IEnumerable<IListBlobItem> snapshotList = container.ListBlobs(new BlobRequestOptions()
{
     UseFlatBlobListing = true,
     BlobListingDetails = BlobListingDetails.Snapshots
});

Step 3 - Delete Blob Snapshot

// snapshotTime should be formatted as “yyyy-MM-ddTHH:mm:ss.fffffffZ”
string snapshotTime = [...]

// select specific snapshot
CloudBlob snapshotBlob = (from CloudBlob x in snapshotList
                                      where x.SnapshotTime.HasValue &&
                                      x.SnapshotTime.Value.ToString(”yyyy-MM-ddTHH:mm:ss.fffffffZ”) == snapshotTime
                                      select x).SingleOrDefault();
// if blob matched
if (snapshotBlob != null)
{
     // URL encode time
     string encodedTime = Server.UrlEncode(snapshotTime);
     string snapshotUri = string.Format(”{0}?snapshot={1}”, snapshotBlob.Uri, encodedTime);
     CloudBlob snapshotReference = new CloudBlob(snapshotUri, client);
     snapshotReference.DeleteIfExists();
}

Somehow you have stumbled upon this blog.  My name is Billy, I live in Tallahassee, FL and work for Sogeti USA, LLC. 

I plan to use this space to share my experiences with .NET, Windows Azure, SharePoint, Virtualization and general technology topics.

Follow BliebIT on Twitter