<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Dublin</title>
        <link>http://geekswithblogs.net/cloud9/category/9044.aspx</link>
        <description>evolution of Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) as part of the .NET Framework 4.0</description>
        <language>en-US</language>
        <copyright>Juan Suero</copyright>
        <managingEditor>juan.suero@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Is Biztalk Dublin is Dublin Biztalk?</title>
            <link>http://geekswithblogs.net/cloud9/archive/2009/09/01/is-biztalk-dublin-is-dublin-biztalk.aspx</link>
            <description>&lt;p&gt;Someone out in the ether asked a question that I have heard many times and i just shake my head.&lt;/p&gt;
&lt;p&gt;With "Dublin" on the horizon as the future distributed application server role for Windows, does it make sense for Microsoft to call this new role "Windows BizTalk Services"?  &lt;/p&gt;
&lt;p&gt;my answer is ...&lt;/p&gt;
&lt;p&gt;I don't think they want to do that.&lt;br /&gt;
Biztalk and Dublin are different products.&lt;br /&gt;
Biztalk is an application integration messaging server.&lt;br /&gt;
Dublin is an application server.&lt;br /&gt;
Biztalk integrates applications. Dublin runs applications.&lt;br /&gt;
&lt;br /&gt;
Someone develops a line of business application or server for example like a CRM system.&lt;br /&gt;
They expose functionality to itself and to the outside world by installing bits in Dublin.&lt;br /&gt;
&lt;br /&gt;
If you want to integrate your CRM system with some other system.&lt;br /&gt;
like an ordering application that takes thousands of orders from the internet.&lt;br /&gt;
you don't necessarily want your endpoints exposed to such high traffic.&lt;br /&gt;
You can drop those messages in Biztalk and it will queue them up for you&lt;br /&gt;
letting your downstream app "catch up"&lt;br /&gt;
&lt;br /&gt;
Biztalk is all about receiving messages and queuing them quickly&lt;br /&gt;
with the ability to possibly transform those messages into a structure that you can handle uniformly.&lt;br /&gt;
A set of canonical types of just all XML.&lt;br /&gt;
&lt;br /&gt;
In application architecture they have the n-tiered design.&lt;br /&gt;
They separate these things for logical and physical strategies.&lt;br /&gt;
In one of the tiers you might do ADO.NET in another you might do ASP.NET&lt;br /&gt;
Both of these things do similar things if you think about it.&lt;br /&gt;
They take some data from the user and processes it and spits back a response.&lt;br /&gt;
Both use similar patterns of OO, the .NET framework etc. etc.&lt;br /&gt;
But they are very different animals too.&lt;br /&gt;
even though you can manipulate both with visual studio.&lt;br /&gt;
&lt;br /&gt;
The analogy is the same in Dublin vs. Biztalk.&lt;br /&gt;
Even though they have similar tools and provide similar patterns and abstractions they are different.. very different tools &lt;br /&gt;
for different strategies.&lt;br /&gt;
Yes they both exist in the applications integrations space but I think Dublin exists more on the application end. To host endpoints and their application protocols and whatnot.&lt;br /&gt;
&lt;br /&gt;
If im an ISV selling an enterprise application that you can plug into your SOA&lt;br /&gt;
its gonna need to be able to host its workflows and endpoints in a technology like dublin.&lt;br /&gt;
&lt;br /&gt;
and if im a high transaction company im going to need something like Biztalk to manage interactions between all those applications.&lt;br /&gt;
&lt;br /&gt;
The ISV is not going to require that I install bits into my biztalk server.&lt;br /&gt;
What if some companies dont have Biztalk server but something else.&lt;br /&gt;
&lt;br /&gt;
Biztalk is also a very mature and complete kindof appliance.&lt;br /&gt;
&lt;br /&gt;
They are totally different.&lt;br /&gt;
&lt;br /&gt;
Dont be fooled by the similar looking tools and workflow and similar looking management tools.&lt;br /&gt;
These actually might be standard things you SHOULD have in any system that takes and input and spits out an output.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;what do you think?&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134432"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=134432" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cloud9/aggbug/134432.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Juan Suero</dc:creator>
            <guid>http://geekswithblogs.net/cloud9/archive/2009/09/01/is-biztalk-dublin-is-dublin-biztalk.aspx</guid>
            <pubDate>Tue, 01 Sep 2009 18:55:10 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cloud9/comments/134432.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cloud9/archive/2009/09/01/is-biztalk-dublin-is-dublin-biztalk.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/cloud9/comments/commentRss/134432.aspx</wfw:commentRss>
        </item>
        <item>
            <title>What a WF4.0 Workflow looks like in code</title>
            <link>http://geekswithblogs.net/cloud9/archive/2008/11/09/what-a-wf4.0-workflow-looks-like-in-code.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This code contains a sequential workflow running in a console application.&lt;/p&gt;
