Welcome to MSDN Blogs Sign in | Join | Help

Danny Garber's Web Blog

This is my personal blog about exciting Microsoft technologies I am directly or indirectly related as part of my job at Microsoft.

Syndication

Tags

    No tags have been created or used yet.
New BizTalk WCF Custom Adapters for Azure Services Platform coming soon

During my session at the TechEd 2009 in Los Angeles last week, I've demonstrated a demo implementation of a pretty compelling S+S scenario, during which I've connected on-premise running ESB and BizTalk Server 2009 components to the Microsoft Azure Services Platform using new BizTalk LiveMesh Adapter and BizTalk .NET Services (ISB) Adapter.

TechEd attendees can watch the recorded session at the following link: http://www.msteched.com/online/view.aspx?tid=df66d11d-4e29-450a-b468-323b552aef8b

After the session talking to many of the attendees who watched my demo, I've decided not only to extend the BizTalk "Cloud" Adapters to include other Azure Services components such as SQL Data Services and .NET Routing and Queue Services, but also to make these adapters available for public through our open source community (CodePlex) or similiar.

So, if you're looking for ways to integrate your on-premise complex SOA solutions running BizTalk orchestration and ESB Guidance itineraries with Microsoft cloud computing operating platform (Azure Services) stay tuned for future announcement on availability of BizTalk Cloud Adapters.

 

Posted Tuesday, May 19, 2009 11:19 PM by Danny Garber | 2 Comments

New Announcement: ESB Guidance becomes a part of the Microsoft BizTalk Server 2009 Suite!

We have just announced that previously available from and supported only by the open source .NET community Codeplex ESB Guidance is going to be included into the Microsoft BizTalk Server 2009 Suite with a new name "Microsoft BizTalk ESB Toolkit 2.0". You can still download it for free from the Codeplex starting as soon as mid-June, but the customer support and continues release of new versions will now be managed by Microsoft BizTalk Server product team.

You can also watch here my interview I was given to the TechEd 2009 Online on the subject of leveraging BizTalk Server 2009 as an Enterprise Service Bus. Just follow this link: http://www.msteched.com/online/view.aspx?tid=5f1e71d5-4902-40d5-9a94-d4dd5085698a

Posted Tuesday, May 19, 2009 10:56 PM by Danny Garber | 1 Comments


Attachment(s): http://www.msteched.com/online/view.aspx?tid=5f1e71d5-4902-40d5-9a94-d4dd5085698a

I will be speaking at TechEd 2009, Los Angeles, CA (May 11 - May 15, 2009)

I will be at the Tech Ed 2009 in Los Angeles demonstrating the demo application featuring the new capabilities of BizTalk Server 2009, Windows Azure Service Platform, Live Framework, .NET Services, ESB Guidance v2.0 and Managed Services Engine (MSE) 7.0.

If you are going to be there, feel free to stop by and chat with me.

 

Posted Friday, March 20, 2009 1:59 AM by Danny Garber | 1 Comments

Exploring the Live Framework April 2009 CTP: Live Mesh Asynchronous Methods (Updated)

Follow up on my previous blog on how to use the asynchronous methods of the Live Mesh in the Live Framework April 2009 CTP, I have received the comment from my colleague Ben Williams, who rightfully pointed out that with use of CreateQuery<T>() method of Mesh Application Service object, I could have accomplished the task of adding a new Data Feed in just two event handler steps comparing to the four steps shown in my previous post. Here is the new and updated snippet code that demonstrates the technique used to add a new Data Feed object into the Live Mesh:

 

        public void DataFeeds_Create(Claim claim)

        {

            this.claim = claim;

            DataFeed claimFeed = new DataFeed(claim.RefNumber);

            MeshApplicationService meshApp = Application.Current.GetMeshApplicationService();

            meshApp.DataFeeds.AddCompleted += new EventHandler<LiveItemEventArgs<DataFeed>>(DataFeeds_AddCompleted);

            meshApp.DataFeeds.AddAsync(claimFeed, claim.RefNumber);

        }

 

        public void DataFeeds_AddCompleted(object sender, LiveItemEventArgs<DataFeed> e)

        {

            MeshApplicationService meshApp = Application.Current.GetMeshApplicationService();

            var query = from datafeed in meshApp.CreateQuery<DataFeed>()

                        where datafeed.Resource.Title == (string)e.UserState

                        select datafeed;

 

            //Get a the DataFeed

            DataFeed claimFeed = query.FirstOrDefault();

            claimFeed = (DataFeed)meshApp.CreateQuery<DataFeed>().Where(d => d.Resource.Title == (string)e.UserState)

                                        .Single();

 

            //then add a new DataEntry

            DataEntryResource entryResource = new DataEntryResource();

            entryResource.Type = "Claim";

            DataEntry claimEntry = new DataEntry(entryResource);

 

            //Set the user data

            claimEntry.Resource.SetUserData<string>(claim.WriteToXml().ToString(System.Xml.Linq.SaveOptions.None));

 

            //Add DataEntry to the DataEntries collection

            claimFeed.DataEntries.AddCompleted += new EventHandler<LiveItemEventArgs<DataEntry>>(DataEntries_AddCompleted);

            claimFeed.DataEntries.AddAsync(claimEntry, claimFeed);

        }

  

Posted Friday, March 20, 2009 1:01 AM by Danny Garber | 2 Comments

Exploring the Live Framework April 2009 CTP: Live Mesh Asynchronous Methods