&lt;p&gt;There is a sequence and inside the sequence a QueryActions and ForeachLoop.&lt;/p&gt;
&lt;p&gt;The QueryActions Activity is a custom activity that you can create through Visual Studio add &amp;gt;&amp;gt; new &amp;gt;&amp;gt; .... etc... it gives you a design surface where you can drop standard out of the box activities.  In this case the QueryActions activity has inside of it a standard toolbox DBQuery activity which lets you point and click your way to a database select.  The QueryActions activity also takes some parameters it can supply to its DBQuery Acitivity.... Actions and DBConnectionContext.  The QueryActions activity outputs a List&amp;lt;Action&amp;gt;.  which is a generic list of Actions.  Actions is a Class manually created with XAML. &lt;/p&gt;
&lt;p&gt;Inside the QueryActions activity the DBQuery fills the List&amp;lt;Action&amp;gt;.  The List&amp;lt;Action&amp;gt; is then returned to the top level sequence activity and then the FOREACH activity is running iterating of the List&amp;lt;Action&amp;gt;.&lt;/p&gt;
&lt;p&gt;Inside the BODY of the FOREACH you can see other Activities being executed.  Namely CopyFile and DeleteAction activities.  The CopyFile Activity is another custom activity around a powershell commandlet activity that comes out of the box with WF4.0  The DeleteAction activity is a custom activity around DBQuery again.  This time executing a delete of records.&lt;/p&gt;
&lt;p&gt;The whole workflow does is take a list of file locations from the database, copies files from one location to another then deletes the records in the database.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;C#&lt;br /&gt;
namespace CustomActivities&lt;br /&gt;
{&lt;br /&gt;
    using System;&lt;br /&gt;
    using System.Linq;&lt;br /&gt;
    using System.Threading;&lt;br /&gt;
    using System.WorkflowModel;&lt;br /&gt;
    using System.WorkflowModel.Activities;&lt;br /&gt;
    using System.Collections.Generic;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;    class Program&lt;br /&gt;
    {&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {            &lt;br /&gt;
            AutoResetEvent syncEvent = new AutoResetEvent(false);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;            Variable&amp;lt;DbConnectionContext&amp;gt; context = new Variable&amp;lt;DbConnectionContext&amp;gt; { Default = new DbConnectionContext("System.Data.SqlClient", "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=HOL_Lab2") };&lt;br /&gt;
            Variable&amp;lt;IList&amp;lt;Action&amp;gt;&amp;gt; actions = new Variable&amp;lt;IList&amp;lt;Action&amp;gt;&amp;gt; { Default = new List&amp;lt;Action&amp;gt;() };&lt;br /&gt;
            Variable&amp;lt;Action&amp;gt; action = new Variable&amp;lt;Action&amp;gt;();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;            var sequence = new Sequence&lt;br /&gt;
            {&lt;br /&gt;
                Variables = { context, actions },&lt;br /&gt;
                Activities =&lt;br /&gt;
                {&lt;br /&gt;
                    new QueryActions { Actions = actions, ConnectionContext = context },&lt;br /&gt;
                    new ForEach&amp;lt;Action&amp;gt; &lt;br /&gt;
                    {                        &lt;br /&gt;
                        Values = actions,&lt;br /&gt;
                        Body = new ActivityAction&amp;lt;Action&amp;gt;&lt;br /&gt;
                        {&lt;br /&gt;
                            Argument = action,&lt;br /&gt;
                            Handler = new Sequence&lt;br /&gt;
                            {&lt;br /&gt;
                                Activities = &lt;br /&gt;
                                {&lt;br /&gt;
                                    new CopyFile { Source = new InArgument &amp;lt;string&amp;gt;(e=&amp;gt;action.Get(e).SourceFile), Destination = new InArgument &amp;lt;string&amp;gt;(e=&amp;gt;action.Get(e).DestinationFile) },&lt;br /&gt;
                                    new DeleteAction { ConnectionContext = context, ActionId = new InArgument&amp;lt;int&amp;gt;(e=&amp;gt;action.Get(e).ActionId) }&lt;br /&gt;
                                }&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            };&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;            WorkflowInstance myInstance = WorkflowInstance.Create(sequence);&lt;br /&gt;
            myInstance.Completed += delegate(object sender, WorkflowCompletedEventArgs e) { syncEvent.Set(); };&lt;br /&gt;
            myInstance.Aborted += delegate(object sender, WorkflowAbortedEventArgs e) { Console.WriteLine(e.Reason); syncEvent.Set(); };&lt;br /&gt;
            myInstance.Resume();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;            syncEvent.WaitOne();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
Note: The program above creates a workflow containing a sequence. The sequence will execute firs the QueryActions activity that returns a list of actions. Foreach action the workflow will execute the CopyFile and DeleteAction activities.&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126902"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126902" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/cloud9/aggbug/126902.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Juan Suero</dc:creator>
            <guid>http://geekswithblogs.net/cloud9/archive/2008/11/09/what-a-wf4.0-workflow-looks-like-in-code.aspx</guid>
            <pubDate>Sun, 09 Nov 2008 14:44:10 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/cloud9/comments/126902.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/cloud9/archive/2008/11/09/what-a-wf4.0-workflow-looks-like-in-code.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/cloud9/comments/commentRss/126902.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>