When I first got the opportunity to write a MEWA (mesh-enabled web application) using the Live Framework November 2009 CTP, my first task was to create a Silverlight web app that would store user requests (claims) into the Live Mesh objects (Data Feeds). While there was some twist associated with the way you add Mesh objects into a Mesh hierarchy (by using an object reference), the solution was a pretty much straight forward. I'll show you here a quick code snippet that accomplishes the task of adding a new XML based claim into the user's Live Mesh Data Feed.

In the Live Framework November 2008 CTP:

//Get the current Mesh Application Service
MeshApplicationService meshApp = Application.Current.GetMeshApplicationService();

//Create a new Data Feed
DataFeed claimFeed = new DataFeed("Claims");

//Add a data feed object by reference
meshApp.DataFeeds.Add(ref claimFeed);

//Create a new Data Entry object
DataEntry entry = new DataEntry("Claim");

//Write a Linq XML stream to the data entry object
entry.Resource.SetUserData<string>(claim.WriteToXml().ToString(System.Xml.Linq.SaveOptions.None)); entry.Update();

//Add data entry object to Data Entries collection passing it by reference
claimFeed.DataEntries.Add(ref entry); claimFeed.Update();

Well, with recent release of the Live Framework April 2009 CTP, we've got a bunch of new functionality and support, along with a long list of "legacy" methods and classes being depreciated. To find more details on what new features have been added and what classes and methods have been removed, see this post: http://blogs.msdn.com/liveframework/archive/2009/03/11/live-framework-updated.aspx

The main change I found in this new CTP release, is that all sync roundtrip calls to the Live Mesh server have been replaced with asynchronous methods. For instance, instead of using DataFeeds.Add() method to add a new Data Feed object, now you have to use a sequence of asynchronous calls and in the correct order. Being mostly on my own facing this new challenge (it is needless to say that after I redirected my project to reference the new Live Framework assemblies, my project build was broken), I spent about 2 days to figure out the correct sequence and the right methods to call when adding a new Data Feed Entry object into my Live Mesh. Below, is the snippets of the sequence calls you must perform in order to achieve the same objective you saw earlier in this post.

In the Live Framework April 2009 CTP:

1.      Step 1: Add DataFeed to the DataFeeds collection

       MeshApplicationService meshApp = Application.Current.GetMeshApplicationService();

       DataFeed claimFeed = new DataFeed(claim.RefNumber);

       meshApp.DataFeeds.AddCompleted +=new EventHandler<LiveItemEventArgs<DataFeed>>(DataFeeds_AddCompleted);

       meshApp.DataFeeds.AddAsync(claimFeed, claimFeed);

 

2.      Step 2:  Load DataFeeds (upon DataFeeds_AddCompleted() event handler call)

       MeshApplicationService meshApp = Application.Current.GetMeshApplicationService();

       meshApp.DataFeeds.LoadCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(DataFeeds_LoadCompleted);

       meshApp.DataFeeds.LoadAsync(e.UserState);

 

3.      Step 3: Load a newly added DataFeed (upon DataFeeds_LoadCompleted() event hander call)

       DataFeed claimFeed = (DataFeed)e.UserState;

       claimFeed.LoadCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(claimFeed_LoadCompleted);

       claimFeed.LoadAsync(claim.RefNumber);

 

4.      Step 4: Get loaded DataFeed and add a new DataEntry to its DataEntries collection (upon claimFeed_LoadCompleted() event handler call)

       MeshApplicationService meshApp = Application.Current.GetMeshApplicationService();

 

       //Verify that the new DataFeed object is loaded

       int count = meshApp.DataFeeds.Entries.Where(f => f.Resource.Title == e.UserState.ToString()).Count();

       if (count <> 1) throw new Exception(String.Format("Found {0} identical Data Entries", count));

       //Get a new DataFeed

       DataFeed claimFeed = meshApp.DataFeeds.Entries.Where(f => f.Resource.Title == e.UserState.ToString()).Single();

 

       //then add a new DataEntry

       DataEntryResource entryResource = new DataEntryResource();

       entryResource.Type = "Claim";

       DataEntry claimEntry = new DataEntry(entryResource);

                   

       //Set the user data

       claimEntry.Resource.SetUserData<string>(claim.WriteToXml().ToString(System.Xml.Linq.SaveOptions.None));

 

       //Add DataEntry to the DataEntries collection

       claimFeed.DataEntries.AddCompleted +=new EventHandler<LiveItemEventArgs<DataEntry>>(DataEntries_AddCompleted);

       claimFeed.DataEntries.AddAsync(claimEntry, claimFeed);

 I would also recommend adding a public event to this class in order to notify the caller upon successful (or failed) submission of the request (claim)  to the Live Mesh.

 

Conclusion

 Hopefully this helps clarify how you should be expecting to use and operate Mesh objects in the new Live Framework April 2009 CTP release.

Another thing to remember, is that before you can do anything with DataFeed, DataEntries or DataEntry objects, they must be loaded within the Mesh Application domain space. Trying to operate on these objects before they were loaded, would result in exception thrown from your code.

I plan to follow up with more details on my demo featuring various Windows Azure Live Framework features I am writing these days, and will write up the summary of findings about new features and challenges each of us faces when exploring a new and fresh bits of code from our product team.

Posted Thursday, March 19, 2009 10:36 PM by Danny Garber | 1 Comments

Page view tracker