<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-11313996</id><updated>2012-02-14T04:10:11.835-05:00</updated><category term='Mobile'/><category term='Biztalk 2004'/><category term='AppFabric'/><category term='SQL 2005'/><category term='Batching'/><category term='BAM'/><category term='Infopath'/><category term='Schema'/><category term='Azure'/><category term='Business Intelligence'/><category term='Biztalk 2006 R2'/><category term='Biztalk 2009'/><category term='Biztalk 2010'/><category term='WSS Adapter'/><category term='BRE'/><category term='EDI'/><category term='VPC'/><category term='Extend hard drive'/><category term='SAP'/><category term='Biztalk 2006'/><category term='WCF'/><category term='MOSS'/><category term='Compact Framework'/><category term='SQL2008R2'/><category term='SSIS'/><category term='Windows WorkFlow (WF)'/><category term='Windows CE'/><category term='Cloud'/><title type='text'>Shashikant's Biztalk Streams</title><subtitle type='html'>This blog is a medium for communicating and recording my efforts, successes and failures. 
It is an effort to share my passion with like minded people.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>70</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11313996.post-8096596421819033011</id><published>2011-11-10T20:28:00.006-05:00</published><updated>2011-11-14T10:32:31.024-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSIS'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL2008R2'/><title type='text'>SSIS Package Error</title><content type='html'>Biztalk is not always the right tool for Bulk data inserts. SQL Integration Services provide powerful tool set for inserting large bytes of data from source ( flat files / excel files/DB) into DataTables. In my scenario, I created SSIS package using SQL 2008R2 Business Intelligence Development Studio. It was a simple Data flow, read the excel file from a network location and insert to a remote DataTable. Image below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-qKVIRctc8N0/Trx-j_xjaVI/AAAAAAAADpE/R-e1aiAVeiQ/s1600/dataflow.png"&gt;&lt;img style="WIDTH: 364px; HEIGHT: 322px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5673548787459778898" border="0" alt="" src="http://1.bp.blogspot.com/-qKVIRctc8N0/Trx-j_xjaVI/AAAAAAAADpE/R-e1aiAVeiQ/s400/dataflow.png" /&gt;&lt;/a&gt;&lt;br /&gt;On executing the package, &lt;strong&gt;OLE Destination 1&lt;/strong&gt; shape would threw the following error:&lt;br /&gt;“[OLE DB Destination 1 [421]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.&lt;br /&gt;An OLE DB record is available. Source: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80004005 Description: "The statement has been terminated.".&lt;br /&gt;An OLE DB record is available. Source: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80004005 Description: "Violation of PRIMARY KEY constraint 'PK_tbl_so'. Cannot insert duplicate key in object 'dbo.tbl_so'.".”&lt;br /&gt;&lt;br /&gt;I tried various online forums but the solutions didn’t work for me. Then I tried data encryption and it worked. Check the image below.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-TzJ3kPnNrSM/Trx-zWjyZxI/AAAAAAAADpQ/uD8QF27i8oI/s1600/SSIS.png"&gt;&lt;img style="WIDTH: 399px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5673549051274094354" border="0" alt="" src="http://2.bp.blogspot.com/-TzJ3kPnNrSM/Trx-zWjyZxI/AAAAAAAADpQ/uD8QF27i8oI/s400/SSIS.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff6666;"&gt;Update&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After I deployed the package to remote server, I tried executing it and received validation errror around login/username. I am using SQL authentication for the DB that will receive the data from excel sheet. Internally, SSIS encrypts the credentials information. If you open the package in a notepad, you can view the encrypted information. But, when the same package is run on a different machine the user context changes and decryption process throws the error. Setting the protection level as below can get you around that issue.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-qH42nSmc_Fo/TsEzVsVR3JI/AAAAAAAADp0/nbxdCyTAy7k/s1600/protectionlevel.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 300px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5674873453234216082" border="0" alt="" src="http://3.bp.blogspot.com/-qH42nSmc_Fo/TsEzVsVR3JI/AAAAAAAADp0/nbxdCyTAy7k/s400/protectionlevel.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-8096596421819033011?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/8096596421819033011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=8096596421819033011&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/8096596421819033011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/8096596421819033011'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2011/11/ssis-package-error.html' title='SSIS Package Error'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-qKVIRctc8N0/Trx-j_xjaVI/AAAAAAAADpE/R-e1aiAVeiQ/s72-c/dataflow.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-7987770076825033273</id><published>2011-08-17T09:28:00.003-04:00</published><updated>2011-08-17T11:17:54.427-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2010'/><title type='text'>Microsoft BUILD</title><content type='html'>Starting this year, Microsoft rebranded its Professional Developer Conference (PDC) as BUILD. I have no idea what message they are trying to convey with this name change.  For some strange reasons, this change was not broadcasted strongly by the numerous Microsoft blogs and sites. The registration page was so hidden that even search engines could not find it using standard words like “PDC Microsoft conference” etc.  Well, for people who still don’t know, BUILD is being held in Anaheim, California in middle of September this year. At the time of writing this article, no agenda have been published by Microsoft for the conference. This is rather strange for an elite conference like this. My guess is that there will be breaking news around direction of Biztalk Cloud technologies. Update to Windows mobile platform (“Mango” code name) will get good coverage. Microsoft is really pushing hard to break into the Smartphone market. Even though Mango is looking like a robust platform, it is hard to penetrate the barrier created by Android and iPhone. Recent buy out of MMI by Google, bodes well for Microsoft. It leaves windows mobile as the only true Open Source mobile platform in the market. It is rather ironic that a company traditionally linked with developing proprietary technologies is taking this mantle from a company like Google that is traditionally linked with developing and encouraging Open Source systems.  This demonstrates the fast changing technology landscape and underlines the difficulties faced by CIOs in planning strategic IT initiatives.&lt;br /&gt;&lt;br /&gt;Microsoft is consolidating its offering around Desktop, Web, Cloud and Mobile with the latest release of Visual Studio 2011.  These are very exciting times for Microsoft Developers, it seems that finally Microsoft is streamlining its technologies and removing the redundancies.  Biztalk-Appfabric consolidation is happening along with Silverlight-HTML5 consolidation. Sharepoint story is unchanged and it is one of the few non-redundant technologies in the Microsoft stack.&lt;br /&gt;  &lt;br /&gt;So, where do we stand amidst all this? Consolidation of technologies will lead to more clarity for customers. One reason, Biztalk didn’t maintain the steep growth curve was because of the confusion created by conflicting technologies on the Microsoft Connected System stack. Customers like clarity, especially while evaluating different technologies to implement. They tend to select products with more clarity around their future roadmap.  Microsoft shops in general are prime candidate for Biztalk, but they saw technologies like AppFabric and WCF close substitute for Biztalk. For most of them, sole reason for buying Biztalk was because they were an EDI shop. On the other hand, Biztalk was a tough sell in non-microsoft shops as it works with Microsoft framework. A java shop will most likely go for a GIS or webMethods implementation. &lt;br /&gt;&lt;br /&gt;Real value of Biztalk lies in developing it as an integration hub for both EDI and Non-EDI integrations and then extending it to link with Sharepoint. Next step will be to combine on-premise and cloud integration on same platform. This is where Azure Appfabric is leading us to. Keep an eye on PDC (BUILD) space for more on this.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-7987770076825033273?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/7987770076825033273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=7987770076825033273&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/7987770076825033273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/7987770076825033273'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2011/08/microsoft-build.html' title='Microsoft BUILD'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-4721582031911622849</id><published>2011-06-22T20:44:00.003-04:00</published><updated>2011-06-23T10:01:57.206-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='AppFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2010'/><title type='text'>Death of Biztalk -- Are you kidding me?</title><content type='html'>Honestly, I am tired of statements like “BizTalk is Dead” or “BizTalk is Obsolete”. With every release of new technology around Connected System stack, the noise around speculated BizTalk demise gets louder. Right from the time Oslo was released (which never saw light of the day) to recently released Azure App Fabric –June CTP, blogosphere gets noisy with shouts of BizTalk is Dead.&lt;br /&gt;&lt;br /&gt;In my opinion, if one thinks of BizTalk as a brand then it could be said that BizTalk may die as a brand in near future. Even that is a speculation for sake of argument. But if one considers BizTalk as Integration enabler and a set of tools, then it can’t be dead. There may be re-organization around the tools but they will not die down. I agree that redundancies in form of Windows App Fabric and Windows Azure App Fabric do take something away from BizTalk. They also create confusion in the mind of new and existing clients. Especially, when the marketing pitch is not in tune with technical pitch. Few years ago, I would just blindly recommend BizTalk in scenarios involving hosted workflows and service compositions. But now it is not so easy. Microsoft has labeled BizTalk as Integration Server, Windows App Fabric is termed as Application Server and Windows Azure App Fabric is a cloud integration platform. It can get confusing between these 3 technologies. If I need to mathematically establish a relationship between these 3, it will look something like:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;BizTalk &amp;gt;= Windows Server Fabric + Windows Azure App Fabric.&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;It can be argued that in near future Windows Azure App Fabric may expand to include more of the existing BizTalk tool set and that may make the relationship more like&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;BizTalk = Windows Server Fabric + Windows Azure App Fabric.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is where people jump in and say that BizTalk is dead as it can be replaced by combination of the two technologies! In my opinion:&lt;br /&gt;&lt;br /&gt;1. Azure App Fabric is not a mature product yet and it is too early to say anything. Remember Oslo?&lt;br /&gt;&lt;br /&gt;2. It is quite possible that BizTalk tools will be re-organized around cloud platform using Azure App fabric as core. Depending on how one sees it, it could be branded as a new version of BizTalk with Azure App Fabric as the cloud enabler. This will not mean end of BizTalk.&lt;br /&gt;&lt;br /&gt;3. Other possibility is that BizTalk and Azure App Fabric will continue their parallel paths for foreseeable future. This will not mean end of BizTalk.&lt;br /&gt;&lt;br /&gt;It could be said that Azure App Fabric is a new technology that BizTalk developers will have to learn. Just like BizTalk 2004 release, made BizTalk developers learn .net. BizTalk 2006R2 made developers look into WCF.&lt;br /&gt;&lt;br /&gt;Windows Server App Fabric is more of an Application Server than an Integration server. However, BizTalk Appfabric connect allows .net developers leverage LOB adapters and Mapper to create workflow solutions. This compliments BizTalk just like Azure App fabric does.&lt;br /&gt;&lt;br /&gt;As a BizTalk developer, I have mixed feelings. On one side I feel unhappy that the BizTalk tool set is being broken and leveraged around different Microsoft stacks. Now everyone else will be able to enjoy the excellent tool sets of BizTalk that were once sole proprietorship of BizTalk developers. It kind of takes power away from us. But at the same time, I feel happy that as a BizTalk developer we are placed uniquely to leave our footprints across the different technology stacks that use BizTalk tools .&lt;br /&gt;&lt;br /&gt;Following are list of tools that are still exclusive to BizTalk. These are key touch points while making a choice between BizTalk and other technologies.&lt;br /&gt;&lt;br /&gt;• Accelerators (EDI, SWIFT, Rosettanet, RFID, EDIFACT, HL7)&lt;br /&gt;• Pipelines&lt;br /&gt;• Flat File processing&lt;br /&gt;• BAM&lt;br /&gt;• BRE (it is exposed as a REST API now but still under BizTalk licensing)&lt;br /&gt;• BizTalk Mapper (BizTalk AppFabric connect enables you to use the mapper with Server App Fabric, still under BizTalk licensing)&lt;br /&gt;• Non-WCF adapters like FileAct/Interact&lt;br /&gt;• Host Integration Server&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-4721582031911622849?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/4721582031911622849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=4721582031911622849&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/4721582031911622849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/4721582031911622849'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2011/06/death-of-biztalk-are-you-kidding-me.html' title='Death of Biztalk -- Are you kidding me?'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-2743601544731995718</id><published>2011-04-19T11:29:00.008-04:00</published><updated>2011-04-20T11:10:04.957-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2010'/><title type='text'>Processing Empty Files in Biztalk</title><content type='html'>In my current integration project, there is a need to process empty files (0 byte) in Biztalk. Default behavior of FILE adapter is to delete an empty file and raise an event. This empty file is then deleted even before it reaches pipeline on way to Biztalk MsgBox. So there is no way to do a routing based on filename either in a pure message scenario or using an orchestration.&lt;br /&gt;&lt;br /&gt;One possible solution is to extend the File Adapter that is part of SDK (Image 1.1). Add the 3 projects in a Visual Studio Solution as shown in Image 1.2&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Image1.1&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/-HVvQSRRzZPc/Ta2rn57DJSI/AAAAAAAADnk/_OPMX28i8cQ/s1600/1.1.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 314px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5597318613943133474" border="0" alt="" src="http://2.bp.blogspot.com/-HVvQSRRzZPc/Ta2rn57DJSI/AAAAAAAADnk/_OPMX28i8cQ/s400/1.1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;Image 1.2&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-h1HGT8BpxI8/Ta2sA-qjPOI/AAAAAAAADns/ckObJ1MA0Gk/s1600/1.1.png"&gt;&lt;img style="WIDTH: 296px; HEIGHT: 157px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5597319044712840418" border="0" alt="" src="http://2.bp.blogspot.com/-h1HGT8BpxI8/Ta2sA-qjPOI/AAAAAAAADns/ckObJ1MA0Gk/s400/1.1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Key steps:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;1. Build the solution, GAC Microsoft.Samples.BizTalk.Adapter.Common.dll. &lt;br /&gt;&lt;br /&gt;2. Registry Key.&lt;br /&gt;&lt;br /&gt;Use the StaticAdapterManagement.reg registry key file given in the sample and update the locations of the dlls mentioned. Microsoft recommends adding additional string for 64 bit machines. I didn’t do and it worked. &lt;br /&gt;&lt;br /&gt;3. Go to Biztalk admin console and try to add the new EMPTY FILE adapter. It is possible that you may get an error similar too :&lt;br /&gt;The system cannot find the file specified.&lt;br /&gt;&lt;br /&gt;/C:\Program Files (x86)\Microsoft BizTalk Server 2009\SDK\Samples\CustomAdaptersDevelopment\File Adapter\Runtime\Microsoft.BizTalk.SDKSamples.Adapters.DotNetFile.Runtime.dll&lt;br /&gt;&lt;br /&gt;This error threw me off as my registry key file did not contain this path at all and it left me wondering why is Biztalk even looking for this path. I did a search for this file in the entire registry and I found couple of references. I had no idea what were they used for but I knew that Biztalk was somehow reading them from registry key. I renamed the key for these entries without deleting . I was able to add the adapter to Biztalk successfully. &lt;br /&gt;&lt;br /&gt;4. Once adapter was added, I assigned it to appropriate Biztalk host so I can use it in send/receive port. While setting the receive handler for this newly added adapter, I got the following error:&lt;br /&gt;The Messaging Engine encountered an error when intializing the receive adapter "EmptyFile", HRESULT:"Property /Config/pollingInterval not found on adapter configuration XML.".&lt;br /&gt;&lt;br /&gt;I decided to debug the code to find the point of error. I found the error in method : ExtractPollingInterval in file ConfigProperties.cs under project Microsoft.Samples.BizTalk.Adapter.Common.csproj &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update the following code&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;long pollingInterval = ExtractInt(document, "/Config/pollingInterval");&lt;br /&gt;string pollingUnitOfMeasureStr = Extract(document,"/Config/pollingUnitOfMeasure", "Seconds");&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;strong&gt;To &lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/strong&gt;&lt;/div&gt;long pollingInterval = Convert.ToInt32(IfExistsExtract(document, "/Config/pollingInterval","5"));&lt;br /&gt;string pollingUnitOfMeasureStr = IfExistsExtract(document, "/Config/pollingUnitOfMeasure", "Seconds");&lt;br /&gt;&lt;br /&gt;Or update the root name of ReceiveHandler schema to Config. I did the code change and not the schema change&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I was in a position to configure this new custom FILE adapter and receive an empty file. In order to get a handle on the empty file, I need to go to method PickUpFilesAndSubmit which is part of DotNetFileReceiverEndpoint.cs under DotNetFile.csproj The line of code that got me the handle to the incoming file is if (item.Length == 0).&lt;br /&gt;Once I got the handle, I was able to add my logic to deal with the incoming empty file. In my case, I decide to add a string “EmptyFile” if the incoming file was empty. I would then detect this file in the send adapter using the same custom adapter and assign 0 bytes to it. In between, I will have my orchestration reading the file name of this empty file (added string “EmptyFile”) and route it to appropriate directory folder.&lt;br /&gt;&lt;br /&gt;This solution requires tampering with contents of an emptry file. It may be to acceptable in some cases. In my case, it was acceptable.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Send Side Changes: &lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To intercept the EmptyFile (file with “EmptyFile” string) on the send side, I used the method: ProcessMessage in file DotNetFileTransmitterEndpoint.cs under project DotNetFile.csproj.&lt;br /&gt;I inserted the following snippet after cloning the stream. This writes an empty file.&lt;br /&gt;StreamReader sr = new StreamReader(Stream);&lt;br /&gt;string fileContents = sr.ReadLine();&lt;br /&gt;if (fileContents.Contains("EmptyFile"))&lt;br /&gt;{&lt;br /&gt;fileStream.Write(new byte[0],0,0);&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Dynamic Send Port:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;In order to get this adapter to work with Dynamic Send port following changes will be needed:&lt;br /&gt;&lt;br /&gt;1. Use DotNetFILE:// (same as the entry in registry) instead of FILE:// in orchestration for setting dynamic address &lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/-C6i1B1_UKyM/Ta2sxYTXQ_I/AAAAAAAADn0/9Bxtl-cKf6Q/s1600/1.1.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 101px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5597319876228629490" border="0" alt="" src="http://4.bp.blogspot.com/-C6i1B1_UKyM/Ta2sxYTXQ_I/AAAAAAAADn0/9Bxtl-cKf6Q/s400/1.1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. In the adapter use the following code to extract destination string from the context properties:&lt;br /&gt;&lt;br /&gt;filePath = message.Context.Read("OutboundTransportLocation", "http://schemas.microsoft.com/BizTalk/2003/system-properties").ToString();&lt;br /&gt;&lt;br /&gt;Use this destination string to parse the final destination of the file and add code to write the file to that location.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-2743601544731995718?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/2743601544731995718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=2743601544731995718&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2743601544731995718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2743601544731995718'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2011/04/processing-empty-files-in-biztalk.html' title='Processing Empty Files in Biztalk'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-HVvQSRRzZPc/Ta2rn57DJSI/AAAAAAAADnk/_OPMX28i8cQ/s72-c/1.1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-2636924050808260100</id><published>2010-12-30T10:25:00.002-05:00</published><updated>2010-12-30T10:37:37.091-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BAM'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2010'/><title type='text'>Configuring BAM portal on Biztalk 2010</title><content type='html'>So, I installed Biztalk 2010 on Win2008 server with SQL server 2008 R2 on a 32 bit machine. Biztalk configuration worked smoothly as one would expect it to until the wizard tried to enable BAM portal. Biztalk configuration wizard threw an error saying "Default Web Site can't be validated". I did some research and found that almost everyone that had this error got it fixed by installing "IIS6 compatibility" role on the Server. But in my case, this role was already installed. But just to be sure, I uninstalled it--&gt; restarted the server and installed it back. Only to find that it did not make any difference!&lt;br /&gt;&lt;br /&gt;I tried hacking my way by physically creating BAM application on the IIS but did not work either. Since BAM is a pre-compiled version, I could not debug it as I would do in an asp.net web application. Then, I thought of creating a new website called "BAM" at the same level as the "Default Website" but on a different port (not 80). In my case, I used port 81. I ran the Biztalk Configuration wizard, pointed it to "BAM" site instead of "Default WebSite" and it worked!!&lt;br /&gt;&lt;br /&gt;Later, I did some research and found out that this is a "bug" or a "known behavior" with Biztalk 2010 installation. It seems creating a new site for BAM is generally accepted solution.&lt;br /&gt;&lt;br /&gt;Check out :http://social.msdn.microsoft.com/Forums/en/biztalkgeneral/thread/ef650460-c219-4b34-bc7a-41bb7e75ec81&lt;br /&gt;&lt;br /&gt;I would like to hear from others who faced/or not faced same issue.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-2636924050808260100?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/2636924050808260100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=2636924050808260100&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2636924050808260100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2636924050808260100'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2010/12/configuring-bam-portal-on-biztalk-2010.html' title='Configuring BAM portal on Biztalk 2010'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-2021499910544933206</id><published>2010-12-27T12:26:00.004-05:00</published><updated>2010-12-27T14:47:33.349-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2010'/><title type='text'>Biztalk and CEP (Complex Event Processing)</title><content type='html'>For people interested in integrating CEP with Biztalk, check out the white paper by Jesus Rodriguez at :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6c1da607-4785-4668-a274-6898c38ea603"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6c1da607-4785-4668-a274-6898c38ea603&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;StreamInsight is part of SQL 2008R2. Do some reading on StreamInsight before checking out this paper.&lt;br /&gt;&lt;br /&gt;This paper is very conceptual and does not provide any code snippets. If you are looking for some code samples, then use the samples that come with StreamInsight download and extend them.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-2021499910544933206?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/2021499910544933206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=2021499910544933206&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2021499910544933206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2021499910544933206'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2010/12/biztalk-and-cep-complex-event.html' title='Biztalk and CEP (Complex Event Processing)'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-7025918639139305188</id><published>2010-12-20T13:54:00.002-05:00</published><updated>2010-12-20T13:58:07.378-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AppFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2010'/><title type='text'>Appfabric Connect Feature on Biztalk 2010</title><content type='html'>When Dublin (now Windows Server Appfaric) was close to being released, there was lot of talk around the speculative demise of Biztalk. Some of the key differentiators identified at that time were Mapper tool and ability to resume message flow using persistence data store. At that time, I wrote that it will be matter of time that these differentiators between Biztalk and Dublin will fade away (check the comment section of http://geekswithblogs.net/cyoung/archive/2008/10/15/125848.aspx). Current &lt;strong&gt;&lt;em&gt;Avatar&lt;/em&gt;&lt;/strong&gt; of Dublin aka WS Appfabric , provides the ability to persist data and supports resumption of messages. “AppFabric Connect” feature, that is part of Biztalk 2010 installation, exposes Biztalk mapper and LOB directly. So to be used with workflows, that can then be hosted on Windows Server Appfabric which in turn is part of IIS. Light weight applications does not need heavy weight Biztalk database anymore. Low latency scenarios can now easily be constructed using IIS hosting using Dublin.&lt;br /&gt;&lt;br /&gt;Since this feature is part of Biztalk 2010 installation, Biztalk license is needed to use this feature. In future this can and will change. It will then be possible to create custom WF that can be persisted to a DB and exposed as WCF endpoints, while mapping .net types using Biztalk with same set of mapping functoids that are part of Biztalk world. And all of this will be free!&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-7025918639139305188?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/7025918639139305188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=7025918639139305188&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/7025918639139305188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/7025918639139305188'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2010/12/appfabric-connect-feature-on-biztalk.html' title='Appfabric Connect Feature on Biztalk 2010'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-1317455261926855914</id><published>2010-12-16T14:07:00.003-05:00</published><updated>2010-12-16T14:27:26.273-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='Azure'/><title type='text'>Little trick....that will help you long way</title><content type='html'>During the process of creating cloud project using VStudio, don't forget to mark external "reference" assemblies as "Copy Local =True". If this is not done, your application will run fine on your local cloud emulator but throw an "asp.net application error" when executed on the cloud. Every dll that is referenced, other than the default dlls, that are part of cloud project, should have property "copy local = true". When Visual Studio creates deployment package for cloud, it looks for this property. It adds all the dlls with "copy local = true" in the package and when the solution is deployed on the cloud, these additional dlls are deployed on the cloud too. In the absence of these dlls, your cloud application will throw “asp.net application error”.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-1317455261926855914?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/1317455261926855914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=1317455261926855914&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/1317455261926855914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/1317455261926855914'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2010/12/little-trickthat-will-help-you-long-way.html' title='Little trick....that will help you long way'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-2104828161898422948</id><published>2010-12-14T15:35:00.015-05:00</published><updated>2010-12-14T16:58:36.800-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='AppFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2010'/><title type='text'>Biztalk and the Cloud</title><content type='html'>I was in NY city on Dec 1 for the Azure &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;Firestarter&lt;/span&gt; event at the Microsoft Office. It was a nice overview of Azure. For past year or so, I have been thinking of getting my hands dirty with this technology. Between work and family, never really got a chance to do so. But this time, after the event I promised myself to actually put what I learnt into practice. Moreover so, because the free registration to Azure portal would expire in few weeks time.&lt;br /&gt;&lt;br /&gt;So, I came up with a simple scenario.&lt;br /&gt;&lt;br /&gt;1. Expose a &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;CreditScore&lt;/span&gt; service using &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt; within a firewall.&lt;br /&gt;2. Publish this &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt; Orchestration as &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;WCF&lt;/span&gt; to Cloud Endpoint using &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;WCF&lt;/span&gt; publishing&lt;br /&gt;wizard&lt;br /&gt;3. Use a simple windows client application to send a message and receive a reply from this &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt; service exposed within firewall.&lt;br /&gt;&lt;br /&gt;Step 1:&lt;br /&gt;&lt;br /&gt;Create a two way &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt; Orchestration that accepts an &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;xml&lt;/span&gt; message(First Name, Last Name, &lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;SSN&lt;/span&gt;) and returns a message (Credit Score and Comments).&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_R_d_QsPA2co/TQfcIxSfEAI/AAAAAAAADnA/um9QD47YwW4/s1600/BiztalkOrch.gif"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 215px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5550647108985360386" border="0" alt="" src="http://4.bp.blogspot.com/_R_d_QsPA2co/TQfcIxSfEAI/AAAAAAAADnA/um9QD47YwW4/s400/BiztalkOrch.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(Image 1)&lt;br /&gt;&lt;br /&gt;Step 2.&lt;br /&gt;&lt;br /&gt;Publish this Orchestration as the cloud endpoint.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;span id="SPELLING_ERROR_10" class="blsp-spelling-error"&gt;Pre&lt;/span&gt;-Requisite:&lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;1. &lt;span id="SPELLING_ERROR_11" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt; 2010&lt;br /&gt;2. Windows &lt;span id="SPELLING_ERROR_12" class="blsp-spelling-error"&gt;AppFabric&lt;/span&gt; &lt;span id="SPELLING_ERROR_13" class="blsp-spelling-error"&gt;SDK&lt;/span&gt; 1.0&lt;br /&gt;3. Windows Azure &lt;span id="SPELLING_ERROR_14" class="blsp-spelling-error"&gt;AppFabric&lt;/span&gt; Account to create the URL of cloud Endpoint (Free, if you have &lt;span id="SPELLING_ERROR_15" class="blsp-spelling-error"&gt;MSDN&lt;/span&gt; subscription)&lt;br /&gt;4. &lt;span id="SPELLING_ERROR_16" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt; 2010 adapter pack&lt;br /&gt;&lt;br /&gt;For details checkout : &lt;a href="http://www.blogger.com/support.microsoft.com/kb/2449478"&gt;support.microsoft.com/kb/2449478&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 2. Create a windows client to test this &lt;span id="SPELLING_ERROR_17" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt; service using endpoint exposed in the cloud.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;span id="SPELLING_ERROR_18" class="blsp-spelling-error"&gt;Pre&lt;/span&gt;-Requisite for the client machine:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Visual Studio(2008 &lt;span id="SPELLING_ERROR_19" class="blsp-spelling-error"&gt;sp&lt;/span&gt;1 or 2010)&lt;br /&gt;2. Azure &lt;span id="SPELLING_ERROR_20" class="blsp-spelling-error"&gt;AppFabric&lt;/span&gt; &lt;span id="SPELLING_ERROR_21" class="blsp-spelling-error"&gt;SDK&lt;/span&gt; 1.0 (to get &lt;strong&gt;&lt;span id="SPELLING_ERROR_22" class="blsp-spelling-error"&gt;NetTcpRelayBinding&lt;/span&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;span id="SPELLING_ERROR_23" class="blsp-spelling-error"&gt;TransportClientEndpointBehavior&lt;/span&gt;&lt;/strong&gt;).&lt;br /&gt;&lt;br /&gt;a) Open a "Windows Form Application" Project&lt;br /&gt;&lt;div&gt;b) Add Reference to "Microsoft.ServiceBus.dll" from location &lt;/div&gt;&lt;br /&gt;"C:\Program Files\Windows Azure &lt;span id="SPELLING_ERROR_24" class="blsp-spelling-error"&gt;AppFabric&lt;/span&gt; SDK\V1.0\Assemblies\NET3.5\Microsoft.ServiceBus.dll"&lt;br /&gt;&lt;br /&gt;c)Add Service Reference point to the URL exposed in the cloud : Sample URL:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/shashiraina-demo.servicebus.windows.net/Test.Biztalk.Cloud.Orch/"&gt;shashiraina-demo.servicebus.windows.net/Test.Biztalk.Cloud.Orch/&lt;/a&gt;. This &lt;span id="SPELLING_ERROR_25" class="blsp-spelling-error"&gt;namespace&lt;/span&gt; in URL is created using &lt;span id="SPELLING_ERROR_26" class="blsp-spelling-error"&gt;AppFabric&lt;/span&gt; Account. (Image below)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 108px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5550651985937755234" border="0" alt="" src="http://2.bp.blogspot.com/_R_d_QsPA2co/TQfgkpWi7GI/AAAAAAAADnI/4KM5qakWdLk/s400/appfabric.gif" /&gt; (Image 2)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;d) Use the proxy to generate client side objects. I used code instead of &lt;span id="SPELLING_ERROR_27" class="blsp-spelling-error"&gt;config&lt;/span&gt; file because, I was not able to get "&lt;span id="SPELLING_ERROR_28" class="blsp-spelling-error"&gt;TransportClientEndpointBehavior&lt;/span&gt;" and "&lt;span id="SPELLING_ERROR_29" class="blsp-spelling-error"&gt;NetTcpRelayBinding&lt;/span&gt;" to show up in &lt;span id="SPELLING_ERROR_30" class="blsp-spelling-error"&gt;Config&lt;/span&gt; file. This may be because I was just using a Windows Application as test client instead of "cloud" supported client. With code, I could easily use the &lt;span id="SPELLING_ERROR_31" class="blsp-spelling-error"&gt;ServiceBus&lt;/span&gt; &lt;span id="SPELLING_ERROR_32" class="blsp-spelling-error"&gt;namespace&lt;/span&gt; and get it working.&lt;br /&gt;&lt;br /&gt;Sample client code is below:&lt;br /&gt;&lt;br /&gt;&lt;span id="SPELLING_ERROR_33" class="blsp-spelling-error"&gt;GetCreditScore&lt;/span&gt;.&lt;span id="SPELLING_ERROR_34" class="blsp-spelling-error"&gt;GetCreditScoreRequest&lt;/span&gt; &lt;span id="SPELLING_ERROR_35" class="blsp-spelling-error"&gt;req&lt;/span&gt; = new &lt;span id="SPELLING_ERROR_36" class="blsp-spelling-error"&gt;GetCreditScoreRequest&lt;/span&gt;();&lt;br /&gt;&lt;span id="SPELLING_ERROR_37" class="blsp-spelling-error"&gt;GetCreditScore&lt;/span&gt;.&lt;span id="SPELLING_ERROR_38" class="blsp-spelling-error"&gt;GetCreditScoreResponse&lt;/span&gt; res = new &lt;span id="SPELLING_ERROR_39" class="blsp-spelling-error"&gt;GetCreditScoreResponse&lt;/span&gt;();&lt;br /&gt;&lt;span id="SPELLING_ERROR_40" class="blsp-spelling-error"&gt;NetTcpRelayBinding&lt;/span&gt; &lt;span id="SPELLING_ERROR_41" class="blsp-spelling-error"&gt;tcpRelayBinding&lt;/span&gt; = new &lt;span id="SPELLING_ERROR_42" class="blsp-spelling-error"&gt;NetTcpRelayBinding&lt;/span&gt;();&lt;br /&gt;&lt;span id="SPELLING_ERROR_43" class="blsp-spelling-error"&gt;TransportClientEndpointBehavior&lt;/span&gt; &lt;span id="SPELLING_ERROR_44" class="blsp-spelling-error"&gt;clientEndBeh&lt;/span&gt; = new &lt;span id="SPELLING_ERROR_45" class="blsp-spelling-error"&gt;TransportClientEndpointBehavior&lt;/span&gt;();&lt;br /&gt;&lt;span id="SPELLING_ERROR_46" class="blsp-spelling-error"&gt;clientEndBeh&lt;/span&gt;.&lt;span id="SPELLING_ERROR_47" class="blsp-spelling-error"&gt;CredentialType&lt;/span&gt; = &lt;span id="SPELLING_ERROR_48" class="blsp-spelling-error"&gt;TransportClientCredentialType&lt;/span&gt;.&lt;span id="SPELLING_ERROR_49" class="blsp-spelling-error"&gt;SharedSecret&lt;/span&gt;;&lt;br /&gt;clientEndBeh.Credentials.SharedSecret.IssuerName = "owner";&lt;br /&gt;clientEndBeh.Credentials.SharedSecret.IssuerSecret = "Extract this from &lt;span id="SPELLING_ERROR_50" class="blsp-spelling-error"&gt;Appfabric&lt;/span&gt; Portal";// (it will look something like the crossed out section in the Image 2" )&lt;br /&gt;&lt;span id="SPELLING_ERROR_51" class="blsp-spelling-error"&gt;EndpointAddress&lt;/span&gt; endpoint = new &lt;span id="SPELLING_ERROR_52" class="blsp-spelling-error"&gt;EndpointAddress&lt;/span&gt;("sb://shashiraina-demo.servicebus.windows.net/Test.Biztalk.Cloud.Orch/WcfService_Test_Biztalk_Cloud_Orch.svc");&lt;br /&gt;&lt;br /&gt;&lt;span id="SPELLING_ERROR_53" class="blsp-spelling-error"&gt;WcfService&lt;/span&gt;_Test_&lt;span id="SPELLING_ERROR_54" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt;_Cloud_&lt;span id="SPELLING_ERROR_55" class="blsp-spelling-error"&gt;OrchClient&lt;/span&gt; client = new &lt;span id="SPELLING_ERROR_56" class="blsp-spelling-error"&gt;WcfService&lt;/span&gt;_Test_&lt;span id="SPELLING_ERROR_57" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt;_Cloud_&lt;span id="SPELLING_ERROR_58" class="blsp-spelling-error"&gt;OrchClient&lt;/span&gt;(&lt;span id="SPELLING_ERROR_59" class="blsp-spelling-error"&gt;tcpRelayBinding&lt;/span&gt;, endpoint);&lt;br /&gt;client.Endpoint.Behaviors.Add(clientEndBeh);&lt;br /&gt;&lt;br /&gt;&lt;span id="SPELLING_ERROR_60" class="blsp-spelling-error"&gt;req&lt;/span&gt;.Score = new Score(); ;&lt;br /&gt;req.Score.FirstName = "&lt;span id="SPELLING_ERROR_61" class="blsp-spelling-error"&gt;Shashi&lt;/span&gt;";&lt;br /&gt;req.Score.LastName = "Raina";&lt;br /&gt;req.Score.SSN = "123-234-2323";&lt;br /&gt;&lt;br /&gt;res.Root = new Root();&lt;br /&gt;res.Root = client.GetCreditScore(req.Score);&lt;br /&gt;&lt;br /&gt;Response from the service is below:  (Go Ahead and tried it out from your machine)!&lt;br /&gt;&lt;br /&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 196px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5550655808011437650" border="0" alt="" src="http://1.bp.blogspot.com/_R_d_QsPA2co/TQfkDHr7BlI/AAAAAAAADnQ/q1OvzPuNjpg/s400/results.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Image 3&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, without punching a hole in your DMZ, you could expose your &lt;span id="SPELLING_ERROR_62" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt; services to outside world.  I have been involved in complex configurations in ISA reverse proxy to expose &lt;span id="SPELLING_ERROR_63" class="blsp-spelling-error"&gt;Biztalk&lt;/span&gt; services to outside world. But using "&lt;span id="SPELLING_ERROR_64" class="blsp-spelling-error"&gt;Appfabric&lt;/span&gt; Connect for Services" , all these complex configurations can be eliminated. Moreover, the &lt;span id="SPELLING_ERROR_65" class="blsp-spelling-error"&gt;ACS&lt;/span&gt; (Access Control Services) that is part of Azure &lt;span id="SPELLING_ERROR_66" class="blsp-spelling-error"&gt;Appfabric&lt;/span&gt; allows creating your own plug-in security framework.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-2104828161898422948?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/2104828161898422948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=2104828161898422948&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2104828161898422948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2104828161898422948'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2010/12/biztalk-and-cloud.html' title='Biztalk and the Cloud'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_R_d_QsPA2co/TQfcIxSfEAI/AAAAAAAADnA/um9QD47YwW4/s72-c/BiztalkOrch.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-3757201414921225647</id><published>2010-11-29T17:07:00.000-05:00</published><updated>2010-11-29T17:12:36.125-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows CE'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Compact Framework'/><title type='text'>Integrating Biztalk with Mobile CE device</title><content type='html'>One of my recent projects involved developing Biztalk services to be consumed by Windows CE mobile devices. I got a chance to work with compact Microsoft framework. In an ideal world, one would expose Biztalk as WCF service and use advanced feature set to integrate the services with the mobile client using compact framework.  There is a whole set of compact power tools with own svc generating utility that matches svcutil.exe of .net framework world. Compact framework svcutil  may work well with pure WCF kind of services (not tested though) but it will not work with Biztalk services that are exposed as WCF using WCF publishing wizard. It seems there is a bug in the svc util tool for compact framework and the only other option is to consume exposed WCF as a webservice from the client side. This can be done by simply using Add Web Reference option in the mobile client project.  Doing this will generate requisite client side proxy objects to talk with the exposed Biztalk service. Service side is to be exposed as WCF with basic-http binding to be consumed as a web service from mobile client. There is one caveat to this approach though. While using a SSL at transport level, it was observed that the client could not pass the request to the service hosted inside the corporate domain from a client situated on WAN (internet). Everything would work fine for calls made within the LAN though. The key difference between LAN and WAN scenarios was the use of reverse proxy ISA. Client requests would have to be routed through ISA for WAN scenarios whereas in LAN scenario ISA will be automatically by passed.  This issue could be circumvented by exposing Biztalk as ASMX service (instead of WCF) and using SOAP adapter. Apparently, the security information that is carried over from client through ISA to Biztalk is carried in the envelope part of the SOAP message over the wire. It is possible that the way this security information is formatted in a service exposed as WCF v/s the one exposed as ASMX service is different. That could possibly explain why the client call will work in WAN scenario for ASMX type service and not work for WCF type service.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-3757201414921225647?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/3757201414921225647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=3757201414921225647&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3757201414921225647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3757201414921225647'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2010/11/integrating-biztalk-with-mobile-ce.html' title='Integrating Biztalk with Mobile CE device'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-6800021564588894364</id><published>2010-09-28T16:00:00.003-04:00</published><updated>2010-09-28T21:47:39.179-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Batching'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='EDI'/><title type='text'>Batching Non-EDI received documents</title><content type='html'>EDI Batching in Biztalk is done using Batching orchestration that is shipped with Biztalk. This batching orchestration is directly binded with MessageBox and picks up message with EDI.ToBeBatched=True. This flag is set when the message is received using edi receive pipeline. There is a component called "BatchMarker" in the receive pipeline that promotes and sets "EDI.ToBeBatched=True".&lt;br /&gt;&lt;br /&gt;In scenario when the incoming message is a Non-EDI type (i.e a Positional Flat file), we have two options to promote the context properties that are required for Batching orchestration to work correctly. First option is to use Orchestration and second is to use a custom pipeline. In this example, I will demonstrate how to use an orchestration:&lt;br /&gt;&lt;br /&gt;1. Create an orchestration that takes the Flat File message as input message&lt;br /&gt;2. Create a Outbound Msg (Msgout) representing EDI schema&lt;br /&gt;3. Add a map that does FF--&gt;EDI conversion.&lt;br /&gt;4. Create a correlation set containing 3 EDI context properites. Set these 3 propeties inside an expression shape within the context of a constuct block.&lt;br /&gt;&lt;br /&gt;EDI834_Out(EDI.ToBeBatched)=true;&lt;br /&gt;EDI834_Out(EDI.BatchId)=1; //get this ID from "Parties"&lt;br /&gt;EDI834_Out(EDI.EncodingType)=0;// 0 for X12; 1 FOR EDIFACT&lt;br /&gt;&lt;br /&gt;5. &lt;strong&gt;Initialize the correlation set in send port. This is the key step to promote the 3 context properties else you may end up "writing" the properties and not promoting them.&lt;/strong&gt;&lt;br /&gt;6. Bind the Orchestration Send Port directly to MessageBox&lt;br /&gt;7. Create a Send Port that Filters "EDI.ToBeBatched=False". You may further differentiate by adding filter for BatchID.&lt;br /&gt;8.Deploy the orchestation and start the send port.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-6800021564588894364?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/6800021564588894364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=6800021564588894364&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/6800021564588894364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/6800021564588894364'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2010/09/batching-non-edi-received-documents.html' title='Batching Non-EDI received documents'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-5949326146410937178</id><published>2010-09-04T23:54:00.006-04:00</published><updated>2010-09-05T00:13:12.290-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Schema'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='EDI'/><title type='text'>Modifying Biztalk EDI Schemas</title><content type='html'>There are times when standard Biztalk EDI schemas need to be expanded to include additional validations. It is a 2 step process.&lt;br /&gt;&lt;br /&gt;1. Modify the relevant EDI schema and preferably modify the namespace to differentiate it from standard schema. Deploy it.&lt;br /&gt;&lt;br /&gt;2. Go To--&gt;Biztalk Admin Console--&gt;Parties--&gt;Select Partner--&gt; Right Click--&gt;EDI Properties--&gt;Click on "Validation and ACK"--&gt;Check "Extended Validation" (Image below)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 265px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5513276455930023154" border="0" alt="" src="http://2.bp.blogspot.com/_R_d_QsPA2co/TIMXueA7zPI/AAAAAAAADmo/sn4Mk9zfBQQ/s400/EDI.gif" /&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Checking "Extended Validation" tells Biztalk Engine to validate against the custom schema validations. This is in addition to standard EDI schema validations that come out of box.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-5949326146410937178?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/5949326146410937178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=5949326146410937178&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/5949326146410937178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/5949326146410937178'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2010/09/modifying-biztalk-edi-schemas.html' title='Modifying Biztalk EDI Schemas'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_R_d_QsPA2co/TIMXueA7zPI/AAAAAAAADmo/sn4Mk9zfBQQ/s72-c/EDI.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-3148674483670968365</id><published>2010-08-27T09:45:00.004-04:00</published><updated>2010-08-27T09:59:33.443-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VPC'/><category scheme='http://www.blogger.com/atom/ns#' term='Extend hard drive'/><title type='text'>Extending VPC hard drive</title><content type='html'>It has been a while since I last blogged. During this period, lot of things have happened in my life. We were blessed with twins and I took a new role with a new company. A role that lets me focus on integration more deeply and also puts me more closer to my clients. Recently, I completed a POC integrating Mobile Windows Devices with Biztalk. It was an exciting experience. No, this blog is not about Mobile integration. This is about something that we face a lot while using VPC images. Well, sooner or later we all will run out of C drive space on our VPC. Yes, it is straight forward to add a new hard drive and name it anything (say D). But that still does not do anything to existing C drive space. There are some programs that by default install on C drive and for these programs C drive should have enough space. There is a way t0 install programs that are looking for C drive to a D drive for example. This post is not talking about that. This post will help to extend existing C drive without using paid softwares like Partition Magic. I actually used a free software to achieve this. Below are the steps:&lt;br /&gt;&lt;br /&gt;1. Add a new hard drive (.vhd file) to VPC of desired size but more than the existing hard drive (.vhd drive) that needs to be extended. Call this New partition  D:&lt;br /&gt;2. Use DriveImageXML a free software to create an image of existing hard drive (C:)&lt;br /&gt;3. Restore the created image on to (D:)&lt;br /&gt;4. shut down the VPC and remove the original drive C and keep only drive D:&lt;br /&gt;5. Fire it up, you may get issues in booting up the new drive. Use http://www.runtime.org/driveimage_faq.htm. Go to section:&lt;br /&gt; I restored my boot drive, why does it not boot? &lt;br /&gt;and follow Fix Manually section.&lt;br /&gt;6. This should boot up the machine with new hard drive D:. But you may end up having a blank desktop and no programs will work. This is because they all were installed in drive C and the new drive being used is D. &lt;br /&gt;7. To fix this use: http://support.microsoft.com/kb/223188&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-3148674483670968365?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/3148674483670968365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=3148674483670968365&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3148674483670968365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3148674483670968365'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2010/08/extending-vpc-hard-drive.html' title='Extending VPC hard drive'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-981655907308930242</id><published>2008-12-27T14:31:00.004-05:00</published><updated>2008-12-27T14:58:17.986-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006 R2'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Using Biztalk in transaction mode with  a WCF client</title><content type='html'>While trying to use a WCF client to send a message to Biztalk as a transaction, I got the following error:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"Cannot access a disposed object. Object name: 'TransactionScope' "&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;On investigation, I found that this can happen when:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Recieve port/location does not have a corresponding subscription (orchestration / send port) created.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Send Port is created but not enlisted. This is same as no subscription found in database.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;When enable &lt;strong&gt;transactions check box&lt;/strong&gt; is clicked while configuring receive location as shown below:&lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5284557455781560242" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 290px; CURSOR: hand; HEIGHT: 400px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_R_d_QsPA2co/SVaFAdsAf7I/AAAAAAAADG4/a3HKSdE_DH0/s400/Transactions.jpg" border="0" /&gt;&lt;br /&gt;Behind the scenes, a transaction scope object is created that will attach itself to incoming message sent from a client and form a one continious transaction involving MSDTC. This enables WCF client to control the whole transaction involving Biztalk. Client can use "commit" and "rollback" commands to commit and rollback message in Biztalk messagebox database. Very powerful!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Reason:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;At core, Biztalk works on pub-sub mechanism. In absence of any subscription, receive location can't really participate in transaction and create a transaction object. Hence the error is raised "cannot access a dispose object" (transaction object)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; is simple: Create a subscription for the receive port/location in form of a send port or an orchestration.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-981655907308930242?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/981655907308930242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=981655907308930242&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/981655907308930242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/981655907308930242'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2008/12/using-biztalk-in-transaction-mode-with.html' title='Using Biztalk in transaction mode with  a WCF client'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_R_d_QsPA2co/SVaFAdsAf7I/AAAAAAAADG4/a3HKSdE_DH0/s72-c/Transactions.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-4390649513752220022</id><published>2008-10-05T12:43:00.012-04:00</published><updated>2008-10-06T10:30:38.636-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006 R2'/><title type='text'>Using SAP Biztalk 2006 R2 WCF adapter</title><content type='html'>&lt;div&gt;Work involved in configuring SAP adapter can be divided into 2 steps. First step involves work done by Biztalk team and second step involves work done by SAP team.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 1: BIZTALK TEAM&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Biztalk side needs to define a Program ID. SAP adapter then registers this Program ID to the SAP gateway defined in the URL. This Program ID then needs to be registered from SAP side. &lt;strong&gt;&lt;em&gt;SAP admin should follow “Performing Tasks Using the SAP GUI for Specific SAP Adapter Scenarios” section of SAPAdapter.chm file.&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;Program ID will be unique per listener else SAP will send the document to random listeners. Each Receive location will be tied to a unique Program ID for an environment. Example: If same receive location is being used in 3 environments (DEV, QA and Prod) then 3 Program IDS are required to be set up for that single receive location. RFC checks the connection between SAP and biztalk using program id registered channel. SAP then sends IDOC to biztalk. Biztalk accepts this IDoc and processes it.&lt;br /&gt;Configure recv location as shown: &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img id="BLOGGER_PHOTO_ID_5254042729000155010" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_R_d_QsPA2co/SOocBmDHN4I/AAAAAAAACrs/qCwPeEjtMlE/s400/biz1.bmp" border="0" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Configure following URL at recv location&lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;sap://CLIENT=[client ID] ;LANG=EN;@a/[servername]/[system ID]&lt;br /&gt;?ListenerGwHost=[hostname]&amp;amp;ListenerGwServ=[gateway service name] &amp;amp;ListenerProgramId=[Program ID}&lt;br /&gt;&lt;br /&gt;SAP team should supply with the above variables.&lt;br /&gt;&lt;strong&gt;Do not forget to ask for user name and password to configure screen below:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;img id="BLOGGER_PHOTO_ID_5254048100780658194" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_R_d_QsPA2co/SOog6RfYzhI/AAAAAAAACr8/GtLPgBPA6jM/s400/biz2.bmp" border="0" /&gt;&lt;br /&gt;&lt;strong&gt;Step 2: SAP TEAM&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;SAP team to supply:&lt;br /&gt;&lt;br /&gt;1. client ID&lt;br /&gt;2. servername&lt;br /&gt;3. system ID&lt;br /&gt;4. hostname&lt;br /&gt;5. gateway service name&lt;br /&gt;6. User ID&lt;br /&gt;7. Password&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-4390649513752220022?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/4390649513752220022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=4390649513752220022&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/4390649513752220022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/4390649513752220022'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2008/10/using-sap-biztalk-2006-r2-wcf-adapter.html' title='Using SAP Biztalk 2006 R2 WCF adapter'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_R_d_QsPA2co/SOocBmDHN4I/AAAAAAAACrs/qCwPeEjtMlE/s72-c/biz1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-3888960118141538192</id><published>2008-04-24T13:23:00.005-04:00</published><updated>2008-05-03T10:02:02.905-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BAM'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><category scheme='http://www.blogger.com/atom/ns#' term='WSS Adapter'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>Configuring BAM and WSS adapter on 64 bit machine</title><content type='html'>&lt;p&gt;BAM and WSS adapter have conflicting requirements for 64 bit machine. BAM needs 32 bit IIS and WSS 3.0 needs 64 bit IIS. To make matters further complex, it is not possible to host 32 bit IIS and 64 bit IIS on same 64 bit machine. So how can Biztalk communicate with a MOSS server running on 64 bit machine? Following configuration makes this possible:&lt;br /&gt;&lt;br /&gt;1) Enable 32 bit IIS on the 64 bit machine by running following command:&lt;br /&gt;&lt;br /&gt;cscript %SystemDrive%\inetpub\AdminScripts\adsutil.vbs set w3svc/AppPools/Enable32bitAppOnWin64 &lt;strong&gt;1&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;(1 means “true” and 0 means “false”)&lt;br /&gt;&lt;br /&gt;2) Now, IIS is 32 bit and follow standard BAM configuration steps.&lt;br /&gt;3) Install WSS 2.0 SP2 on the Biztalk machine to enable configuring WSS adapter. Also, configure WSS adapter on MOSS machine that hosts WSS 3.0&lt;br /&gt;4) To install WSS 2.0, register ASP.Net 2.0 (32 bit version) from “Windows\Framework” folder by running aspnet_regiis.exe –i&lt;br /&gt;5) Download and install WSS 2.0 SP2&lt;br /&gt;6) Install WSS 2.0 in server farm mode and then create and extend the website. This website will host the WSS adapter.&lt;br /&gt;7) When installing WSS 2.0 on clustered machine, use option “Join existing …”&lt;br /&gt;8) Run Biztalk Configuration wizard and configure WSS adapter on Biztalk machine.&lt;br /&gt;9) Run Biztalk Configuration Wizard on MOSS machine and configure adapter there.&lt;br /&gt;10) Make the AppPool Account that is running WSS 2.0 website a member of SharePoint Group and SharePoint Site Collection on MOSS machine hosting WSS 3.0.&lt;br /&gt;&lt;br /&gt;When WSS is configured, it creates BTSharePointAdapterWS. WSS adapter uses this web service to communicate with MOSS form libraries, lists and document libraries. This service need not be running on Biztalk machine but it should be running on MOSS machine for proper communication back and forth.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-3888960118141538192?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/3888960118141538192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=3888960118141538192&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3888960118141538192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3888960118141538192'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2008/04/configuring-bam-and-wss-adapter-on-64.html' title='Configuring BAM and WSS adapter on 64 bit machine'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-1517337309269563892</id><published>2008-01-08T12:01:00.000-05:00</published><updated>2008-01-10T13:17:11.587-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows WorkFlow (WF)'/><category scheme='http://www.blogger.com/atom/ns#' term='Infopath'/><title type='text'>Cross Updating Windows Workflow Tasks in Parallel Activity</title><content type='html'>Parallel activities in Windows Workflow are independent as the name suggests. How could we then update Task A from Task B when Task A and Task B are running in parallel? After spending 1 hour, I figured it out.&lt;br /&gt;&lt;br /&gt;1) Use "Update Task" shape for updating Task A and drop it in the "parallel" arm of Task B. The position of this task could be above the "Complete Task" or as required. But it should be under the "create task" shape for Task B.&lt;br /&gt;&lt;br /&gt;2) &lt;strong&gt;Here is the imporant part&lt;/strong&gt;. Set the correlation token as the correlation token used for Task A even though this task is under Task B related tasks. This correlation token will direct the &lt;strong&gt;update&lt;/strong&gt; &lt;strong&gt;task&lt;/strong&gt; to the correct task (Task A in our case)&lt;br /&gt;&lt;br /&gt;3) Bind the TaskID to existing Task ID for Task A.&lt;br /&gt;&lt;br /&gt;3) Use syntax "TaskProperties.ExtendedProperties["NameOfInfopathField_inTaskA_thatis_to_be_updated"]="desiredvalue"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Important:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Parallel workflows in WF are actually processed in a sequence. Left branch is processed first and then control moves towards the right . While cross updating tasks, correlation ID is the key that ties the different tasks together. For tasks on the extreme right arm, all the correlation IDs in the workflow are available. But this selection reduces are we move towards left. In order to update a task on the right side of a given task, the correlation ID will not be available from the work flow design view.  But going to deign code file(*.designer.cs / *.designer.vb) gives the flexibility to link the correlation ID with the task that is to be updated.&lt;br /&gt;&lt;br /&gt;i.e.&lt;br /&gt;&lt;br /&gt;this.UpdateFromTaskOnLeftSide =CorrelationToken (this will be token for the task on the right side that is being updated from left side).&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-1517337309269563892?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/1517337309269563892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=1517337309269563892&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/1517337309269563892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/1517337309269563892'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2008/01/cross-updating-windows-workflow-tasks.html' title='Cross Updating Windows Workflow Tasks in Parallel Activity'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-3070517797032356588</id><published>2008-01-07T11:31:00.000-05:00</published><updated>2008-12-13T00:59:12.669-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Infopath'/><title type='text'>Accessing SQL data from Infopath Form Control</title><content type='html'>A control in infopath form can be configured to receive data from XML, WebService, SharePoint List and SQL database (only). In this article I will focus on using SQL database as secondary datasource. I used SQL database to hold values for login in one column and second column gave the user groups for that LogIn. I used these Groups to control the views that a user can access. For Example: You could add rule to restrict an IT user to view data for IT only and not for Finance or Marketing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is what you do:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Create a table and name it "RulesGroup". Add two columns : &lt;strong&gt;UserLogIn&lt;/strong&gt; and &lt;strong&gt;UserGroup&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_R_d_QsPA2co/R4JVjj2mQ-I/AAAAAAAABog/2Q-yyQphaT4/s1600-h/Database.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5152774993073292258" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_R_d_QsPA2co/R4JVjj2mQ-I/AAAAAAAABog/2Q-yyQphaT4/s400/Database.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2) In the infopath form create two text box control: UserName and UserGroup&lt;br /&gt;&lt;br /&gt;3) Create a secondary datasource and configure it to receive data from SQL database. Use the wizard to point to the correct table.&lt;br /&gt;&lt;br /&gt;4) In the infopath form: Use infopath function &lt;strong&gt;username&lt;/strong&gt;() to populate &lt;strong&gt;UserName&lt;/strong&gt; text box.&lt;br /&gt;Map the &lt;strong&gt;UserGroup&lt;/strong&gt; text box with following Xpath:&lt;br /&gt;&lt;br /&gt;xdXDocument:GetDOM("RolesGroup")/dfs:myFields/dfs:dataFields/d:RolesGroup[@UserLogIn = "shashi"]/@UserGroup&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;PS: XML generated by the wizard marks the 2 user defined columns as "attributes". So there is need to user @ in Xpath expression.&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;In our case if UserName is "shashi" the UserGroup will be "Operations".&lt;br /&gt;&lt;br /&gt;New users and Groups can be added in DB as required and accordingly Infopath Views can be programmed based on Groups.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Remember&lt;/strong&gt;: While using form services to host infopath form, additional requirement will be creating a new Univeral Data Connection(UDC) file in Data Connection Library under the site collection. This UDC file maps the connection details between infopath form and SQL service. SQL server can't really authenticate the user name being passed directly from the infopath form. The user name comes as "" (blank). One way of getting around is to use proxy user name and password in case the user name is blank. But this will compromise security in Big Way. Use of UDC file helps in this regard. Also, it allows you set up custom User Groups based on User Names. These user groups can be then used to limit access to certain views as explained before in this article.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-3070517797032356588?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/3070517797032356588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=3070517797032356588&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3070517797032356588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3070517797032356588'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2008/01/accessing-sql-data-from-infopath-form.html' title='Accessing SQL data from Infopath Form Control'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_R_d_QsPA2co/R4JVjj2mQ-I/AAAAAAAABog/2Q-yyQphaT4/s72-c/Database.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-4476977359932512209</id><published>2007-12-31T14:51:00.001-05:00</published><updated>2008-12-13T00:59:13.106-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows WorkFlow (WF)'/><category scheme='http://www.blogger.com/atom/ns#' term='Infopath'/><title type='text'>Integrating MOSS, WF and Infopath</title><content type='html'>I ventured into relatively "unchartered" territory of SharePoint world. I have been working on setting up a a framework involving MOSS, Windows WorkFlow and Infopath 2007. Business requirements are pretty standard. Client wants to set up a business process for "New Hire". When a new hire joins in certain business processes need to be fired. Like creating domain accounts, allocating hardware and setting up the user in different databases. Some of the processes will be executed in series and others in parallel.&lt;br /&gt;&lt;br /&gt;Goal is to set up a scalable architecture that can potentially hook up with Biztalk in near future. Essentially we are setting up "Business Process Management (BPM)" system. Recently my company established a partnership with a company (PNM Soft) that is one of the leaders in "BPM" software. I evaluated their software to be in a position to recommend it to my clients. It is a very powerful and easy to use software. Does not require much of coding and even a pure business user can design complex BPM processes using it.&lt;br /&gt;&lt;br /&gt;My ongoing work in developing a scalable framework for my client using MOSS and other tools will also help me in determining the value added by the "BPM" software with respect to designing a BPM process from scratch using standard MSFT technologies.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) 2 Infopath forms ( First form is a brower enabled form that is published on "sharepoint", Second Form is infopath Task form that is published on "network"). I tried to get "Single" form to do both. But I ran into problems. Sharepoint won't let me publish the same form as "workflow" attachment and also as "sharepoint" enabled form. The second form is actually what you will call "Task Item" Form. It is one of the 4 forms that Workflow uses.&lt;br /&gt;&lt;br /&gt;2) Workflow that is attached to a form library. Users publish the "first" form to the form library that triggers the "Workflow". This work flow is "sharepoint" sequential workflow.A good working demo can be found at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblog.vb-tech.com/nick/archive/2007/02/25/2207.aspx"&gt;http://weblog.vb-tech.com/nick/archive/2007/02/25/2207.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Following are some helpful tips:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;1) Cloning an infopath to create a second form is not a good practice. Infopath has a unique internal ID that will also copy over to new form and can create issues when both forms are used in a WF set up. I tried using one form as an Initiation form and second as Task Item form but could not get it working. I came across issue in passing parameters from work flow to the "Task Item" form. I am not aware of any workaround. But I think it is a good practice to create forms from scratch. I will not recommend the "schema first" approach for same reasons.&lt;br /&gt;&lt;br /&gt;2) Make sure that the "network" published infopath forms (*.xsn) listed under Metadata section of "workflow.xml" (part of WF solution) exists and are under the correct folder location. Delete the references of forms not being used from "workflow.xml". Else you may get error like "Form is closed".&lt;br /&gt;&lt;br /&gt;3) If you are using VSTA to code infopath forms. Make sure that the "dll" file is also part of the folder where *.xsn forms are located. Else you may be get an error " &lt;strong&gt;&lt;em&gt;Type: InfoPathLocalizedException, Exception Message: The specified form cannot be found&lt;/em&gt;&lt;/strong&gt;". Another thing that is to be kept in mind is use of "FormState" to define global variables. For browser enabled forms, there is need to preserve state across browser sessions. "FormState" helps you do that. The other option is to use workflow to pass the values into the "resource" file that is part of the infopath form. This "resource" file serves as "Secondary" data source and accepts values from Workflow and then updates the Infopath (Task form). I like this option better because using WorkFlow to maintain the state ensures that the "infopath" form is updated only after the workflow is executed. Thus making&lt;br /&gt;sure that "state" the infopath work represents is actually the state that workflow&lt;br /&gt;indicates. There is no need to use "FormState" property in latter case.&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: Suppose user clicks on a check box on "Infopath Task form" indicating that the particular step is complete and workflow should flow to next step. If one preserves this state (of "check box" being clicked") using "FormState" then even if the workflow gives error the "checkbox" will still show as clicked and user will get an impression that the process is completed successfully as "check box" is clicked. But having workflow update this "checkbox" using "Extended Properties" ensures that this check box preserves the right state only after the workflow has done what it was suppose to do. &lt;/p&gt;I &lt;strong&gt;noticed&lt;/strong&gt; that order of populating "secondary data source" from workflow does matter. If the order is not correct the values will not propogate from &lt;strong&gt;workflow&lt;/strong&gt; to &lt;strong&gt;secondary&lt;/strong&gt; &lt;strong&gt;data&lt;/strong&gt; &lt;strong&gt;source&lt;/strong&gt; to &lt;strong&gt;Infopath&lt;/strong&gt; form.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Check out the image below:&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5151278269985080274" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_R_d_QsPA2co/R30ESz2mQ9I/AAAAAAAABoY/GjB-Xx2n-w8/s400/Code.bmp" border="0" /&gt;&lt;br /&gt;&lt;strong&gt;Note&lt;/strong&gt;: The order of fields in "secondary" data source schema matches the order in which WorkFlow assign values.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Use "Trusted Security" while publising forms with embedded VSTA code.&lt;br /&gt;&lt;br /&gt;PS: VSTA and VSTO carry the same weight when used for "broswer" only forms.&lt;br /&gt;&lt;br /&gt;4) Windows Worfklow dll needs to be GACed but the dll for VSTA code is not required to be GACed. But it needs to be copied to the same folder on network where the forms are published.&lt;br /&gt;&lt;br /&gt;PS: &lt;em&gt;Suppose you create a infopath form with embedded VSTA code and then you remove the code before "publishing" it. You still need to "copy the dll" file in the correct folder containing .xsn form. Else you will get "Form have been closed" error.&lt;/em&gt;&lt;em&gt; I found this hard way! &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;5) Everytime infopath form is changed it should be republished to the network. Also updated dll should be copied. Unistall/Install the feature. Workflows that are already in progress will be updated with the new changes. Keep this is mind before applying the changes. Accordingly wait for "In Progress" workflows to finish.&lt;br /&gt;&lt;br /&gt;6) There is no need to RE GAC the workflow dll if only infopath forms are changed. Also it is important to restart the IIS after GACing any new version updates. Restart ensures that the new changes come in effect.&lt;br /&gt;&lt;br /&gt;7) Do not try to change the Unique ID of form by going to "File----&gt; Properties" in design view. It seems that there is more than 1 place where this unique ID is referenced in the form. This is the same ID that is referenced in "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;workflow&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;xml&lt;/span&gt;" and indicates to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;workflow&lt;/span&gt; which form should be opened as Task Form, Initiation Form, Association form and Modification&lt;br /&gt;Form.&lt;br /&gt;&lt;br /&gt;8) "check box" control in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Infopath&lt;/span&gt; form can be changed from "Boolean" data type to "Text" data type and can be used to accept updates from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;workflow&lt;/span&gt; and this also gives more flexibility to&lt;br /&gt;program it using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;VSTA&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;VSTO&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;To Do this:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Go to Design View -----&gt; DataSource-----&gt; Double Click on the "check box control" -----&gt;Following type window will "pop-up"-----&gt;Change Date Type from "Boolean" to "String"---&gt; This will enable the icon "Fx" and then click there. Now you can select the value that you want to pass from "Secondary Data Source" . This seconday data source will be configured to receive the XML from workFlow&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5151005178784531378" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_R_d_QsPA2co/R3wL6z2mQ7I/AAAAAAAABoI/7Gt6CG_bwG8/s400/Recv.bmp" border="0" /&gt; Also, double click on "check" box in form view and make the properties for the "check box" look like.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5151007815894451138" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_R_d_QsPA2co/R3wOUT2mQ8I/AAAAAAAABoQ/zpCmNVkcMUQ/s400/Recv1.bmp" border="0" /&gt;Now when you pass values of "true" or "false" as string datatype from workflow, the check box will accept them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9) Use of Initiation form gives easy access the XML data stream that is following into WorkFlow. XML stream can be accessed through &lt;strong&gt;workflowProperties.InitiationData. &lt;/strong&gt;I did not want to use Inititiation form as I wanted to "automatically" start WorkFlow when something new is published or something existing changes in Form Library. To do so you need to use following code in &lt;strong&gt;"WorkFlow Activity activated shape"&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SPWeb thisWeb = new SPSite(workflowProperties.SiteId).OpenWeb(workflowProperties.WebId);&lt;br /&gt;&lt;br /&gt;SPListItem thisItem = thisWeb.Lists[workflowProperties.ListId].GetItemById(workflowProperties.ItemId);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;byte[] fileBytes = thisItem.File.OpenBinary();&lt;br /&gt;UTF8Encoding encoding = new UTF8Encoding();&lt;br /&gt;String xmlString;&lt;br /&gt;xmlString = encoding.GetString(fileBytes);&lt;br /&gt;xmlString = xmlString.Trim();&lt;br /&gt;&lt;br /&gt;// Desiralization. InitForm is class generated from schema of incoming message&lt;br /&gt;&lt;br /&gt;XmlSerializer serializer = new XmlSerializer(typeof(InitForm));&lt;br /&gt;XmlTextReader reader = new XmlTextReader(new System.IO.StringReader(xmlString));&lt;br /&gt;InitForm initform = (InitForm)serializer.Deserialize(reader);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;At the end, I concluded that the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;BPM&lt;/span&gt; software is very efficient when it comes to designing pure &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;BPM&lt;/span&gt; solutions. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;MSFT&lt;/span&gt; tools are definitely powerful in complex B2B scenario and integration with other systems. But they are "overkill" for simple &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;BPM&lt;/span&gt; scenarios.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-4476977359932512209?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/4476977359932512209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=4476977359932512209&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/4476977359932512209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/4476977359932512209'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/12/integrating-moss-wf-and-infopath.html' title='Integrating MOSS, WF and Infopath'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_R_d_QsPA2co/R30ESz2mQ9I/AAAAAAAABoY/GjB-Xx2n-w8/s72-c/Code.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-568002081716348496</id><published>2007-08-29T17:53:00.000-04:00</published><updated>2008-12-13T00:59:14.837-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Implementing WCF</title><content type='html'>&lt;div&gt;&lt;strong&gt;Why WCF?&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;WCF aka Windows Communication Foundation services is latest product from MSFT for creating Distributive Applications. Year 2007 has been buzzing with new product releases on a weekly basis. It is sometimes hard to keep track of latest releases. I can speak for myself that I end up missing some new releases now and then. It is tough to keep one eye on client work and another eye on MSFT press releases. Now it has become part of job. Working in consulting sector is a 24/7 job. When you are not working with client, you are scanning different websites looking for bits and bytes on latest product releases and technology trends. I do love my job but sometimes it gets really tough to keep up with the pace of technology changes. Sometimes you have to be like Tiger Woods and chose to leave. If only everyone was as good as him!&lt;br /&gt;&lt;br /&gt;Distributive Technologies have become center of turf war for technology companies. Webservices is an important piece in this war. Turf is dotted with companies like Java and also open source products like Tungsten.&lt;br /&gt;&lt;br /&gt;WCF is a further enhancement of ASMX webservice released with .Net framework 2.0. WCF is part of .net framework 3.0 version. Version 3.5 is out too in form of beta version. WCF lets users get benefit of ASMX , WCE and messaging services as one product. WCF supports MSMQ, HTTP and TCP protocol. ASMX webservice only supports HTTP. Additional transports can be configured to WCF. &lt;strong&gt;&lt;em&gt;WCF also offers configuration editor with GUI&lt;/em&gt;&lt;/strong&gt; for monitoring performance, tracking messages and errors. This tool helps in reducing operation cost with out of box monitoring and tracing of data. Details at the end.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;It is highly flexible and configurable solution but does have some drawbacks as compared to .Net remoting. Especially when it comes to running multiple service host instances under single host. .Net remoting actually lets you add service instances. WCF can be run as self-hosting service, IIS or WAS. While running WCF as self hosting service, check the Task manager window. WCF service will show up as Services.exe. There will be only one instance of this service at one given time. Multiple instances are not supported.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5104493819819668610" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_R_d_QsPA2co/RtbOFZiHNII/AAAAAAAAAC8/ve5_nj29wSo/s400/services.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Demo:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Used MSFT base sample, Organized it and added personal notes and updates&lt;br /&gt;1) Create a Blank Solution call WCF&lt;br /&gt;2) Add a Project and Call it “Host”&lt;br /&gt;3) Add a C# library file and call it “Host.cs”&lt;br /&gt;· Add reference to System.ServiceModel.dll&lt;br /&gt;4) Add another Project and call it “Client”&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;I ) &lt;u&gt;Create WCF Host&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) Define Service Contract&lt;br /&gt;// Define a service contract.&lt;br /&gt;[ServiceContract(Namespace = "http://Microsoft.Demo.WCF")]&lt;br /&gt;public interface IMath&lt;br /&gt;{&lt;br /&gt;[OperationContract]&lt;br /&gt;double Add(double n1, double n2);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;Attribute “ServiceContract” marks the Interface to carry metadata for WCF.&lt;br /&gt;Attribute “OperationContract” is equivalent to “Public” keyword. Client can access the service.&lt;br /&gt;PS: Since the datatype used in simple we have not explicityly defined “DataContract”. For complex datatyype it is important to define DataContract explicitly. It is also a good practice to keep “ServiceContact” and “DataContract” as separate implementation.&lt;br /&gt;&lt;br /&gt;6) Implement the service&lt;br /&gt;&lt;br /&gt;Implementing service contract is a rather easy process. Just use a C# (VB) class and implement the service interface. This is the part where the logic behind the service is implemented.&lt;br /&gt;&lt;br /&gt;//Implement the service&lt;br /&gt;public class MathService : IMath&lt;br /&gt;{&lt;br /&gt;public double Add(double n1, double n2)&lt;br /&gt;{&lt;br /&gt;double result = n1 + n2;&lt;br /&gt;Console.WriteLine("Return: {0}", result);&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;7) Create Host for the service&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Till now the service is in form of library class. We will need a host to host the service. As mentioned earlier, there are 3 options:&lt;br /&gt;&lt;br /&gt;a. Create Self Host&lt;br /&gt;b. Use IIS&lt;br /&gt;c. Use WAS&lt;br /&gt;&lt;br /&gt;In this demo we will create our own host because it is easy to Debug. Before we create a host, we need to define the address where the service will reside.&lt;br /&gt;&lt;br /&gt;This step will contain following five steps:&lt;br /&gt;&lt;br /&gt;d. Create a base address for the service.&lt;br /&gt;e. Create a service host for the service.&lt;br /&gt;f. Add a service endpoint&lt;br /&gt;g. Enable metadata exchange.&lt;br /&gt;h. Open the service host&lt;br /&gt;&lt;br /&gt;// Step d&lt;br /&gt;Uri baseAddress = new Uri("http://localhost:8000/DemoWCF/Service");&lt;br /&gt;&lt;br /&gt;// Step e&lt;br /&gt;ServiceHost serviceHost = new ServiceHost(typeof(MathService), baseAddress);&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;// Step f&lt;br /&gt;serviceHost.AddServiceEndpoint(&lt;br /&gt;typeof(IMath),&lt;br /&gt;new WSHttpBinding(),&lt;br /&gt;"MathService");&lt;br /&gt;&lt;br /&gt;// Step g&lt;br /&gt;ServiceMetadataBehavior smb = new ServiceMetadataBehavior();&lt;br /&gt;smb.HttpGetEnabled = true;&lt;br /&gt;serviceHost.Description.Behaviors.Add(smb);&lt;br /&gt;&lt;br /&gt;This step is required to run the svcutil command later on to download 2 client files (config and class). Otherwise user may get following error:&lt;br /&gt;&lt;br /&gt;“ There was no endpoint listening at http://localhost:8000/DemoWCF/service that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.&lt;br /&gt;The remote server returned an error: (404) Not Found.”&lt;br /&gt;&lt;br /&gt;This step is optional if user decides to manually create both client files.&lt;br /&gt;&lt;br /&gt;// Step h&lt;br /&gt;serviceHost.Open();&lt;br /&gt;Console.WriteLine("The service is ready.");&lt;br /&gt;Console.WriteLine("Press &lt;enter&gt;to terminate service.");&lt;br /&gt;Console.WriteLine();&lt;br /&gt;Console.ReadLine();&lt;br /&gt;serviceHost.Close();&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;II) &lt;u&gt;Create WCF client&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5104494013093196946" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" height="253" alt="" src="http://2.bp.blogspot.com/_R_d_QsPA2co/RtbOQpiHNJI/AAAAAAAAADE/3dluY7f-p-g/s400/DOS.jpg" width="396" border="0" /&gt; 8) Run svcutil command to generate client class and config file&lt;br /&gt;&lt;br /&gt;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE&gt; svcutil /language:cs /out&lt;br /&gt;:generatedClient.cs http://localhost:8000/DemoWCF/service&lt;br /&gt;&lt;br /&gt;2 generated files will be : output.config and generatedClient.cs.&lt;br /&gt;&lt;br /&gt;9) Add both of these clients to “Client” Project. The complete solution will look something like the imaage below. Note the added references. Rename them to app.config and MathClient.cs&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5104494279381169314" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_R_d_QsPA2co/RtbOgJiHNKI/AAAAAAAAADM/juXFiKh_NIQ/s400/STUDIO.jpg" border="0" /&gt;&lt;br /&gt;10) Add the following code to Client.CS&lt;br /&gt;&lt;br /&gt;namespace Microsoft.Demo.WCF&lt;br /&gt;{&lt;br /&gt;class Client&lt;br /&gt;{&lt;br /&gt;static void Main()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;//Create an EndpointAddress instance for the base address&lt;br /&gt;This Endpoint address should be concatenation of baseAddress variable in Host class and stringaddress paramter in AddEndPoint method of Host class.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5104494549964108978" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_R_d_QsPA2co/RtbOv5iHNLI/AAAAAAAAADU/BrxcrjiKMhI/s400/code.jpg" border="0" /&gt; EndpointAddress epAddress = new EndpointAddress("http://localhost:8000/DemoWCF/Service/MathService");&lt;br /&gt;MathClient client = new MathClient(new WSHttpBinding(), epAddress);&lt;br /&gt;&lt;br /&gt;//Call the contract implementation in Host class from Client class.&lt;br /&gt;double value1 = 29;&lt;br /&gt;double value2 = 16.00;&lt;br /&gt;double result = client.Add(value1, value2);&lt;br /&gt;Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5104494790482277570" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_R_d_QsPA2co/RtbO95iHNMI/AAAAAAAAADc/15OuKdPr8_k/s400/results.jpg" border="0" /&gt;&lt;br /&gt;//Close WCF client&lt;br /&gt;client.Close();&lt;br /&gt;&lt;br /&gt;Console.WriteLine();&lt;br /&gt;Console.WriteLine("Press &lt;enter&gt;to terminate client.");&lt;br /&gt;Console.ReadLine();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This is simple scenario where we have single service contract , single implementation and single endpoint.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Scenario:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A new client comes in and wants to a new service contract called “Subtract”.&lt;br /&gt;&lt;br /&gt;Two ways of doing this:&lt;br /&gt;&lt;br /&gt;1) Add the new service “Subtract” in existing interface IMath&lt;br /&gt;2) Create a new Interface IMath1 for “Subtract”&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Add the new service “Subtract” in existing interface IMath&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Most simplest of updates. But it does not gives us seperation between both as it is part of same interface. Implementation is still with same class and same service host and endpoint. Only thing that change is on the client side where the client calls “client.subtract” just like “client.Add” in the demo above.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Create a new Interface IMath1 for “Subtract”&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Create a new interface say IMath1 that contains “Subtract”. Create a second class say “MathService1”. We can’t use the same class to implement 2 interfaces under the same namespace, so we will need to create a new class to implement the new interface (service contract). Another problem that comes with this is the need to have 2 service shosts. Each service host is tied to unique class (service contract implementation). Since we are using “self created” host we can’t create 2 service hosts to implement 2 unique classes.&lt;br /&gt;This is one of the drawback of WCF. Unlike .net remoting where we can add multiple instants of service host under single host, we can’t do same in WCF.&lt;br /&gt;Using IIS as host can help solve this issue.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Key Points&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Each WCF service class implements at least one service contract, which defines the operations this service exposes.&lt;br /&gt;2) For distributing different set of service to multiple numbers of clients, class can implement multiple endpoints each with a unique service contract.&lt;br /&gt;3) Minimum 1 end point for each service host.&lt;br /&gt;4) Each service host is tied up to only one implementation of contract (class)&lt;br /&gt;5) To expose multiple services, you can open multiple service Host instances within the same host process.&lt;br /&gt;5)&lt;br /&gt;6) Although you can have multiple endpoints with a single service but only service type.&lt;br /&gt;7) You can also dynamically create service with different implementing types. This can be achieved by dynamically creating new Service Hosts.&lt;br /&gt;8) Each endpoint should have unique relative address&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;WCF Configuration Editor&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This tool can be accessed from Visual Studio interface. Go to Tools ----&gt;WCF Configuration Editor.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5104513752762889426" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_R_d_QsPA2co/RtbgNpiHNNI/AAAAAAAAADk/YBB6SoVIq7o/s400/Tools-ConfigEditor.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Read the help file for details. In summary:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;1) Open the config file that was generated after running svcutility. This will populate different placeholders in GUI with relevant data. Click on &lt;strong&gt;&lt;em&gt;EndPoint &lt;/em&gt;&lt;/strong&gt;folder to view existing configuration. This information can be changed for the GUI without even touching XML file&lt;/p&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5104513954626352354" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_R_d_QsPA2co/RtbgZZiHNOI/AAAAAAAAADs/EW8HTKZQYNY/s400/OpenConfigFile.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;2) Click on Diagnostics folder and use &lt;strong&gt;Toggle&lt;/strong&gt; switch to browse through various settings. Check out help file for details.&lt;/p&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5104514122130076914" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_R_d_QsPA2co/RtbgjJiHNPI/AAAAAAAAAD0/hG0ZX6AgoSM/s400/Diagnostics.jpg" border="0" /&gt;&lt;br /&gt;&lt;p&gt;3) Closing the editor after changes will update the changes in the original &lt;strong&gt;&lt;em&gt;app.config&lt;/em&gt;&lt;/strong&gt; that was opened in first step. If we open config file, we see additional tags added to perform all the functions that we proposed in GUI.&lt;/p&gt;&lt;p&gt;4) Click on Host.exe file to start the service. Click on client.exe to start the client. All the events will be logged in file(s) whose location(s) can be set from "Diagnostic" folder in GUI.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-568002081716348496?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/568002081716348496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=568002081716348496&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/568002081716348496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/568002081716348496'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/08/implementing-wcf.html' title='Implementing WCF'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_R_d_QsPA2co/RtbOFZiHNII/AAAAAAAAAC8/ve5_nj29wSo/s72-c/services.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-2282525174727394850</id><published>2007-08-21T18:04:00.000-04:00</published><updated>2008-12-13T00:59:15.137-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BAM'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><title type='text'>Rules for Successful BAM implementation</title><content type='html'>I learnt from my experience that by observing following rules BAM execution can become fairly smooth: &lt;strong&gt;Some of the steps are not "need to have" but rather "good to have".&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Install SQL 2005 sp2&lt;br /&gt;2) Ensure Analysis Services is installed (Else cubes/aggregations can't be created)&lt;br /&gt;3) Do not forget to Configure BAM tools to "Enable Analysis Services for Aggregation" using Biztalk config tool. (Else cubes/aggregations can't be created)&lt;br /&gt;4) Ensure that account being used is a member of the Group that is configured in Biztalk Config tool for BAM portal. (Else views in BAM portal may not be visible to the user )&lt;br /&gt;5) Ensure that the user account under which BAM Application Pool is running is member of Biztalk Isolated Host and IIS_WG group.&lt;br /&gt;6)Run following commands: (Else you may get 401 authentication error)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;cscript adsutil.vbs SET w3svc/NtAuthenticationProviders "NTLM"&lt;/li&gt;&lt;li&gt;setspn -A HTTP/servername domain\account&lt;/li&gt;&lt;li&gt;setspn -A HTTP/servername.fullyqualifieddomainname domain\account&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;em&gt;domain\account&lt;/em&gt; is account under which BAM App Pool is running on IIS.&lt;/p&gt;&lt;em&gt;cscript can be found under: C:\Inetpub\AdminScripts&lt;br /&gt;&lt;br /&gt;setspn.exe can be found under the Windows 2003 CD-ROM at \support\tools\suptools.msi &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;If you view the BAM portal but can't view all the "VIEWS" you created. It is most likely that the account you are using does not have permissions on "BAMPrimaryImport" table. Add that account (i.e, biztalkuser) and then assign the role (view) you want that user to see on BAMPortal. Check the image below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5101604157232985202" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_R_d_QsPA2co/RsyJ85iHNHI/AAAAAAAAAC0/JKiTtCYTUbQ/s400/BAM.jpg" border="0" /&gt;&lt;br /&gt;&lt;p&gt;In the image above. The user (&lt;strong&gt;&lt;em&gt;biztalkuser&lt;/em&gt;&lt;/strong&gt;) only have permission for bam_EndToEnd. If you want this user to see other views that you can for example click on "bam_Test1View". User will now be able to see both views on BAM portal. This way you can selectively grant users access to different views(roles). &lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5101603611772138594" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_R_d_QsPA2co/RsyJdJiHNGI/AAAAAAAAACs/X9SEVRhU450/s400/bamportal.jpg" border="0" /&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Please note&lt;/em&gt;&lt;/strong&gt;: SQL 2005 creates Roles. You just have to assign them to the appropriate user. SQL 2005 does not supports concept of "Groups" anymore. Instead use &lt;strong&gt;&lt;em&gt;Roles&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-2282525174727394850?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/2282525174727394850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=2282525174727394850&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2282525174727394850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2282525174727394850'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/08/rules-for-successful-bam-implementation.html' title='Rules for Successful BAM implementation'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_R_d_QsPA2co/RsyJ85iHNHI/AAAAAAAAAC0/JKiTtCYTUbQ/s72-c/BAM.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-2286748562604999459</id><published>2007-08-17T14:05:00.001-04:00</published><updated>2008-12-27T14:59:40.716-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><title type='text'>Strange behavior of Biztalk 2006 on SQL cluster environment</title><content type='html'>While testing Biztalk application on server farm mode at one of my client, I came across something interesting. This biztalk application used SQL adapter to connect from orchestration to execute stored proc. All tests for server farm went OK. Biztalk server fail over sequence worked fine. Net scala worked fine for web farm. We ran into issue when we tried failing over SQL cluster from original (initial) node to another. On the original node, everything worked perfect. On failing over to second node, I found that Biztalk application would not connect to the custom database to execute stored procedure. We thought may be it is a connection pool caching issue. We tried restarting the physical biztalk servers and hosts. Nothing worked. Then I thought that may be it is something to do with 32 Bit SQL adapter not working properly on 64 bit cluster (not a very smart assumption on retrospection). We also played with MSDTC settings by reducing the authentication level. Nothing worked. The fact that threw me off was that everything was working fine on original node. We only had one physical copy of entire Biztalk database on cluster and not multiple database instances. So, it did not make sense to me as if why the same database was acting differently with different instances of SQL on each node.&lt;br /&gt;&lt;br /&gt;I thought logically for 4 hours and tried different things. Nothing worked. I came back next day and starting thinking out of box or rather illogically. We gave explicit permissions to Biztalk service account on the "custom" database that contained stored procedures. &lt;strong&gt;&lt;em&gt;We made Biztalk service account database owner and wolla! it worked!&lt;/em&gt;&lt;/strong&gt; Yeah that simple! We could not understand the behavior but it worked. We thought of doing further post mortem. We took the permission away and failed over to original cluster node. It worked as it was working before. For some reasons Biztalk did not care for permissions while working on original node. We failed over again to second node without the permissions and it did not work again. We granted the permissions and it worked!&lt;br /&gt;&lt;br /&gt;We left the solution in that working state! But could not explain the reason for this behavior. We have couple of theories but none of them convincing. Is it a Bug? May be. Is it a cluster configuration? May be.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-2286748562604999459?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/2286748562604999459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=2286748562604999459&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2286748562604999459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2286748562604999459'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/08/stange-behavior-of-biztalk-2006-on-sql.html' title='Strange behavior of Biztalk 2006 on SQL cluster environment'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-6708842673694550607</id><published>2007-08-07T14:59:00.000-04:00</published><updated>2007-08-10T15:13:46.248-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><title type='text'>Biztalk and SilverLight</title><content type='html'>Gloves are off! MSFT is going head on against Adobe. With recent launch of Silverlight, a product that will compete against market leader Flash. MSFT dreams to snatch some serious business from Adobe. With Java version not lagging behind, market has just started heating up.&lt;br /&gt;&lt;br /&gt;SilverLight will enable developers deliver rich browser based applications. Great new tool for web developers. Richer out of Box BAM portal is one area that Biztalk can gain from this new development. Rich BAM portal with interactive charts and graphical real time display of data can really grab attention of Business Users. How about adding this on Biztalk 2008 wishlist!&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-6708842673694550607?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/6708842673694550607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=6708842673694550607&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/6708842673694550607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/6708842673694550607'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/08/biztalk-and-silverlight.html' title='Biztalk and SilverLight'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-1050972714753711050</id><published>2007-08-06T17:33:00.000-04:00</published><updated>2008-12-13T00:59:15.764-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='BRE'/><title type='text'>Implementing Business Rule Engine</title><content type='html'>This weekend I got down and dirty with BRE (Business Rule Engine). It is a powerful tool for managing dynamic business rules. It is very efficient in complex logic scenarios. I thought of playing with it and worked out some scenarios.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;u&gt;Scenario:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Company wants to categorize its workers under different “Bonus” levels to decide on dollar value of annual bonuses. Each bonus level is based on variables like Number of Projects sold, Dollar value of each project sold. Is it a new client or existing one? Other variables like future potential etc can also play in. This business logic can change over period of time and needs to be controlled by Business Analysts/ Management team. That means no complex SQL queries. In real world scenario, this means having a policy that can interact with multiple databases/tables on client side. This policy can be invoked by a webservice . This webservice will pass on objects as facts in the BRE. BRE will then update the specified columns in the database with the correct “Bonus” categories.&lt;br /&gt;&lt;br /&gt;Scenarios can range from simple scenarios that take single object as input fact to complex scenarios that take multiple objects.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Proof of Concept :&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Create a simple database called “TestRules”.&lt;br /&gt;2) Create a table called “Customers”&lt;br /&gt;3) Define 3 columns: Author, ID and Status&lt;br /&gt;4) Create a policy called “Testing”.&lt;br /&gt;5) Under this policy, define a rule “Test1” (Image 1)&lt;br /&gt;6) Define 2 Vocabularies TestBRE 1.0 and 1.2 (Image 2 and 3). Difference between them will be the nature of “Binding”. I will explain that later on.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Email me for complete solution @ &lt;a href="mailto:shashi_1273@yahoo.com"&gt;shashi_1273@yahoo.com&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Image 1:&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5095988405908486354" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_R_d_QsPA2co/RriWdJmvONI/AAAAAAAAACM/IbzC1s-QkLo/s400/BRE-1.bmp" border="0" /&gt; &lt;strong&gt;&lt;em&gt;Image 2&lt;/em&gt;&lt;/strong&gt; (Database Binding type as DataConnection )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5095989071628417250" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_R_d_QsPA2co/RriXD5mvOOI/AAAAAAAAACU/KSoyZ449DSs/s400/BRE-Voca1.bmp" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Image 3&lt;/em&gt;&lt;/strong&gt; (Database Binding type as Data Table/ Data Row )&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;img id="BLOGGER_PHOTO_ID_5095989423815735538" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_R_d_QsPA2co/RriXYZmvOPI/AAAAAAAAACc/QYXL9AqDHxk/s400/BRE-Voca2.bmp" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;There are 3 facts in the rule: &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Name of Author (Coming from Database)&lt;br /&gt;2. Input Object on right hand side of “&lt;strong&gt;Contains&lt;/strong&gt;”. This can be a simple string that gives the lookup value as name of the “Author”. In a complex scenario this can be an XML object that contains multiple Fields for “Author”. These name(s) will be then matched against the “Author” column of database “Customers”.&lt;br /&gt;3. StatuD under the action pane. This will be updated based on above 2 facts.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This policy can then be invoked by a WebService . This webservice will use &lt;strong&gt;Policy.execute&lt;/strong&gt; method after passing the required object parameters. For this Proof of Concept solution we will use following combinations:&lt;br /&gt;&lt;br /&gt;1) &lt;em&gt;Passing Single Object as Parameter:&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;In this case the object passed will be database connection only. The second fact can be a hard coded string i.e. “Shashi”. In 2 object scenario we will use an XML object instead of "string". This XML object will be array of values.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Implementation for 2 object scenario will cover this section too.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) &lt;em&gt;Passing Two Objects as Parameter:&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;In this case the object passed will be database connection and a XML document. This XML document can contain multiple fields and one of the fields can be “Author”. This “Author” field can have multiple names. In our sample we have 3 names: Shashi, Kent and Jeff.&lt;br /&gt;&lt;br /&gt;a) Database Binding type as DataConnection&lt;br /&gt;b) Database Binding type as Data Table/ Data Row&lt;br /&gt;&lt;br /&gt;Both of the above types can be set up while using Wizard to creating Vocabulary. Use DataConnection type if the count of rows returned is more than 10 (&lt;a href="http://blogs.msdn.com/biztalkbre/"&gt;http://blogs.msdn.com/biztalkbre/&lt;/a&gt; ). Otherwise use Data Table type. Also for Long Term Facts that are based on Caching, use &lt;strong&gt;Data Table/ Data Row Type&lt;/strong&gt;. Reason being that no additional benefit will be gained by caching Dataconnection object as Connection Pool already does that. Implement IFact Retriever for Long Term facts. For this particular example, we will not use Long Term facts.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Important thing to note is that in case of Database facts &lt;/strong&gt;&lt;em&gt;( with binding type Data Table/ Data Row )&lt;/em&gt;&lt;strong&gt; and XML facts, Typed objects need to be used. .Net facts do not need any “Typing”.&lt;/strong&gt; &lt;em&gt;You will see in the implementation how both XML and Database facts use TypedXMLDocument and TypedDataTable respectively.&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;It is a good practice to create a tracking file to understand how BRE works and this file can also be used as a Debugging tool.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Implementation for Case a) &lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;SqlConnection conn = new SqlConnection("Integrated Security = SSPI;Database= TestRules; Server =(local)"); // establish connection to server&lt;br /&gt;&lt;br /&gt;conn.Open(); //open the connection&lt;br /&gt;&lt;br /&gt;DataConnection dc = new DataConnection("TestRules", "Customers", conn);&lt;br /&gt;&lt;br /&gt;XmlDocument xd1 = new XmlDocument();&lt;br /&gt;xd1.Load(@"C:\BiztalkProjects\BRE\TestSmall.xml");&lt;br /&gt;TypedXmlDocument doc1 = new TypedXmlDocument("Books", xd1);&lt;br /&gt;object[] shortTermFacts = new object[2];&lt;br /&gt;shortTermFacts[0] = doc1;&lt;br /&gt;shortTermFacts[1] = dc; // &lt;strong&gt;Note: No Typed dataset being used in this implementation&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Policy pol = new Policy("Testing",1,0);&lt;br /&gt;DebugTrackingInterceptor dtraking = new DebugTrackingInterceptor("ShashiOut.txt");&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;{ pol.Execute(shortTermFacts, dtraking);&lt;br /&gt;dc.Update();&lt;br /&gt;conn.Close();&lt;br /&gt;}&lt;br /&gt;catch (Exception ex)&lt;br /&gt;&lt;br /&gt;{ System.Console.WriteLine(ex.ToString()); }&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Implementation for Case b)&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SqlConnection conn = new SqlConnection("Integrated Security = SSPI;Database= TestRules; Server =(local)"); // establish connection to server&lt;br /&gt;&lt;br /&gt;conn.Open(); //open the connection&lt;br /&gt;&lt;br /&gt;SqlDataAdapter da = new SqlDataAdapter("select * from Customers", conn); // create adapter to fill dataset .&lt;br /&gt;&lt;br /&gt;//------explicitly define Update method for database adapter object. Directly using da.update will give error&lt;br /&gt;&lt;br /&gt;SqlCommandBuilder commBldr= new SqlCommandBuilder(da);&lt;br /&gt;&lt;br /&gt;commBldr.GetUpdateCommand();&lt;br /&gt;&lt;br /&gt;da.UpdateCommand = commBldr.GetUpdateCommand();&lt;br /&gt;&lt;br /&gt;//...&lt;br /&gt;&lt;br /&gt;DataSet ds = new DataSet("TestRules"); // create a dataset&lt;br /&gt;&lt;br /&gt;da.Fill(ds, "Customers"); //fill dataset&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;//....Not required for Single Object scenario&lt;/strong&gt;&lt;br /&gt;XmlDocument xd1 = new XmlDocument();&lt;br /&gt;&lt;br /&gt;xd1.Load(@"C:\BiztalkProjects\BRE\TestSmall.xml"); //xml instance to be passed&lt;br /&gt;&lt;br /&gt;TypedXmlDocument doc1 = new TypedXmlDocument("Books", xd1);&lt;br /&gt;&lt;br /&gt;//............&lt;br /&gt;&lt;br /&gt;TypedDataTable tdc = new TypedDataTable(ds.Tables["Customers"]);&lt;br /&gt;&lt;br /&gt;// Only pass one fact (tdc) for single &lt;strong&gt;object &lt;/strong&gt;scenario (First scenario)&lt;br /&gt;object[] shortTermFacts = new object[2];&lt;br /&gt;shortTermFacts[0] = doc1;&lt;br /&gt;shortTermFacts[1] = tdc;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Policy pol = new Policy("Testing",1,0); //Major and Minor Versions&lt;br /&gt;&lt;br /&gt;DebugTrackingInterceptor dtraking = new DebugTrackingInterceptor("ShashiOut.txt"); //writes the debug file under the "bin" folder.&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;&lt;br /&gt;{ pol.Execute(shortTermFacts, dtraking);&lt;br /&gt;da.Update(ds,"Customers");&lt;br /&gt;&lt;br /&gt;conn.Close();&lt;br /&gt;&lt;br /&gt;} catch (Exception ex)&lt;br /&gt;&lt;br /&gt;{ System.Console.WriteLine(ex.ToString()); }&lt;br /&gt;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Take Away&lt;/u&gt;&lt;/strong&gt; :&lt;br /&gt;&lt;br /&gt;1) While testing a Policy, BRE create Database connection/objects. While executing the policy from .net class, database objects need to be explicitly created.&lt;br /&gt;&lt;br /&gt;2) It is a good practice to create tracking file while executing policy. This can help to troubleshoot issues while development. It can also be compared with the tracking log that is created by Business Rule composer when Testing a policy. This way we can observe the list of parameters that policy is expecting and make sure that these parameters are correcly passed while executing the same policy from outside Rule Composer. By comparing these 2 logs, I was able to figure out when policy is expecting &lt;em&gt;&lt;strong&gt;TypedXMLDocument and TypedDataTable.&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;3) DataSet object and XML document have to be passed as "Typed". &lt;/p&gt;&lt;p&gt;4) The 2 Object scenario can be extended for multiple Objects.&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;5) &lt;/em&gt;I know it is very painful to copy and create new versions of policy whenever any modifications are required. Same applies to vocab. Following SQL commands can ease that pain by undeploying the policies/vocabs and allowing users to do modifications. &lt;strong&gt;It is highly recommended that these commands are used only in Development phase.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;For Policies:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;declare @RuleSetId Int&lt;br /&gt;select @RuleSetID =nRuleSetID&lt;br /&gt;FROM re_Ruleset&lt;br /&gt;WHERE strName = 'Testing'&lt;br /&gt;AND nMajor=1 and nMinor=0&lt;br /&gt;UPDATE re_ruleset&lt;br /&gt;SET nStatus =0&lt;br /&gt;WHERE nRuleSetID = @RuleSetID&lt;br /&gt;DELETE FROM re_deployment_config WHERE nRuleSetID=@RuleSetID&lt;br /&gt;DELETE from re_tracking_id WHERE &lt;a href="mailto:nRuleSetID=@RuleSetID"&gt;nRuleSetID=@RuleSetID&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;For Vocabs:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;UPDATE re_VocabularySET nStatus = 0 /* to republish make it back to 1 */&lt;br /&gt;WHERE strName = 'Vocabulary1' AND nMajor =1 AND nMinor=0&lt;/p&gt;&lt;p&gt;I think BRE is a very powerful tool if used properly. Key is to use it for complex scenarios that can leverage functions like &lt;strong&gt;Update, Assert, Retract. &lt;/strong&gt;Using it for simple queries is an example of under utilization of tool. In terms of performance,  BRE will work better than traditional SQL query in case of complex scenarios.&lt;/p&gt;&lt;p&gt;It is not truely a Business User tool. Concepts of version, vocabulary and facts are not easy for a business user to understand. Also, the fact that any policy that deployed can't be changed unless a new version is created is not helpful either. Developers are required for initial set up and creating new vocab etc.  Business users can definitely change variable values that are already set up. They will need some training to do more than that.&lt;/p&gt;&lt;p&gt;I would imagine that MSFT understands these concerns and we can definitely see improvements in subsequent versions.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-1050972714753711050?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/1050972714753711050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=1050972714753711050&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/1050972714753711050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/1050972714753711050'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/08/implementing-business-rule-engine.html' title='Implementing Business Rule Engine'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_R_d_QsPA2co/RriWdJmvONI/AAAAAAAAACM/IbzC1s-QkLo/s72-c/BRE-1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-4927095611995537050</id><published>2007-07-31T13:17:00.000-04:00</published><updated>2007-07-31T13:59:29.738-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><title type='text'>Biztalk Best Practices</title><content type='html'>We recently finished a Biztalk Project with one of our client. It was a 4 week project with tight deadlines. Our team did a great job to deliver quality product on time. I joined the project midway after 2 weeks and finished error handling and fine tuning. The overall architecture of the project was straight out of “Biztalk Best Practices” book. This was one of the reasons it turned out to be successful. I would recommend everyone this approach as documented by Marty.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Scenario:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Main Orchestration A will be kicked off by a web service or a File Drop (as back up)&lt;br /&gt;2. Orch A will send Email informing users using Orch B (Email Orch).&lt;br /&gt;3. Orch A will then trigger 5 Different Orchestration (C,D,E,F and G) in a pre-defined sequence. 4. This sequence will be set up during design time. Some of these orchestrations will execute in&lt;br /&gt;parallel.&lt;br /&gt;5. Each of these orchestrations (C, D,E,F and G) will call Orch B after each call before control&lt;br /&gt;goes to next orchestration in sequence.&lt;br /&gt;6. Users will click on Email and that will trigger web application. This web application will send a "correlation" ID back to one of the orchestration (C,D,E,F and G) and that will complete the orchestration. Thus sending control to next orchestration.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Our approach:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Use Multipart messages&lt;br /&gt;2. Use Direct Binding through Message Box to link multiple orchestrations.&lt;br /&gt;3. Use separate project Internal and External Schemas&lt;br /&gt;4. Never expose Internal Schemas directly to entities outside Biztalk.&lt;br /&gt;&lt;br /&gt;Great deal of information can be found at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/05/BizTalk/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/07/05/BizTalk/default.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We could have also gone with the (Partner Port) approach. This approach would have reduced some of the Orchestration code we had to put for changing the promoted values to eliminate the chances of "infinite loop". But then we would have lost on "flexibility". and client demanded flexibility.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-4927095611995537050?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/4927095611995537050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=4927095611995537050&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/4927095611995537050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/4927095611995537050'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/07/biztalk-best-practices.html' title='Biztalk Best Practices'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-2544655740245266377</id><published>2007-07-25T20:26:00.000-04:00</published><updated>2007-07-25T20:42:24.917-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Using Correlation in Loop</title><content type='html'>Using Correlation set within a Loop is not a straightforward process in biztalk. One way around this is to define a Scope and within the scope define the correlation sets . This scope will be within the loop . With each iteration of Loop, correlation set will be instantiated again.  This approach can lead to overheads due to addtional persistence points in form of transactional scope. Another approach that I recently used in a direct binding scenario is use of "Null Adapter". Have a dummy send shape outside the loop that initiate the correlation set. Use "Null Adapter" with this send port.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-2544655740245266377?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/2544655740245266377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=2544655740245266377&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2544655740245266377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2544655740245266377'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/07/using-correlation-in-loop.html' title='Using Correlation in Loop'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-74143862693439481</id><published>2007-07-25T20:04:00.001-04:00</published><updated>2007-07-25T20:25:37.126-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><title type='text'>DebugViewer in Biztalk</title><content type='html'>"DebugViewer" is another cool feature that comes with Biztalk 2006. Actually it is part of Studio 2005. Simple steps to use it:&lt;br /&gt;&lt;br /&gt;1) Download and Install the tool from &lt;a href="http://www.microsoft.com/technet/sysinternals/Miscellaneous/DebugView.mspx"&gt;http://www.microsoft.com/technet/sysinternals/Miscellaneous/DebugView.mspx&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2) Use System.Diagnostics.Debug.WriteLine ( " Write the Message Here") inside Orchestration to display the message.&lt;br /&gt;3) Check the &lt;strong&gt;capture menu&lt;/strong&gt; on tool to ensure that all options are check marked except the last one (Log Boot). By default they are.&lt;br /&gt;4) You can even filter the events on the viewer. Add a prefix before the message and use this Prefix to filter. &lt;strong&gt;Example&lt;/strong&gt;: Use System.Diagnostics.Debug.WriteLine ( Prefix +" Write the Message Here") . Filter gives both "include" and "exclude" options.&lt;br /&gt;&lt;br /&gt;PS: Ensure that you are using "&lt;strong&gt;&lt;em&gt;Development/Debug&lt;/em&gt;&lt;/strong&gt;" mode while deploying the assembly. Debug command does not work with"&lt;strong&gt;&lt;em&gt;Release/Deployment&lt;/em&gt;&lt;/strong&gt;" mode. This is added benefit of using Debug namespace. There is no need to remove these lines of code while moving from &lt;em&gt;development to deployment&lt;/em&gt; version. These lines will be supressed in the &lt;strong&gt;deployment&lt;/strong&gt; version by design. Not quiet the case if &lt;em&gt;System.Diagnostics.EventLog.WriteEntry&lt;/em&gt; namespace is used. In that case, these lines will have to be removed when moving from &lt;em&gt;development to deployment&lt;/em&gt; version. Else there will be performance hit.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-74143862693439481?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/74143862693439481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=74143862693439481&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/74143862693439481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/74143862693439481'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/07/debugviewer-in-biztalk.html' title='DebugViewer in Biztalk'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-2385039651473532350</id><published>2007-06-22T14:51:00.000-04:00</published><updated>2007-06-22T20:24:23.565-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><title type='text'>SWIFTNet Adapter</title><content type='html'>&lt;p class="timesnew"&gt;&lt;span style="font-family:Arial;font-size:10;color:black;"&gt;I started looking into SWIFT as an apparent area of push by Microsoft into financial sector. For people who have not worked in Financial services sector. SWIFT stands for &lt;b&gt;“&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:10;color:black;"&gt;Society for Worldwide Interbank Financial Telecommunicati&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:10;color:black;"&gt;on”. SWIFT is both a standard body and a secure network like VAN. &lt;span style="font-size:0;"&gt;&lt;/span&gt;It also provides software solutions. This secure network connects various banks and corporations. Helping them to settle payments resulting from various buy and sells trades. It is also known as SWIFTNet.&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="timesnew"&gt;&lt;span style="font-family:Arial;font-size:10;color:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Microsoft introduced first SWIFT accelerator with Biztalk 2004. Biztalk 2006 contains updated version of SWIFT accelerator (version 2.3). Partnership with SWIFT to develop SWIFT accelerator and out of box Rules via Rules Engine is an important strategic move from MSFT to capture Financial Services Market. It is aimed at targeting Back Office where all the trade settlements take place. Java technologies reign supreme in the front end of the trading spectrum using FIX protocol. MSFT aims to capture the back office market that is relatively less volume per day. Here, more emphasis is paid on Security and Reliability and less on speed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="timesnew"&gt;&lt;span style="font-family:Arial;font-size:10;color:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Microsoft is leveraging its influence on Global Banking Industry to push SWIFT standards and SWIFT-BizTalk combination. Internally, MSFT is in process of implementing this solution for its Treasury/Accounting department. It is using in-house implementation as a case study for various corporations and banks to implement Biztalk-SWIFT combination.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="timesnew"&gt;&lt;span style="font-family:Arial;font-size:10;color:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;Technically, it is a great solution. Users can use Infopath templates to change the Messages. Then use Biztalk as single point of contact to connect with SWIFT network. All the Relational validations in incoming/outgoing message are created using BRE and hence are easy to change by non-technical users. This provides greater degree of flexibility and control in the ever changing world of Banking/Financial Regulations. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="timesnew"&gt;&lt;span style="font-family:Arial;font-size:10;color:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="timesnew"&gt;&lt;span style="font-family:Arial;font-size:10;color:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="timesnew"&gt;&lt;span style="font-family:Arial;font-size:10;color:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="timesnew"&gt;&lt;span style="font-family:Arial;font-size:10;color:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-2385039651473532350?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/2385039651473532350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=2385039651473532350&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2385039651473532350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/2385039651473532350'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/06/swiftnet-adapter.html' title='SWIFTNet Adapter'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-760945858990433683</id><published>2007-05-14T13:23:00.000-04:00</published><updated>2007-05-14T14:54:30.119-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><title type='text'>Passed my Certification Exam!</title><content type='html'>I passed by Biztalk 2006 Certification Exam Today. I would say that I am more relieved than happy. I have One regret though, I wish I was working on Biztalk in my Current project. My last Biztalk Project was 3 months ago and it was heavily tilted towards Biztalk 2004. &lt;strong&gt;Ongoing&lt;/strong&gt; real world project experience in Biztalk 2006 would have definitely helped my preparation . My preparation was spread just over TWO weekends. I used 2 weekends (4 days) to go over Two Books: &lt;strong&gt;Biztalk Recipes - 2006, Biztalk - 2004 Unleashed&lt;/strong&gt;. Tried my hands on SDK samples for BRE/BAM and read as much I could read from Microsoft website. I was sleep deprived on these weekends :)&lt;br /&gt;&lt;br /&gt;I will not recommend the approach I took. I had to take this approach because of my situation. Ideally, I would recommended to spend at least 2 days on doing BAM, BRE and other examples from SDK. Working on ongoing Biztalk project will definitely give an edge while preparing for exam. There will be no need to specially allocate time to prepare for the exam like I had to do. I knew that Orchestration, Messaging and Administration were my strong areas. For this reason, I made an effort to focus more on areas like &lt;strong&gt;BAM, BRE and Role Link&lt;/strong&gt; that are not my strengths.&lt;br /&gt;&lt;br /&gt;Percentage breakdown of my preparation:&lt;br /&gt;&lt;br /&gt;1. 50% of my time on BAM, BRE and Role Links&lt;br /&gt;2. 20% on Orchestration, Messaging&lt;br /&gt;3. 10% What is new in Biztalk 2006&lt;br /&gt;3. 10% on Deployment and Administration&lt;br /&gt;4. 10% on Random Readings on Biztalk Blogs.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-760945858990433683?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/760945858990433683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=760945858990433683&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/760945858990433683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/760945858990433683'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/05/passed-my-certification-exam.html' title='Passed my Certification Exam!'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-3132527292023226176</id><published>2007-04-21T16:09:00.000-04:00</published><updated>2007-05-14T14:24:24.619-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><title type='text'>Wild Wild World ....</title><content type='html'>It has been a while since I sat down in front of my computer to do any Blogging. I joined a new company in February and then took a 2-week vacation. I came back and have been working like crazy. Current project has been very challenging and a great learning experience. It is not an Integration Project and I am diversifying into area of Business Intelligence. I am working on collecting Business Requirement for a Financial System and also doing Project Management. Also providing direction to the financial department in the face of changes they have been going through lately. Doing this I am facing the classic dilemma: to diversify or to specialize?&lt;br /&gt;&lt;br /&gt;I love working on Business Integration Projects involving Biztalk and this is my core strength. At the same time I want to get more exposure to other aspect of technologies to give me a broader perspective while dealing with Business Problems and providing the solutions.  Well, there are definitely pros and cons of each approach. One of the immediate challenges I am facing is that I have my Biztalk 2006 exam due in less than a month and I still have no plan in place to prepare for the exam. I have been struggling to take out some time but the present project is really demanding and does not leave me anytime on week or on the weekend. The only time I get is at night but then I am too tired to do anything. Fact that I am not working on Biztalk project also does not help me in putting my mind in the right Biztalk perspective at the end of the day when I sit with my Biztalk book to prepare for the exam.&lt;br /&gt;&lt;br /&gt;I really need to find a way to put a plan in place and I have to do it soon! Wish we had a 40 hour day.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-3132527292023226176?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/3132527292023226176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=3132527292023226176&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3132527292023226176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3132527292023226176'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/04/wild-wild-world.html' title='Wild Wild World ....'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-4877587013374305933</id><published>2007-02-22T16:11:00.000-05:00</published><updated>2008-12-13T00:59:16.026-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><title type='text'>BAM Deployment Error</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I received following error while deploying BAM project in Biztalk 2006. Error read “BAM Deployment failed.&lt;br /&gt;Encountered error while executing command on SQL server “server name”.&lt;br /&gt;Incorrect Syntax near ‘@@Error’.&lt;br /&gt;Must declare scalar variable &lt;a href="mailto:“@@UniqueID"&gt;“@@UniqueID&lt;/a&gt;”.” &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Screenshot of the error is below:&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R_d_QsPA2co/Rd4IO4YPKbI/AAAAAAAAAAg/PA2kVjwszps/s1600-h/BAMerror.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5034470485192026546" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_R_d_QsPA2co/Rd4IO4YPKbI/AAAAAAAAAAg/PA2kVjwszps/s320/BAMerror.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;I opened the tracer log at SQL server level.  I extracted the stored procedure that was giving me an error and ran the stored procedure directly on the server. I got following error:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;Msg 102, Level 15, State 1, Procedure bam_Test1_UpsertInstance, Line 15&lt;br /&gt;Incorrect syntax near '@@Error'.&lt;br /&gt;Msg 137, Level 15, State 2, Procedure bam_Test1_UpsertInstance, Line 68&lt;br /&gt;Must declare the scalar variable "@@UniqueID".&lt;br /&gt;Msg 137, Level 15, State 2, Procedure bam_Test1_UpsertInstance, Line 111&lt;br /&gt;Must declare the scalar variable "@@UniqueID".&lt;br /&gt;Msg 137, Level 15, State 2, Procedure bam_Test1_UpsertInstance, Line 140&lt;br /&gt;Must declare the scalar variable "@@UniqueID".&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;I changed the two variables representing the name of BAM activity “Error” and “Unique ID” to “Exception” and “TransactionID” respectively. Ran the command line for deployment and Bingo it worked!!&lt;br /&gt;&lt;br /&gt;It seems that Biztalk uses these 2 variables (Error and UniqueID) internally and will not accept them as user defined variables. There may well be more than two of these variables that will cause similar errors. Well, if we get similar error again then it is very likely that we stepped on some more of these variables.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt; &lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_R_d_QsPA2co/Rd4HYYYPKaI/AAAAAAAAAAY/QkdXfYQ2yeI/s1600-h/BAMerror.jpg"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-4877587013374305933?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/4877587013374305933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=4877587013374305933&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/4877587013374305933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/4877587013374305933'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/02/bam-deployment-error.html' title='BAM Deployment Error'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_R_d_QsPA2co/Rd4IO4YPKbI/AAAAAAAAAAg/PA2kVjwszps/s72-c/BAMerror.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-169650588111154385</id><published>2007-02-22T11:57:00.000-05:00</published><updated>2008-12-13T00:59:16.478-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2006'/><title type='text'>MOM Architecture</title><content type='html'>MOM is another great tool to monitor distributed Biztalk environment. It can easily configure alerts to trigger some activity. This activity can be like sending an email to a person or a group. It can be running some batch file or a script. This event/error based triggering is very helpful while administering a widespread distributive environment. It enables people to take necessary action at right times.&lt;br /&gt;&lt;br /&gt;The basic components that constitute MOM are captured below.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_R_d_QsPA2co/Rd3NnIYPKZI/AAAAAAAAAAM/6m2gq-98gj4/s1600-h/MOM.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5034406030617815442" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_R_d_QsPA2co/Rd3NnIYPKZI/AAAAAAAAAAM/6m2gq-98gj4/s320/MOM.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-169650588111154385?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/169650588111154385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=169650588111154385&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/169650588111154385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/169650588111154385'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/02/mom-architecture.html' title='MOM Architecture'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_R_d_QsPA2co/Rd3NnIYPKZI/AAAAAAAAAAM/6m2gq-98gj4/s72-c/MOM.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-3359961927283427197</id><published>2007-01-24T20:24:00.000-05:00</published><updated>2007-01-24T21:31:20.611-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Another Successful Implementation</title><content type='html'>&lt;p&gt;Months of hard work finally helped us execute another successful BizTalk Implementation this week. This was the reason that I was not able to Blog for past few months. I spent past 3 months managing and organizing the activities for the BIG implementation. It was a great team work and everything fell in place. Hours and Hours of work finally paid. Impact of implementation can be understood from the fact that entire system was off line for the users for almost a week! There were about 5 cross functional teams with about 100 people working on this Big Implementation. World wide offices were under the impact. Biztalk was a major part of the complete implementation if not the entire implementation. Every thing has to be timed to perfection between all the teams to get flawless implementation.&lt;br /&gt;&lt;br /&gt;I also want to share a piece of code that I created as a workaround for existing process in place. With the recent implementation the transaction volume is projected to increase FOUR folds both in frequency and size. The present implementation is very database centric as all the business validations are run through queries in Oracle. This leads to instance of “connection pool time out” issues. Even though the code is optimized, this issue is something that we have not been able to completely eliminate. There are definitely some ideas architecture wise that can help. But we neither have budget nor time to implement them. So the workaround for that is to control or throttle the number of transactions passing through Biztalk. Since we can’t tell users not to send files in multiple batches, one thing we can do is to control the execution from our end.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;The Plan:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Create a common folder that will receive the files&lt;br /&gt;2) Create a way to copy the files from this folder to biztalk pick up locations and then delete the files. The following code is the core of the solution that will do the job.&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click&lt;br /&gt;Dim fileNameCollection() As String&lt;br /&gt;Dim totalFiles As Collection&lt;br /&gt;&lt;br /&gt;Dim ActualFilename As String&lt;br /&gt;Dim LastIndex As Integer&lt;br /&gt;&lt;br /&gt;Dim SetFolder As System.IO.Directory&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;fileNameCollection = SetFolder.GetFiles("C:\FileMover\") ' set source folder&lt;br /&gt;Try&lt;br /&gt;Dim i As Integer&lt;br /&gt;For i = 0 To fileNameCollection.Length - 1&lt;br /&gt;LastIndex = fileNameCollection(i).LastIndexOf("\")&lt;br /&gt;ActualFilename = fileNameCollection(i).Substring(LastIndex + 1)&lt;br /&gt;System.Threading.Thread.Sleep(10000) (May not be required when used as scheduled job)&lt;br /&gt;&lt;br /&gt;System.IO.File.Copy(fileNameCollection(i), "C:\FileMover\Archive\" + ActualFilename, True)&lt;br /&gt;System.IO.File.Delete(fileNameCollection(i))&lt;br /&gt;&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Catch&lt;br /&gt;Finally&lt;br /&gt;&lt;br /&gt;End Try&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;End Sub&lt;/p&gt;&lt;p&gt;------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;This code will be further made database configurable using SQL database. The variables being “Folder Locations”, “Number of files to be dropped” and “Time Interval” between each file.&lt;br /&gt;&lt;br /&gt;Another possible use of this application can be during stress testing. Instead of manually dropping the file, this application can drop them automatically after all the parameters are configured. So switch on the performance indicator and go home! When you come back all the test statistics will be written in the file.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-3359961927283427197?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/3359961927283427197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=3359961927283427197&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3359961927283427197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/3359961927283427197'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2007/01/another-successful-implementation.html' title='Another Successful Implementation'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-115866899963437204</id><published>2006-09-19T08:18:00.000-04:00</published><updated>2006-09-19T08:29:59.646-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Optional Fields in FF Schema</title><content type='html'>My tryst with FF Schema continues. In this edition it is the optional field settings that I will be tackling. I have a positional file with following structure.&lt;br /&gt;&lt;br /&gt;A 123 456 789  &lt;br /&gt;B 735 323 456&lt;br /&gt;C 824 359 531&lt;br /&gt;&lt;br /&gt;A occurs 1 to unbounded&lt;br /&gt;B occurs 0 to unbounded&lt;br /&gt;C occurs 0 to unbounded&lt;br /&gt;&lt;br /&gt;For optional group (B and C) I created a delimited level and made nillable = "true" and minoccurs ="0". I did same settings for positional group. I am not sure if it required at both levels so I did as a safety measure.&lt;br /&gt;&lt;br /&gt;Now for some reasons, C started acting like an optional record but NOT B. I tried playing around with delimiter settings etc but nothing worked. Then I thought of change parser optimization property at root element. Default is "speed" and I changed it to "complexity" and bingo it worked. It seems that default parser setting did not recognize Min occurs ="0". But it is strange as it worked for C level.&lt;br /&gt;&lt;br /&gt;  I Googled the issue and I found out that people faced the same issue and did what I did. If only, I would have seen these sites before. I would have saved a DAY!&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-115866899963437204?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/115866899963437204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=115866899963437204&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/115866899963437204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/115866899963437204'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/09/optional-fields-in-ff-schema.html' title='Optional Fields in FF Schema'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-115690890545319469</id><published>2006-08-29T22:55:00.000-04:00</published><updated>2006-08-29T23:35:05.500-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Flat File Schema and Early Termination</title><content type='html'>For those who have worked with Flat File Schemas, must have used or at least heard the property called "Early Termination". This Property is exposed with Biztalk SP2 but otherwise it can only be edited using Text editor. There is some kind of confusion as if what happens if the "Early Termination" is set to True.&lt;br /&gt;&lt;br /&gt;Let me illustrate it with an example:&lt;br /&gt;&lt;br /&gt;Suppose FF schema have 5 fields (A,B,C,D and E) and each 10 in length. The file looks something like:&lt;br /&gt;&lt;br /&gt;AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEE.&lt;br /&gt;&lt;br /&gt;Now if we set up "Early Termination" as True. The following scenarios are parsed properly and rest fail in Biztalk schema.&lt;br /&gt;&lt;br /&gt;1)AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEE (Parsed)&lt;br /&gt;2) AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDE(Parsed)&lt;br /&gt;3) AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDD (Not Parsed)&lt;br /&gt;4) AAAAAAAAAABBBBBBBBBBC  CCCCCCCDDDDDDDDDDE (Parsed)&lt;br /&gt;&lt;br /&gt;So this property only allows flexibility for the last field in the schema.&lt;br /&gt;&lt;br /&gt;I faced a situation in a project where Source system sent a file that looked something like:&lt;br /&gt;&lt;br /&gt;AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDD&lt;br /&gt;&lt;br /&gt;It sent less than 5 fields (say 4) and the last field in the file (not in the schema) was partially or completely filled. In Either scenario it will be rejected. Problem was that Source System was very inflexible and would not change the file to suit Biztalk parsing needs.&lt;br /&gt;&lt;br /&gt;There were different options that I thought of. I knew that we have to pad the file but question was how to do that. Since Biztalk schema does not pad the incoming file but only pads the outgoing file. And we were receiving the file so we could not use padding.&lt;br /&gt;&lt;br /&gt;The other option was do create a pipeline component that would read the stream and pad it before it hits the Biztalk FF schema. Or create some kind of pre processor (windows service) that would do that padding while reading the stream.&lt;br /&gt;&lt;br /&gt;It seemed as stream manipulation would be the only way to get around this issue but I wanted to avoid it as I am not a BIG fan of stream manipulation because of inherent dangers associated with it.&lt;br /&gt;&lt;br /&gt;So, I thought hard and it clicked to me that I could use the padding property of Biztalk schema to achieve what I needed. All I need to do is to turn the padding property "inside out". In other words.  I did the following:&lt;br /&gt;&lt;br /&gt;1) Created a simple orchestration with one receive and send shape.&lt;br /&gt;2) Defined a schema with one element only. This way one can take 5 fields together as single field and then use padding property to pad from the last position of incoming field to the maximum positional; length of the complete record in the schema. 50 in our case.&lt;br /&gt;3) In the schema set Padding as Left justified and use Hexadecimal value of "Tab".&lt;br /&gt;4) Define a single message with above schema&lt;br /&gt;5) Create a send pipleline that refers to this single schema with padding.&lt;br /&gt;6) Recv and Send Port will refer to same message.&lt;br /&gt;&lt;br /&gt;Complete the orchestration and then drop the file. For a file like:&lt;br /&gt;&lt;br /&gt;AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDD&lt;br /&gt;&lt;br /&gt; The output will be padded to complete length of 50.&lt;br /&gt;&lt;br /&gt;Then run this file through original FF schema with 5 fields. It will be parsed properly and will give you the right XML.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-115690890545319469?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/115690890545319469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=115690890545319469&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/115690890545319469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/115690890545319469'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/08/flat-file-schema-and-early-termination.html' title='Flat File Schema and Early Termination'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-115297757363038046</id><published>2006-07-15T11:27:00.000-04:00</published><updated>2006-07-15T14:15:50.293-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Validating an Instance in Biztalk</title><content type='html'>How can one validate an instance of the input file and ensure that the required fields needed for business process are present, data type is correct and min/max lengths are conformed with. This is done to filter “junk” data going into Business Database and to maintain Database Integrity. Further if one needs to catch the errors and populate a database it becomes even more complicated. So what can be done?&lt;br /&gt;&lt;br /&gt;Biztalk 2004 has no ability to validate instance on the fly and accumulate errors at once. But, Dot Net offers “SchemaValidation” class to validate the input instance and errors that are trapped can be accumulated and passed as a string through a stored procedure to a SQL/Oracle database. This is how it works.&lt;br /&gt;&lt;br /&gt;1. Pass “Instance” and the “Schema” to the schema validation class.&lt;br /&gt;a. Instance is the sample XML message that is to be validated.&lt;br /&gt;b. Schema is the xsd schema that will contain all the information about the required fields, data types, lengths etc.&lt;br /&gt;&lt;br /&gt;2. Creating the “tight” schema is a tedious process especially if the file is long. Each field has to be selected and the properties set.&lt;br /&gt;&lt;br /&gt;a. For required fields.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;i. &lt;u&gt;String type&lt;/u&gt;: Set following properties in schema&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Base Data Type : string&lt;br /&gt;2. Derived by: Restriction&lt;br /&gt;3. Nillable : False&lt;br /&gt;4. Min Occurs: 1 (empty is 1 too)&lt;br /&gt;5. Max length = as required&lt;br /&gt;6. Min length = 1&lt;br /&gt;&lt;strong&gt;&lt;u&gt;ii. Date type:&lt;/u&gt; &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Base Data Type : Date&lt;br /&gt;2. Derived by: Restriction&lt;br /&gt;3. Nillable : False&lt;br /&gt;4. Min Occurs: 1 (empty is 1 too)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;iii. Integer type&lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;1. Base Data Type : Integer&lt;br /&gt;2. Derived by: Restriction&lt;br /&gt;3. Nillable : False&lt;br /&gt;4. Min Occurs: 1 (empty is 1 too)&lt;br /&gt;5. Max Facet value = as required&lt;br /&gt;6. Min Facet value = as required&lt;br /&gt;&lt;br /&gt;b. For optional fields&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;i. String:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Base Data Type : string&lt;br /&gt;2. Derived by: Restriction&lt;br /&gt;3. Nillable : True&lt;br /&gt;4. Min Occurs: 0 (empty is 1 too)&lt;br /&gt;5. Max length = as required&lt;br /&gt;6. Min length = 0&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ii. &lt;u&gt;Date Type:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Base Data Type : date&lt;br /&gt;2. Derived by: List&lt;br /&gt;3. Nillable : True&lt;br /&gt;4. Min Occurs: 1 (empty is 1 too)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;iii. Integer type&lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;1. Base Data Type : Integer&lt;br /&gt;2. Derived by: List&lt;br /&gt;3. Nillable : True&lt;br /&gt;4. Min Occurs: 1 (empty is 1 too)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note&lt;/strong&gt;: Decimal Types follow same rules as Integer types. It is not possible to control the lengths for Decimal and Integer OPTIONAL fields from Biztalk schemas. To do this use .Net class that can read the length and validate it in next stage and reject or accept depending on the results.&lt;br /&gt;&lt;br /&gt;3. After this “tight” schema is created put this in a folder. Do NOT forget to append a namespace to this schema before passing it in the .Net class. The .Net Class will not work without namespace.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-115297757363038046?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/115297757363038046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=115297757363038046&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/115297757363038046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/115297757363038046'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/07/validating-instance-in-biztalk.html' title='Validating an Instance in Biztalk'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-114853131434132819</id><published>2006-05-25T00:18:00.000-04:00</published><updated>2006-05-25T17:22:11.493-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Creating FF Schemas in Biztalk - A Different Approach</title><content type='html'>One of my projects requires integrating a file from a Bank into our financial system. The Bank file is a positional flat file with 8 records. The structure is as follow:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1 – File header&lt;br /&gt;......2 – Transaction header&lt;br /&gt;................5 – Voucher Line&lt;br /&gt;................5A – Distribution Line&lt;br /&gt;................5B - Vchr Tax Line&lt;br /&gt;.......7 – Transaction trailer&lt;br /&gt;8 – File Trailer&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All the records can occur multiple times in the file. In past, I always had problems creating FF schemas for positional files especially in &lt;strong&gt;area of looping&lt;/strong&gt;. Surprisingly the approach I took this time made it very easy . I will try to break it down in small easy steps:&lt;br /&gt;&lt;br /&gt;I will not go in details of "postional" record entry but focus only on "&lt;strong&gt;Looping&lt;/strong&gt;"&lt;br /&gt;&lt;br /&gt;1) I used the “&lt;strong&gt;Bottoms&lt;/strong&gt;-&lt;strong&gt;Up&lt;/strong&gt;” approach (this is what I call it). I broke the file into smaller segments and designed starting from the deepest child element and then added other elements as I moved towards the top. i.e Record 5 to Record 1. And then I designed for rest of the file. i.e Record 5 to Record 8.&lt;br /&gt;&lt;br /&gt;2) I first designed the schema for only Record 5. I assumed that the file has only 3 records that can repeat multiple times within a root level. The structure looks something like:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/Level5.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/Level5.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5, 5A and 5B are the positional records that repeat multiple times. So they will have to be under a “delimited” record that has max occurs as “unbounded”. This delimited record will have name “Level5” and Child Delimiter type as "&lt;strong&gt;Default Child Delimiter&lt;/strong&gt;" and Child Order as "&lt;strong&gt;Infix&lt;/strong&gt;". &lt;strong&gt;I used the same properties for all the "Delimited" levels.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;3) Having designed Level 5, I then designed Record 2 . I followed the same principle. Since Record 2 is parent of Record 5, I placed it one level higher than Record 5 but at the same level as the delimited record “Level5”. Record 2 is positional record like Record 5 and can occur multiple times. So it will again go under “delimited” record that has properties as “unbounded”. We will name it as “Level7_2”. As it shared by Record 2 and Record 7 as we will see later.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/Level2_7.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/Level2_7.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4) I followed the same logic with Record 1 that is parent of Record 2.&lt;br /&gt;5) Having completed the “Middle to Top” path, I started symmetrically copying the same looping from “Middle to Bottom” to get the entire structure which will look like:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/Level1_7.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/Level1_7.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6) At end do not forget to add 1 root delimited record (&lt;strong&gt;Root&lt;/strong&gt;) above Level1_8 that will occur as Single.&lt;br /&gt;&lt;br /&gt;7) The last important thing is to set up the properties of the “&lt;strong&gt;Schema&lt;/strong&gt;” node as below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/schema.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/schema.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-114853131434132819?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/114853131434132819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=114853131434132819&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114853131434132819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114853131434132819'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/05/creating-ff-schemas-in-biztalk.html' title='Creating FF Schemas in Biztalk - A Different Approach'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-114623176910989633</id><published>2006-04-28T09:38:00.000-04:00</published><updated>2006-04-28T09:45:52.196-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>"Debugging is not supported under current trust level settings"</title><content type='html'>If you get the following error while trying to open ASP.net page on the host server.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"Debugging is not supported under current trust level settings"&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;You will also get 500 error if you hit this page using HTTP POST method from any other machine. This is what you do:&lt;br /&gt;&lt;br /&gt;Open the web.config file for the ASP solution and add the "&lt;strong&gt;BOLD&lt;/strong&gt;" text below.&lt;br /&gt;&lt;br /&gt;(opening tag)system.web(closing tag)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;(opening tag)trust level="Full" originUrl="" (closing tag)&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-114623176910989633?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/114623176910989633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=114623176910989633&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114623176910989633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114623176910989633'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/04/debugging-is-not-supported-under.html' title='&quot;Debugging is not supported under current trust level settings&quot;'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-114444596339570816</id><published>2006-04-07T17:28:00.000-04:00</published><updated>2007-02-22T16:36:19.328-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Biztalk Server 2006 Clinic- Summary</title><content type='html'>I attended the Biztalk 2006 clinic on Wed 4 th April at MSFT Office in Iselin,NJ. It was very informative. I left wanting to know more about BAM though. For some reasons it feels as there is so much that can be done with this tool. But lack of documentation always gets me. I have tried my hand on it and honestly I do not feel it very flexible and intuitive. BAM portal addition in 2006 is certainly a positive step. Acceptance of BAM by Biztalk community can dramatically increase the value offered by Biztalk. As a Business user nothing is better than able to use BAM. I scribbled some notes from the clinic that I am posting. These notes came handy while making a presentation to my team.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------------------&lt;br /&gt;&lt;br /&gt;The presentation started with videos of some companies that are using Biztalk 2004 at present and how they are benefiting from it:&lt;br /&gt;&lt;br /&gt;1) INVENSYS: Uses for manufacturing plant&lt;br /&gt;2) Balboa: Financial/Insurance Company&lt;br /&gt;&lt;br /&gt;These companies’ uses “Rules Engine” that enables Managers/Operational people to change the variables based on scenarios. This provides them with flexibility&lt;br /&gt;&lt;br /&gt;Showed Funny Video We-SYP (We share ur pain).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;First Speaker: Sai Prakash from MSFT&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Managing and Monitoring:&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tools:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) &lt;strong&gt;Admin Console&lt;/strong&gt; : General Managing of Applications (Deploying, Enlisting, Starting etc)&lt;br /&gt;2) &lt;strong&gt;Microsoft Operation Manager (MOM):&lt;/strong&gt; For IT monitoring i.e can be used to put alerts to perform specific tasks in event of error. Example being “Contact John Doe if certain error happens”. In short it can be used as knowledge database&lt;br /&gt;3) &lt;strong&gt;BAM&lt;/strong&gt;: This is highest level of monitoring that is intended for a business user.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tasks that required used of Visual studio for Biztalk 2004 can be performed from Admin Console for 2006 in a very efficient manner. Concept of &lt;strong&gt;Application&lt;/strong&gt; is THE thing in this new version. Each solution can be named as an Application and then all the related artificats like Orchestrations, Maps, Schemas, Pipelines, Non- Biztalk assemblies and Ports can be added under this. Once this is done a single right click on the Application to start will do all of the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) GAC the Non-biztalk assemblies&lt;br /&gt;2) Deploy the Biztalk assemblies&lt;br /&gt;3) Enlist and Start the orchestrations.&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/AdminConsiole.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/AdminConsiole.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Developer can create MSI packages from Admin console and send them to Admins. Admins just need to import these MSI packages and run and the whole application is installed. The only step left is a right click that starts the application.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;So no Need for Deployment Wizard or Batch files for deploying&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;One can even include a batch file (pre processing script) to create folders in case they need to be created while deploying to a new machine.&lt;br /&gt;&lt;br /&gt;The new console will give a snapshot of all errors on per application basis. Further information about the error can be then obtained by simply clicking on the link for errors.&lt;br /&gt;&lt;br /&gt;There is a new Role added called IT-OP. This gives same privileges like Admins but READ only. This also shields any sensitive financial/hipaa information that need not be seen across the board.&lt;br /&gt;&lt;br /&gt;Another feature is subscribing to errors in the pipelines. Subscription can be based both on Content and Context. There can be a orchestration that sends these errors as an email to the concerned people in a “InfoPath Form” like format. The concerned people can then rectify the error that is causing the error and then send the message back to biztalk and resume the processing&lt;br /&gt;&lt;br /&gt;Sai showed a simple demon by setting up and recv and send port. He then stopped the send port and dropped the messages. He then opened the Admin console and we could see the 15 error messages (corresponding to 15 files her dropped) against the specific application name.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Briefly demonstrated FF wizard.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Second Speaker: Kent Brown (Virtual TS) from CitiHudson group.&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;He spoke about BAM and how this is the most underutilized aspect of Biztalk. He compared it a performance counter monitor. BAM gives an eagle eye view of the business flow through Biztalk&lt;br /&gt;&lt;br /&gt;BAM can tap into the work flow at different points and record the pre selected variables. These variables can be of different types. Like Milestones, Dates, Durations, Content variables (Variables inside the message like PO#, Invoice #).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Three Components: Ascending Hierarchy&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. BAM Activity&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. BAM view (Consolidation of BAM Activity)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Observation Model (Consolidation of BAM view and BAM Activity)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the background, BAM uses OLAP processing. It creates cubes to process data&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BAM: Roles and Tools:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Role:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;1) &lt;strong&gt;Business Analyst:&lt;/strong&gt; Creates the BAM spreadsheet underlining the variables and parameters he needs to track.&lt;br /&gt;2) &lt;strong&gt;IT Pro&lt;/strong&gt;:&lt;br /&gt;3) &lt;strong&gt;Developer&lt;/strong&gt;: Map these variables to the actual work flow through Orchestra ions, Pipelines etc&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tools:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) BAM spreadsheet: Open the excel sheet. Go to Add Ins and add BAM.&lt;br /&gt;2) Create BAM Activity and give it a name.&lt;br /&gt;3) Add the variables that will be part of this activity and need to be populated. These can be milestones, duration of even the content from the message.&lt;br /&gt;&lt;br /&gt;Use &lt;strong&gt;Tracking Profile Editor&lt;/strong&gt; to map these variables from the Work Flow. i.e. In orchestration. These mapping points can be at send, receive shapes. Some field in the message body. Below is a pic of Editior.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/TrackingProfile.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;I asked if fields need to be promoted to be accessed while mapping. The answer was NOT NECCESARILY.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;BAM can also tap across multiple orchestrations across multiple servers.&lt;br /&gt;&lt;br /&gt;He also gave an example how a variable that can change from one application to another can be still represented in the same row. Ie. PO ID: 123 can become SO ID: 246 in marketing application and SHIP ID: 243 in Shipping system. BAM can track this variable through out.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;What is new in BAM 2006?&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Out of box BAM Portal. Runs ASP.Net 2.0&lt;br /&gt;2) Integration with Message Only scenario. i.e if Orchestrations not present in the end to end file process.&lt;br /&gt;3) The BAM portal also has search feature.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-114444596339570816?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/114444596339570816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=114444596339570816&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114444596339570816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114444596339570816'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/04/biztalk-server-2006-clinic-summary.html' title='Biztalk Server 2006 Clinic- Summary'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-114359278982160477</id><published>2006-03-28T19:14:00.000-05:00</published><updated>2006-03-28T19:44:07.643-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Migration from Biztalk 2004 to Biztalk 2006</title><content type='html'>I recently converted a Biztalk 2004 project to Biztalk 2006. Believe me this time MSFT is right when they say that "&lt;strong&gt;Migration is very Simple".&lt;/strong&gt; From my experience, all the orchestrations, pipeline, schemas and Maps (All Biztalk Artificats) were migrated without any changes. Some changes were required for some of the .Net functions that changed their signature from Studio 2003 to Studio 2005. Below are some screen shots of the wizard. &lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/FirstStep.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/FirstStep.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/SecondStep.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/SecondStep.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/ThirdStep.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/ThirdStep.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/FourthStep.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/FourthStep.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/FifthStep.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/FifthStep.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/SixthStep.0.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/SixthStep.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;(This Final step gives the Migration Report)&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;BTW: &lt;/u&gt;&lt;/strong&gt;  Biztalk 2006 RTM is ready to roll!&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-114359278982160477?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/114359278982160477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=114359278982160477&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114359278982160477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114359278982160477'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/03/migration-from-biztalk-2004-to-biztalk.html' title='Migration from Biztalk 2004 to Biztalk 2006'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-114312380582471015</id><published>2006-03-23T09:21:00.000-05:00</published><updated>2006-03-23T09:23:25.846-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Coming soon!</title><content type='html'>I am in process of writing a research paper on Business Integration in general and how Biztalk positions itself in the grand schema of things.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-114312380582471015?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/114312380582471015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=114312380582471015&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114312380582471015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114312380582471015'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/03/coming-soon.html' title='Coming soon!'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-114304049461189636</id><published>2006-03-22T10:10:00.000-05:00</published><updated>2006-03-24T12:55:29.886-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Difference in HAT screens</title><content type='html'>I noticed that the HAT screen in 2006 is different than 2004. Actually there are certain functionalities that are absent in 2006. i.e "Operations" and "Configuration".&lt;br /&gt;see below:&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/HAT-2006.jpg" border="0" /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Trying to figure out as if how to terminate the "instances" in 2006 . In 2004 it was done by going to "Operations" and &lt;strong&gt;terminating&lt;/strong&gt; the instances. Do not see anything similair in 2006 as for now. I think I have the answer, it can be done from Biztalk Admin Console&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-114304049461189636?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/114304049461189636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=114304049461189636&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114304049461189636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114304049461189636'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/03/difference-in-hat-screens.html' title='Difference in HAT screens'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-114295551895431848</id><published>2006-03-21T10:00:00.000-05:00</published><updated>2006-03-24T12:54:38.000-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Some New Features in Biztalk 2006</title><content type='html'>Biztalk 2006 has some little changes here and there that can contribute to efficiency. Some of them are:&lt;br /&gt;&lt;br /&gt;1) &lt;strong&gt;Having a "drop" down on the top pane of Solution Explorer window.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As in Biztalk 2004 version there was a horizontal scrolling to view all the artifacts contained in the solution. This was very frustrating at times because one could not see all the artifacts at once and needed to keep clicking to get to the right one. 2006 has a &lt;strong&gt;drop down &lt;/strong&gt;that gives the list of all the artifacts at once and one can just click the required one.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/dropdown.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2)&lt;strong&gt; File adapter (recv and send) contains an option for authentication.&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;As in 2004 version, biztalk service account had to have full permissions on the shared drive that contains the receive or send folder. In 2006 it need not be. Any &lt;strong&gt;user name and password&lt;/strong&gt; that has permissions to the shared drive can be used to access the shared driver from Biztalk Explorer. It need not be Biztalk service account. &lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/FileAdapterAuthentication.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/FileAdapterAuthentication.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) &lt;strong&gt;File Adapter Batching&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;The receive location has option of batching the incoming file. This option was not available in 2004. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/FileAdapterBatching.jpg" border="0" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-114295551895431848?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/114295551895431848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=114295551895431848&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114295551895431848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114295551895431848'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/03/some-new-features-in-biztalk-2006.html' title='Some New Features in Biztalk 2006'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-114248752029137352</id><published>2006-03-16T00:35:00.000-05:00</published><updated>2006-03-16T00:41:13.830-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Event Name: BizTalk Server 2006 First Look Clinic - Iselin, NJ</title><content type='html'>I registered for this seminar.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;For interested  people :&lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;Session Code: 1032288971&lt;br /&gt;Session Name: BizTalk Server 2006 for DevelopersSession&lt;br /&gt; Location: Microsoft NJ Office/Long Beach Conference Room&lt;br /&gt;Session Room:&lt;br /&gt;Session City: IselinSession&lt;br /&gt;Start Date: 04/04/06&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-114248752029137352?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/114248752029137352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=114248752029137352&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114248752029137352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114248752029137352'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/03/event-name-biztalk-server-2006-first.html' title='Event Name: BizTalk Server 2006 First Look Clinic - Iselin, NJ'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-114058144244448804</id><published>2006-02-21T23:08:00.000-05:00</published><updated>2006-02-22T07:59:40.896-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Secure FTP Adapter</title><content type='html'>Biztalk 2004 comes with out of box adapter for FTP. But if you want to transmit USING secure FTP then you need to install custom adapter. One of the recommended SFTP adapters by MSFT is from their partner /n Software. It is simple installation. Once the installation is done go to Biztalk Admin and click on Adapters. Then add New. Name it SFTP and then from the drop down "Adapter" chose the installed adapter.&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/S2.0.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/S2.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, when you go and create a new Send Port. Under the Transport Type you can see the option for new adapter SFTP. You can open the properties for URI and add the information as you will add for standard FTP.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/s1.0.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/s1.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As far I know one of the drawbacks to this adapter is that it does not exposes its properties in Orchestration. I will dig deeper into this. If I can't access the properties in Orchestration then I can't use SFTP in a dynamic Port like I can use standard FTP.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-114058144244448804?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/114058144244448804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=114058144244448804&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114058144244448804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/114058144244448804'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/02/secure-ftp-adapter.html' title='Secure FTP Adapter'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-113825389400472337</id><published>2006-01-26T00:10:00.000-05:00</published><updated>2006-01-26T09:28:00.780-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Custom Pipeline Woes</title><content type='html'>In one of my project, the source system was sending 2 almost similar messages to Biztalk. The only difference was the root node name. I had 2 ways of dealing with it.&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;br /&gt;Solution 1:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Create separate document schemas&lt;br /&gt;2) Create separate Receive Pipelines referring to each document schema&lt;br /&gt;3) Use a map to change the root node name so to have exactly same message that can pass through the common orchestration thereafter.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Less Development time&lt;br /&gt;2) Easy message retrieving in case of failure&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Additional artifacts required in form of additional schemas and pipelines.&lt;br /&gt;2) Low in performance and high in memory usage as we have to use extra map.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Solution 2:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Use a custom pipeline component that will replace the “root node” name to a common node name.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Cleaner and Faster&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) More development time&lt;br /&gt;2) If error handling is not proper then the entire message is lost. This is because there is no persistence to messagebox in the pipelines.&lt;br /&gt;&lt;br /&gt;Whereas the first solution is very easy, the second is relatively difficult. I tried the second one for simple reason that it was challenging and I thought I could do it within reasonable time that I had. I started by following the standard procedure for developing custom pipeline components. I used the “FixMsg” custom pipeline sample from “SDK” as my base code. It is located at “..\Program Files\Microsoft BizTalk Server 2004\SDK\Samples\Pipelines\CustomComponent”. This saved me some time in not “reinventing” the wheel. I worked on the “Execute” method and converted the Stream to Byte and then Byte to string. Then I tried replacing the required node in string and then tried to convert back the new string back to stream. Since pipeline only deals with streaming data. I ensured that the return is a “stream”. My approached looked quiet logical to me but the results were NADA. This string replacement did not actually work as I was not able to pass the “stream” back to the next stage of the pipeline. Then, I thought of using XPath. But since pipeline deal with streaming data whereas Xpath requires the whole message to be loaded into memory. I could not use the normal Xpath but I could “streaming Xpath”. This is called “forward only” Xpath. I tried “cloning” the stream so I can use XMLReader class on it. But could not go anywhere, then I gave up the solution as I was running out of time. I lost this challenge!! But, I will definitely revisit it once I get some “breathing space”.&lt;br /&gt;&lt;br /&gt;Any inputs will be welcome.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-113825389400472337?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/113825389400472337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=113825389400472337&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113825389400472337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113825389400472337'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/01/custom-pipeline-woes.html' title='Custom Pipeline Woes'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-113754018155703131</id><published>2006-01-17T18:12:00.000-05:00</published><updated>2006-01-23T22:45:42.886-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Capturing ACKs and NACKs</title><content type='html'>I am presently working on "File Mover" application. This application will replace existing VB application to move files from point A to point B based on the filename. Filename contains the send location address. I am populating a SQL database to track the file moved from point A to point B. One of the problems I am having is to capture the "Error in Transmission". This is tough to capture because File adapter transmission is separate from Orchestration process. Once orchestration is complete, it does not really care if message was sent or error out. For this we need to use concept of ACKs (Acknowledgements) and NACKs (Negative Acknowledgements). ACKs indicate successful message transmission and NACKs indicate failures in transmissions. Since I am using one way "asynchronous" FILE transmission these come handy. Some readers may ask why not use Request-Response. The reason is that they can only be used for HTTP adapter when there is a response that can be captured. For File adapter transmissions, we can only use ACKs and NACKs&lt;br /&gt;&lt;br /&gt;Follow steps below and that is all you need to capture ACKs and NACKs.&lt;br /&gt;&lt;br /&gt;1) Put Send shape in a Scope and make "Transaction Type" as "None".&lt;br /&gt;2) Set "Synchronized" property to "True".&lt;br /&gt;3) Mark Orchestration with Delivery Notification = Transmitted&lt;br /&gt;4) Use "Catch Exception shape"&lt;br /&gt;5) Select the following exception type in properties:&lt;br /&gt;"Microsoft.XLANGs.BaseTypes.DeliveryFailureException"&lt;br /&gt;6) Call the insert method for populating database in the "Catch" shape.&lt;br /&gt;8) Put the "Send" shape to save the "bad" files to a folder.&lt;br /&gt;7) Then PUT the "terminate" shape in the "CATCH shape". &lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/sendpory.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/scope.png"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/scope.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/orches.png"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/orches.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-113754018155703131?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/113754018155703131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=113754018155703131&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113754018155703131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113754018155703131'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/01/capturing-acks-and-nacks.html' title='Capturing ACKs and NACKs'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-113703694583604778</id><published>2006-01-11T22:23:00.000-05:00</published><updated>2006-01-26T00:46:41.786-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Wonderful Cruise!</title><content type='html'>The other day I was talking to one of my co worker (Abhi). He also maintains a Biztalk blog &lt;a href="http://biztalkland.blogspot.com"&gt;http://biztalkland.blogspot.com&lt;/a&gt;. We discussed about putting more non-technical stuff on the blob. We gave argument for and against it. How it will look out of place ...blah..blah. Finally, we decided that Blog is a medium to express. So there are no Rules for it as such. People might argue on this. Everyone is entitled to his/her opinion. After the conversation, I decided to trickle some personal stuff now and then.&lt;br /&gt;&lt;br /&gt;I went on cruise with my wife. It was our "HoneyMoon" cruise. Even though it took place after 6 months of our marriage. I had just enough time to get married in June so we did not push for Honeymoon that time. Although we did went to India for our Reception as we got married in USA. After we came back she became busy with her residency and I went down with my project. Xmas and New Year stretch was good for the break we needed and we used that time to hop on a ship and hit the Caribbean. We went to San Juan, Saint Maartin and Saint Thomas. I personally loved Saint Thomas. The beaches are pristine there. We had tons of fun before coming back to Sub Zero temps. I am also putting some pics from our trip!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/Formal_Jazz_Ship.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/Formal_Jazz_Ship.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/Formal_Jazz_Ship.1jpg.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/Formal_Jazz_Ship.1jpg.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6262/912/1600/Enjoying_Coconut_Drink_SaintMartin.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand; HEIGHT: 209px" height="231" alt="" src="http://photos1.blogger.com/blogger/6262/912/320/Enjoying_Coconut_Drink_SaintMartin.jpg" width="320" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-113703694583604778?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/113703694583604778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=113703694583604778&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113703694583604778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113703694583604778'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/01/wonderful-cruise.html' title='Wonderful Cruise!'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-113634631767578793</id><published>2006-01-03T22:31:00.000-05:00</published><updated>2006-01-03T22:47:14.413-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>FileMove Application and "MessageBox" error</title><content type='html'>Recently, I was asked to create an application that will replace an existing VB application. The application was to move the Files from a common location and drop them to a different destination based on the FileName. The File Name had the destination name in it. This is what I did:&lt;br /&gt;&lt;br /&gt;1) Created a simple Orchestration with single receive port that will have filter for every possible file. i.e. pdf, dat, xml, txt etc.&lt;br /&gt;&lt;br /&gt;2) Create a Dynamic port&lt;br /&gt;&lt;br /&gt;3) Create a "Helper" class in VB.net. This will parse the incoming file name to extract the URI for dynamic port. This URI will determine where the file should be routed too.&lt;br /&gt;&lt;br /&gt;I set up the whole project but found some interesting facts:&lt;br /&gt;&lt;br /&gt;1) If the URI is blank for some reasons. You will get the following error in the eventvwr.&lt;br /&gt;&lt;br /&gt;"Exception occured when persisting state to database".&lt;br /&gt;&lt;br /&gt;2) The syntax for the URI for dynamic port will be.&lt;br /&gt;&lt;br /&gt;&lt;a href="file://servername/sharedfolder/Filename"&gt;file://servername/sharedfolder/Filename&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The start of the URI will tell the port that it is a "FILE" adapter. The rest will give the complete path to drop the file.&lt;br /&gt;&lt;br /&gt;3) While using &lt;strong&gt;File.ReceiveFileName&lt;/strong&gt; in the expression share. It will not only give the whole filename but also the path of the receive folder. In order to get the actual FileName, one will have to parse the whole path string.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-113634631767578793?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/113634631767578793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=113634631767578793&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113634631767578793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113634631767578793'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2006/01/filemove-application-and-messagebox.html' title='FileMove Application and &quot;MessageBox&quot; error'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-113522400084439336</id><published>2005-12-21T22:47:00.000-05:00</published><updated>2005-12-21T23:02:51.240-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Changing external assembly reference in Maps &amp; Orchestrations</title><content type='html'>What do you do if for some reasons you have to change the name of external assembly that is being referenced by Maps and Orchestrations? The change can be for reasons like:&lt;br /&gt;&lt;br /&gt;1) New SNK was created and hence the Public Token key changed. (Very rare to happen)&lt;br /&gt;&lt;br /&gt;2) For some reasons the name of external assembly have to be changed. (We had to do this in our project. This was done in order to adhere to naming standards of Biztalk artifacts)&lt;br /&gt;&lt;br /&gt;Standard way of doing this can be really tedious. As one have to go to each map and click on each "Functoid" and go to properties to change to new "Assembly name". Same thing will need to be done for Orchestrations.&lt;br /&gt;&lt;br /&gt;If like us you have 20 maps with average 30 functoids per maps and 20 orchestrations then you need to keep 2 days aside for this "boring" job!&lt;br /&gt;&lt;br /&gt;The second option can make your life easy and get you up and running in 30 mts as compared to 2 days. This is what you do:&lt;br /&gt;&lt;br /&gt;1) Open the Map/Orchestration in Text Editor (Ultra Edit in our case)&lt;br /&gt;&lt;br /&gt;2) Do a Find and replace in the whole file. "Find" "old assembly.dll" replace with "new assembly.dll".&lt;br /&gt;&lt;br /&gt;3) Replacement will be done for "Assembly", "Class" and "Assembly Path" in the file.&lt;br /&gt;&lt;br /&gt;4) Save the file and you are all set!! That easy!&lt;br /&gt;&lt;br /&gt;Care should be taken while doing this operation as it is large scale "find" and "replace" operation.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-113522400084439336?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/113522400084439336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=113522400084439336&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113522400084439336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113522400084439336'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/12/changing-external-assembly-reference.html' title='Changing external assembly reference in Maps &amp; Orchestrations'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-113445619832122328</id><published>2005-12-13T01:28:00.000-05:00</published><updated>2006-01-11T22:23:21.256-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Aggregating the "Split-Gatherer" Pattern using SQL</title><content type='html'>One of the limitations of BTS 2004 as compared to BTS2006 is its inability to “gather” the transactions it has split from the original file. “Splitting” can be achieved by combination of “Document” and “Envelope” schemas. In my present project, we needed to split the file and then add the “split” transactions on file -by- file basis. Presently, it is achieved by the “Convoy” design. This involves using “Correlation” dataset that waits for the field that is “correlated” (FileName in our case). It then adds all the “split” transactions for that file. Since we rely on “serial” processing as compared to “parallel” processing that orchestrations are intended for, this is not an optimum design. The major drawbacks of this approach is 1) It leads to “zombie” scenario in Biztalk. 2) Performance declines exponentially as the transaction volume increases.&lt;br /&gt;&lt;br /&gt;These 2 scenarios were slowly taking menacing proportions. In order to counteract them our team came up with “SQL database” aggregator. It is simple in design and very fast. The files are split as before. But now each transaction is stored in SQL database as XML node. Parameters like Orchestration ID, FileName and Unique identifiers are passed along with the XML node. At the end the XML file is extracted by combining these nodes and using parameters passed to aggregate the correct transactions from the database. Stored procedures are used to Build the final XML .&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-113445619832122328?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/113445619832122328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=113445619832122328&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113445619832122328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113445619832122328'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/12/aggregating-split-gatherer-pattern.html' title='Aggregating the &quot;Split-Gatherer&quot; Pattern using SQL'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-113401083595935387</id><published>2005-12-07T21:52:00.000-05:00</published><updated>2005-12-14T15:58:07.076-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Biztalk 2006 is cool!!</title><content type='html'>Finally I got some time to review 2006. Here are some features that you might find very useful in Biztalk 2006.&lt;br /&gt;&lt;br /&gt;1) Calling Pipelines from Orchestrations using expression box&lt;br /&gt;&lt;br /&gt;This can help in creating single common orchestrations for messages with different schemas as they can be routed using dynamic calls of "Pipelines" from Orchestration. This will be real cool!!&lt;br /&gt;&lt;br /&gt;2) Flat File wizard for creating Schemas&lt;br /&gt;&lt;br /&gt;This will be huge! From my experience, creating FF schemas are real pain. Imagine having wizard for it now.:)&lt;br /&gt;&lt;br /&gt;3) Standard processing and Recoverable interchange process in Pipelines&lt;br /&gt;&lt;br /&gt;In my present project we are using substantial .Net code to log the errors in pipelines. This actually slows down the processing time. This new feature will definitely help!&lt;br /&gt;&lt;br /&gt;4) Can generate errors that can be subscribed by send ports using pass through. Use filter on original receive ports that we created. Catch the error message, change it and re process it. This is called “Failed message Routing”&lt;br /&gt;&lt;br /&gt;5) POP for email receive&lt;br /&gt;&lt;br /&gt;Biztalk 2004 CAN only send emails. 2006 will give ability to even receive and process them. Imagine activating Orchestration by sending an email.&lt;br /&gt;&lt;br /&gt;6) Better BAM services&lt;br /&gt;&lt;br /&gt;7) Interfaces&lt;br /&gt;&lt;br /&gt;SAP adapter is standard with 2006!&lt;br /&gt;&lt;br /&gt;8) Shared point adapter&lt;br /&gt;&lt;br /&gt;9) Ordered delivery:&lt;br /&gt;&lt;br /&gt;To achieve first-in-first-out or "Ordered" delivery is BTS 2004 we need MSMQ/T . But in BTS 2006, with little configuration the same thing can be achieved by using standard MSMQ. This is what is required.&lt;br /&gt;&lt;br /&gt;1) Set Ordered Processing Property on Send Port&lt;br /&gt;2) Set the same Order Processing property on Receive Port&lt;br /&gt;3) Set MSMQ to transactional.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-113401083595935387?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/113401083595935387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=113401083595935387&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113401083595935387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113401083595935387'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/12/biztalk-2006-is-cool.html' title='Biztalk 2006 is cool!!'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-113219585389431135</id><published>2005-11-16T21:33:00.000-05:00</published><updated>2005-12-06T17:22:50.670-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Connection Pool Issue</title><content type='html'>Been a long time since I wrote my last Blog. Been busy with present project and also setting up my house with my wife. Aaah! Finally I am back to where I belong:). Now the problem statement.&lt;br /&gt;&lt;br /&gt;In my present project, we extract data from PSFT database using SQL. These queries are called by Functoid in the Maps. The number of these functoids is about 40 for each map. We are using OracleClient class to Fill the dataset with the return value. Database connection is closed and opened after every query. Lately the transaction volume has increased and is projected to increase further. This increase in volume is returning "connection pool" error. Because a file can have multiple transactions and each transaction can potentially open 40 connections at a time. We talking about thousands per day.&lt;br /&gt;&lt;br /&gt;After some brain storming sessions, we came up with the following solution.&lt;br /&gt;&lt;br /&gt;It will be a 3 tier solution.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;First layer&lt;/strong&gt; will be windows service which will create a dataset from all the possible queries. The &lt;strong&gt;second layer&lt;/strong&gt; will be a webservice that will work like a wrapper and pass the resulting XML dataset from webservice to the Orchestration. Orchestration will be &lt;strong&gt;third layer&lt;/strong&gt; that will call the webservice and grab the XML file with the values that will be then mapped using existing map. This way we will able to limit the connection pool from 1 per transaction to 1 per file. Since a file can have anywhere till 1000 transactions. This is a huge reduction.&lt;br /&gt;&lt;br /&gt;Below is my "brain dump".&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Windows Service:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Will do the processing and all the queries reside here.&lt;br /&gt;2) Uses Config file for queries with use of array so that new queries can be added easily&lt;br /&gt;3) Pool at specific intervals&lt;br /&gt;4) Load the data at first initialization and after that just validates it if it is latest.&lt;br /&gt;5) Validation will be done on bases of some flags&lt;br /&gt;6) Once change detected the whole dataset is loaded.&lt;br /&gt;7) Dataset is per site.&lt;br /&gt;8) Can have single window service per site or one for all sites&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Web Service:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) Acts as wrapper to pass the dataset&lt;br /&gt;2) Runs the validation on data set whenever called and based on changes will re-load the dataset using windows service.&lt;br /&gt;3) Will be called from Aggregator using Expression shape.&lt;br /&gt;4) Call will be made per file that coming in to orchestration&lt;br /&gt;5) Every time web service is called it will invoke validation method that will in turn look for “flags”. That way we will avoid loading data all the time when webservice is called.&lt;br /&gt;6) Each call of webservice will do data validation and not data upload. Unless it needs to.&lt;br /&gt;7) This way we open one connection per file and that too 99% of time will load no data. Just do the validation&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Orchestration&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1) With the present design, use expression shape.&lt;br /&gt;2) Can pass System. XML as parameter&lt;br /&gt;3) If use call orchestration, will have to have 3 different schemas to pass as parameter that can be appended by the Mapping dataset then&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-113219585389431135?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/113219585389431135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=113219585389431135&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113219585389431135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/113219585389431135'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/11/connection-pool-issue.html' title='Connection Pool Issue'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-112673896093083859</id><published>2005-09-14T18:58:00.000-04:00</published><updated>2005-09-14T19:02:40.936-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>"NameSpace" error</title><content type='html'>I am facing a strange problem in my current project. When, I am build the orchestrations with default name space of project i.e A.B.C.D.E . I get an error "Schema not found, missing reference". After trying so many things I finally tried changing name space to A_B_C_D_E and it worked! I have no explanation for this !&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-112673896093083859?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/112673896093083859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=112673896093083859&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/112673896093083859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/112673896093083859'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/09/namespace-error.html' title='&quot;NameSpace&quot; error'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-112493592034387902</id><published>2005-08-24T21:38:00.000-04:00</published><updated>2005-08-24T22:14:30.980-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>"Call" Orchestration and Dynamic Ports</title><content type='html'>In my present project there came a requirement to create a "common orchestration" that would take the "response" XML from PSFT and apply business rules. This "common orchestration" should work with all present Orchestrations that are already on production. This Orchestration has to be very flexible and accommodate the various possible parameters from Main orchestration.&lt;br /&gt;&lt;br /&gt;This "Common Orchestration" is just like any another orchestration but will have NO "Receive" shapes. I used an "Request-Response" "dynamic" port that will read PSFT HTTP gateway address from REGISTRY KEY. The two-way dynamic port will receive status XML from PSFT and analyze the node for "success" and "failure". If it is a failure then the "Main Orchestration" will go in suspended mode but "resumable". Once the error is fixed, manual intervention will be required to send the message again by resuming it using HAT. An error message will be generated in the event viewer so the Production support people can be informed.&lt;br /&gt;&lt;br /&gt;Main Orchestration will call this "Common Orchestration" using "Call Shape" and pass the parameters.&lt;br /&gt;&lt;br /&gt;I used the following code for the dynamic port: PortName(Microsoft.XLANGs.BaseTypes.Address) = getmethodURL()&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-112493592034387902?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/112493592034387902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=112493592034387902&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/112493592034387902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/112493592034387902'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/08/call-orchestration-and-dynamic-ports.html' title='&quot;Call&quot; Orchestration and Dynamic Ports'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-112448034948966125</id><published>2005-08-19T15:32:00.000-04:00</published><updated>2005-08-19T15:40:51.553-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Interesting Observation regarding HTTP adapter receive codes</title><content type='html'>I had an interesting discussion with my co worker. The ASP.Net page I deigned to pass XML through HTTP POST to Biztalk was returning code "200" for succesful submission. The discussion rotated around the fact that this code is being send by webserver or Biztalk. According to MSFT website, code 202 is returned by one-way receive port and code 200 is returned by Http "Request-Response" port. Since we are using one way port, we should be getting a 202 message from Biztalk if any. But we are getting 200. I also read somewhere that Biztalk looks for 200 message from webserver before it starts processing files. This lead me to believe that 200 is infact sent my webserver. But, I am not entirely convinced by it.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-112448034948966125?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/112448034948966125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=112448034948966125&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/112448034948966125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/112448034948966125'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/08/interesting-observation-regarding-http.html' title='Interesting Observation regarding HTTP adapter receive codes'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-112388337192338929</id><published>2005-08-12T17:39:00.000-04:00</published><updated>2005-08-12T17:51:40.813-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Biztalk Macros for FileNames</title><content type='html'>&lt;strong&gt;I want to thank Jan Tielen for the following formats:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;%datetime%:&lt;/strong&gt;Coordinated Universal Time (UTC) date time in the format YYYY-MM-DDThhmmss (for example, 1997-07-12T103508).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%datetime_bts2000%:&lt;/strong&gt; UTC date time in the format YYYYMMDDhhmmsss, where sss means seconds and milliseconds (for example, 199707121035234 means 1997/07/12, 10:35:23 and 400 milliseconds).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%datetime.tz%:&lt;/strong&gt;Local date time plus time zone from GMT in the format YYYY-MM-DDThhmmssTZD, (for example, 1997-07-12T103508+800).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%DestinationParty%:&lt;/strong&gt;Name of the destination party. The value comes from message the context property BTS.DestinationParty.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%DestinationPartyID%:&lt;/strong&gt;Identifier of the destination party (GUID). The value comes from the message context property BTS.DestinationPartyID.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%DestinationPartyQualifier%:&lt;/strong&gt;Qualifier of the destination party. The value comes from the message context property BTS.DestinationPartyQualifier.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%MessageID%:&lt;/strong&gt;Globally unique identifier (GUID) of the message in BizTalk Server. The value comes directly from the message context property BTS.MessageID.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%SourceFileName%:&lt;/strong&gt;Name of the file from where the File adapter read the message. The file name includes extension and excludes the file path, for example, foo.xml. When substituting this property, the File adapter extracts the file name from the absolute file path stored in the FILE.ReceivedFileName context property. If the context property does not have a value, for example, if message was received on an adapter other than File adapter, then the macro will not be substituted and will remain in the file name as is (for example, C:\Drop\%SourceFileName%).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%SourceParty%:&lt;/strong&gt;Name of the source party from which the File adapter received the message.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%SourcePartyID%:&lt;/strong&gt;Identifier of the source party (GUID). The value comes from the message context property BTS.SourcePartyID.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%SourcePartyQualifier%:&lt;/strong&gt;Qualifier of the source party from which the File adapter received the message.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%time%:&lt;/strong&gt;UTC time in the format hhmmss.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%time.tz;&lt;/strong&gt;%Local time plus time zone from GMT in the format hhmmssTZD (for example, 124525+530).&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-112388337192338929?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/112388337192338929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=112388337192338929&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/112388337192338929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/112388337192338929'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/08/biztalk-macros-for-filenames.html' title='Biztalk Macros for FileNames'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-112433169863043424</id><published>2005-08-07T22:13:00.000-04:00</published><updated>2005-08-17T22:23:02.286-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>ASP.Net issue</title><content type='html'>In my present project, I had to create an ASP.Net page to receive XML documents and pass it do biztalk on basis of Query string: This is what I found out.&lt;br /&gt;&lt;br /&gt;1) Ensure that the "Virtual Directory" in IIS where the ASPX is located is configured for Execute permissions for "Scripts and Executibles"&lt;br /&gt;&lt;br /&gt;2) Unlike ASP page where we use "server" object, ASP.Net takes the incoming XML as "stream". Be very careful in converting the stream to array and then to string. Make sure that the stream is "encoded" while its being received by ASPX and "decoded" while it is being sent by ASPX page to Biztalk.&lt;br /&gt;&lt;br /&gt;3) I have seen some sample code on various website using ASCII encoding. I had lots of problems with it and after wasting several hours I found out that "UTF-8" encoding is the one that does the trick.&lt;br /&gt;&lt;br /&gt;4) Last and not the least: Do not forget to restart the IIS (Run Command "iisreset") when you get 500 errror.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-112433169863043424?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/112433169863043424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=112433169863043424&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/112433169863043424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/112433169863043424'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/08/aspnet-issue.html' title='ASP.Net issue'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111586707559878152</id><published>2005-05-11T22:59:00.000-04:00</published><updated>2005-05-11T23:07:24.446-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>"Zombie"  scenario in Aggregator</title><content type='html'>In my current project we used Aggregator to batch the files after splitting. We used combination of "Activate" subscription and "Correlation" Subscription. The second receive shape (for Correlation) has a listener that had delay of 60 seconds. We found that in some large files with more that 200 transactions there was some transaction loss. There was no trace on HAT or Event vwr. After thorough investigation we found out that the Orchestration was terminating without waiting for all the messgages to be be consumed from the Message Box. Basically, some messages were not being consumed and hence discarded. This is called "zombie" scenario. There is a nice article on this at:http://blogs.msdn.com/Biztalk%5FCore%5FEngine/&lt;br /&gt;&lt;br /&gt;Solution: It was simple. We increased the timer delay from 60 seconds to 240 seconds. It did effect the performance but that was offset by the "no loss" of transactions.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111586707559878152?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111586707559878152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111586707559878152&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111586707559878152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111586707559878152'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/05/zombie-scenario-in-aggregator.html' title='&quot;Zombie&quot;  scenario in Aggregator'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111258520122216816</id><published>2005-04-03T23:16:00.000-04:00</published><updated>2005-04-03T23:26:41.286-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Seperating Items from Order without Orchestration</title><content type='html'>Recently, a co worker approached me with a problem. He had the following xml struture:&lt;br /&gt;&lt;br /&gt;&lt;navisionpo&gt;&lt;br /&gt;&lt;header&gt;&lt;br /&gt; &lt;customerid&gt;1&lt;/customerid&gt;&lt;br /&gt; &lt;customername&gt;ABC&lt;/customername&gt;&lt;br /&gt;&lt;/header&gt;&lt;br /&gt;&lt;items&gt;&lt;br /&gt; &lt;itemid&gt;01123&lt;/itemid&gt;&lt;br /&gt;  &lt;qty&gt;35&lt;/qty&gt;&lt;br /&gt; &lt;price&gt;300.50&lt;/price&gt;&lt;br /&gt;&lt;/items&gt;&lt;br /&gt;&lt;items&gt; &lt;br /&gt;&lt;itemid&gt;45221&lt;/itemid&gt; &lt;br /&gt;&lt;qty&gt;27&lt;/qty&gt; &lt;br /&gt;&lt;price&gt;1430.50&lt;/price&gt;&lt;br /&gt;&lt;/items&gt; &lt;items&gt;&lt;br /&gt; &lt;itemid&gt;45222&lt;/itemid&gt;&lt;br /&gt;  &lt;qty&gt;127&lt;/qty&gt;&lt;br /&gt;  &lt;price&gt;11430.50&lt;/price&gt;&lt;br /&gt;&lt;/items&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;He wanted the following structure as output:&lt;br /&gt;&lt;br /&gt;&lt;navisionpo&gt;&lt;header&gt;  &lt;customerid&gt;1&lt;/customerid&gt;  &lt;customername&gt;ABC&lt;/customername&gt;&lt;/header&gt;&lt;items&gt;  &lt;itemid&gt;01123&lt;/itemid&gt;  &lt;qty&gt;35&lt;/qty&gt;  &lt;price&gt;300.50&lt;/price&gt;&lt;/items&gt;&lt;/navisionpo&gt;&lt;br /&gt;&lt;br /&gt;&lt;navisionpo&gt;&lt;header&gt;  &lt;customerid&gt;1&lt;/customerid&gt;  &lt;customername&gt;ABC&lt;/customername&gt;&lt;/header&gt;&lt;items&gt;  &lt;itemid&gt;45221&lt;/itemid&gt;  &lt;qty&gt;27&lt;/qty&gt;  &lt;price&gt;1430.50&lt;/price&gt;&lt;/items&gt;&lt;navisionpo&gt;&lt;br /&gt;&lt;br /&gt;&lt;/navisionpo&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There is a solution where you have to promote property and use XPath in orchestration to do this. I saw this on Stepehen's website. I found another way to achieve same. This new way is even faster.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Generate the schema from the original file call it "IN"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;?xml version="1.0" encoding="utf-16" ?&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:schema b="http://schemas.microsoft.com/BizTalk/2003" attributeformdefault="unqualified" elementformdefault="qualified" xs="http://www.w3.org/2001/XMLSchema"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:element name="NavisionPO"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:complextype&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:sequence&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:element maxoccurs="unbounded" name="Header"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:complextype&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:sequence&gt;&lt;br /&gt;  &lt;xs:element name="CustomerID" type="xs:unsignedByte"&gt;&lt;br /&gt;  &lt;xs:element name="CustomerName" type="xs:string"&gt;&lt;br /&gt;  &lt;/xs:sequence&gt;&lt;br /&gt;  &lt;/xs:complexType&gt;&lt;br /&gt;  &lt;/xs:element&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:element minoccurs="0" maxoccurs="unbounded" name="Items"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:complextype&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:sequence maxoccurs="unbounded"&gt;&lt;br /&gt;  &lt;xs:element name="ItemID" type="xs:unsignedShort"&gt;&lt;br /&gt;  &lt;xs:element name="Qty" type="xs:unsignedByte"&gt;&lt;br /&gt;  &lt;xs:element name="Price" type="xs:decimal"&gt;&lt;br /&gt;  &lt;/xs:sequence&gt;&lt;br /&gt;  &lt;/xs:complexType&gt;&lt;br /&gt;  &lt;/xs:element&gt;&lt;br /&gt;  &lt;/xs:sequence&gt;&lt;br /&gt;  &lt;/xs:complexType&gt;&lt;br /&gt;  &lt;/xs:element&gt;&lt;br /&gt;  &lt;/xs:schema&gt;&lt;br /&gt;2) Generate another schema call it OUT&lt;br /&gt;&lt;br /&gt;  &lt;?xml version="1.0" encoding="utf-16" ?&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-Out.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:schema b="http://schemas.microsoft.com/BizTalk/2003" attributeformdefault="unqualified" elementformdefault="qualified" xs="http://www.w3.org/2001/XMLSchema"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-Out.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:element name="ITEM"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-Out.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:complextype&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-Out.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:sequence&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-Out.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:element maxoccurs="unbounded" name="Items"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-Out.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:complextype&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-Out.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:sequence maxoccurs="unbounded"&gt;&lt;br /&gt;  &lt;xs:element name="ItemID" type="xs:unsignedShort"&gt;&lt;br /&gt;  &lt;xs:element name="Qty" type="xs:unsignedByte"&gt;&lt;br /&gt;  &lt;xs:element name="Price" type="xs:decimal"&gt;&lt;br /&gt;  &lt;xs:element name="Custo_Name" type="xs:string"&gt;&lt;br /&gt;  &lt;xs:element name="Cust_ID" type="xs:string"&gt;&lt;br /&gt;  &lt;/xs:sequence&gt;&lt;br /&gt;  &lt;/xs:complexType&gt;&lt;br /&gt;  &lt;/xs:element&gt;&lt;br /&gt;  &lt;/xs:sequence&gt;&lt;br /&gt;  &lt;/xs:complexType&gt;&lt;br /&gt;  &lt;/xs:element&gt;&lt;br /&gt;  &lt;/xs:schema&gt;&lt;br /&gt;&lt;br /&gt;3) Use Map1 to populate fields from IN to OUT.&lt;br /&gt;&lt;br /&gt;4) The resutlant file will be:&lt;br /&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_MapData/Map1_output.xml#"&gt;-&lt;/a&gt; &lt;item&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_MapData/Map1_output.xml#"&gt;-&lt;/a&gt; &lt;items&gt;&lt;br /&gt;  &lt;itemid&gt;01123&lt;/itemid&gt;&lt;br /&gt;  &lt;qty&gt;35&lt;/qty&gt;&lt;br /&gt;  &lt;price&gt;300.50&lt;/price&gt;&lt;br /&gt;  &lt;custo_name&gt;1&lt;/custo_name&gt;&lt;br /&gt;  &lt;cust_id&gt;ABC&lt;/cust_id&gt;&lt;br /&gt;  &lt;/items&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_MapData/Map1_output.xml#"&gt;-&lt;/a&gt; &lt;items&gt;&lt;br /&gt;  &lt;itemid&gt;45221&lt;/itemid&gt;&lt;br /&gt;  &lt;qty&gt;27&lt;/qty&gt;&lt;br /&gt;  &lt;price&gt;1430.50&lt;/price&gt;&lt;br /&gt;  &lt;custo_name&gt;1&lt;/custo_name&gt;&lt;br /&gt;  &lt;cust_id&gt;ABC&lt;/cust_id&gt;&lt;br /&gt;  &lt;/items&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_MapData/Map1_output.xml#"&gt;-&lt;/a&gt; &lt;items&gt;&lt;br /&gt;  &lt;itemid&gt;45222&lt;/itemid&gt;&lt;br /&gt;  &lt;qty&gt;127&lt;/qty&gt;&lt;br /&gt;  &lt;price&gt;11430.50&lt;/price&gt;&lt;br /&gt;  &lt;custo_name&gt;1&lt;/custo_name&gt;&lt;br /&gt;  &lt;cust_id&gt;ABC&lt;/cust_id&gt;&lt;br /&gt;  &lt;/items&gt;&lt;br /&gt;  &lt;/item&gt;&lt;br /&gt;&lt;br /&gt;5) Now you can drop this file to a folder. This file format is easy to split now. &lt;item&gt;&lt;items&gt;data&lt;/items&gt;&lt;/item&gt;&lt;br /&gt;&lt;br /&gt;6) Split it using XML disassembler. Envelope schema will be &lt;item&gt;&lt;any&gt; type&lt;br /&gt;&lt;br /&gt;7) Create another map that takes input structure as the "split" structure. i,e&lt;br /&gt;&lt;items&gt;&lt;br /&gt;  &lt;itemid&gt;01123&lt;/itemid&gt;&lt;br /&gt;  &lt;qty&gt;35&lt;/qty&gt;&lt;br /&gt;  &lt;price&gt;300.50&lt;/price&gt;&lt;br /&gt;  &lt;custo_name&gt;1&lt;/custo_name&gt;&lt;br /&gt;  &lt;cust_id&gt;ABC&lt;/cust_id&gt;&lt;br /&gt;  &lt;/items&gt;&lt;br /&gt;&lt;br /&gt;8) The output of that map will be of type: (Original type in step 1)&lt;br /&gt;&lt;br /&gt; &lt;?xml version="1.0" encoding="utf-16" ?&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:schema b="http://schemas.microsoft.com/BizTalk/2003" attributeformdefault="unqualified" elementformdefault="qualified" xs="http://www.w3.org/2001/XMLSchema"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:element name="NavisionPO"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:complextype&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:sequence&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:element maxoccurs="unbounded" name="Header"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:complextype&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:sequence&gt;&lt;br /&gt;  &lt;xs:element name="CustomerID" type="xs:unsignedByte"&gt;&lt;br /&gt;  &lt;xs:element name="CustomerName" type="xs:string"&gt;&lt;br /&gt;  &lt;/xs:sequence&gt;&lt;br /&gt;  &lt;/xs:complexType&gt;&lt;br /&gt;  &lt;/xs:element&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:element minoccurs="0" maxoccurs="unbounded" name="Items"&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:complextype&gt;&lt;br /&gt;&lt;a class="b" onfocus="h()" onclick="return false" href="file:///C:/Documents%20and%20Settings/rainas/Local%20Settings/Temp/_SchemaData/XSDContent-In.xsd.xml#"&gt;-&lt;/a&gt; &lt;xs:sequence maxoccurs="unbounded"&gt;&lt;br /&gt;  &lt;xs:element name="ItemID" type="xs:unsignedShort"&gt;&lt;br /&gt;  &lt;xs:element name="Qty" type="xs:unsignedByte"&gt;&lt;br /&gt;  &lt;xs:element name="Price" type="xs:decimal"&gt;&lt;br /&gt;  &lt;/xs:sequence&gt;&lt;br /&gt;  &lt;/xs:complexType&gt;&lt;br /&gt;  &lt;/xs:element&gt;&lt;br /&gt;  &lt;/xs:sequence&gt;&lt;br /&gt;  &lt;/xs:complexType&gt;&lt;br /&gt;  &lt;/xs:element&lt;br /&gt;  &lt;/xs:schema&gt;&lt;br /&gt;&lt;br /&gt;9) Now this map will give yu the desired output after completing the mapping.&lt;br /&gt;&lt;br /&gt;10) You can put this "second" map in either a "Port" or "Orchestration"&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111258520122216816?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111258520122216816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111258520122216816&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111258520122216816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111258520122216816'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/04/seperating-items-from-order-without.html' title='Seperating Items from Order without Orchestration'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111048394525217159</id><published>2005-03-10T14:41:00.000-05:00</published><updated>2005-03-10T14:48:00.506-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Biztalk and Integration Patterns</title><content type='html'>I found this very nice white paper on Integration Patterns. It gives a very macro level view of Solution Architecture and then breaks it down to specific Biztalk level. I recommend this paper to everyone who is involved in system architecture and implementation.&lt;br /&gt;&lt;br /&gt;This paper can be found at:&lt;br /&gt;&lt;br /&gt;www.eaipatterns.com/docs/integrationpatterns_biztalk.pdf&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111048394525217159?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111048394525217159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111048394525217159&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111048394525217159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111048394525217159'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/03/biztalk-and-integration-patterns.html' title='Biztalk and Integration Patterns'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111032042658997481</id><published>2005-03-02T02:16:00.000-05:00</published><updated>2005-03-09T23:07:19.240-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Efficient Mapping Technique</title><content type='html'>If you have sample input and output files with same header level node names and structures(some of the field names can be different) . Then instead of  doing individual drag and drop (can't use mass copy as these files are not 100% similair). You can use "Link by Node Name". This is how you do that:&lt;br /&gt;&lt;br /&gt;1) Click on the MAP grid.&lt;br /&gt;&lt;br /&gt;2) Go to properties box&lt;br /&gt;&lt;br /&gt;3) Select "Auto Link By" : NODE NAME&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111032042658997481?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111032042658997481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111032042658997481&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111032042658997481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111032042658997481'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/03/efficient-mapping-technique.html' title='Efficient Mapping Technique'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111032011968367024</id><published>2005-02-25T23:07:00.000-05:00</published><updated>2005-03-08T17:15:19.686-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Faster way of Deploying assemblies to the servers.</title><content type='html'>One of techniques of deplying assemblies directly to server without building it on your local machine is:&lt;br /&gt;&lt;br /&gt;1) Right Click the Project in Solution Explorer.&lt;br /&gt;&lt;br /&gt;2) Go to Properties----Configuration Properties-----Deployment.&lt;br /&gt;&lt;br /&gt;3) Select the server name, database and make "Redploy"= true.&lt;br /&gt;&lt;br /&gt;4) Click Deploy&lt;br /&gt;&lt;br /&gt;The Redeploy="True" enables to deploy over the older assemblies on the server. This way we do not have to undeploy and then deploy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Warning: Make sure to revert back the settings from your server to your local machine after completing the above steps. Else you might end up overwriting the server solution with your local machine solution (good or bad).&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111032011968367024?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111032011968367024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111032011968367024&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111032011968367024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111032011968367024'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/02/faster-way-of-deploying-assemblies-to.html' title='Faster way of Deploying assemblies to the servers.'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111031955286110662</id><published>2005-02-13T16:58:00.000-05:00</published><updated>2005-03-08T17:23:21.720-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Synching the Method executions from Orchestrations</title><content type='html'>One of the problem I faced in one of my project was, in the event of multiple files entering a same method. And if this method is reading information from database. This can result in that method being executed by multiple xml documents and hence exceeding the database connection pool. In order to avoid this, DOT NET offers "SyncLock" object.&lt;br /&gt;&lt;br /&gt;Wrap all your methods in this object. This will ensure that second document does not enter this method till the previous one is completely processed.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SyncLock object name&lt;br /&gt;Call the function here&lt;br /&gt;End SyncLock&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111031955286110662?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111031955286110662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111031955286110662&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111031955286110662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111031955286110662'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/02/synching-method-executions-from.html' title='Synching the Method executions from Orchestrations'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111029888879513180</id><published>2005-02-08T11:16:00.000-05:00</published><updated>2005-03-10T15:00:38.286-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>De-Batching and Re-Batching the Files (Scatter-Gather)</title><content type='html'>In my current project we had requirement to split the incoming XML files into individual transactions. These individual transactions would then go through some rule validations in Orchestration. Depending on the validation rules set up in the external assemblies, these transactions will be either rejected or accepted. The business need for splitting the file came from the fact that the transaction has to be accepted or rejected as a whole.&lt;br /&gt;&lt;br /&gt;Splitting part was easy. We used envelope and document schemas for that. But the difficult part was to batch the split transactions &lt;b&gt;&lt;u&gt;per&lt;/u&gt;&lt;/b&gt; incoming file they originally belonged too. I will give possible solutions for "Re-Batching" here and also limitations for each.&lt;br /&gt;&lt;br /&gt;1) Use a loop within the Orchestration. Add each transactions on basis of node. Co-relation set will have to be set up . This is important as the correlation ID will help us to add only the transactions that belong to a particular file. This approach is useful if we have something like a "Orders" file that consists of various "Items". Order ID will be the correlation ID in this case. This will tie up all the "Items" for a particular "Order ID".&lt;br /&gt;&lt;br /&gt;This approach fails in my situation as I have no correlation ID. My sample file consists of a root element immediately followed by child nodes. These child nodes contain all the information. The sample file looks something like:&lt;br /&gt;&lt;br /&gt;(a)(b)contains all the data(/b)(/a)&lt;br /&gt;&lt;br /&gt;Ideal structure to use the looping would be:&lt;br /&gt;&lt;br /&gt;(a)&lt;a&gt;correlation ID here(b)&lt;b&gt;contains all the data&lt;/b&gt;&lt;/a&gt;(/b)(/a)&lt;br /&gt;&lt;br /&gt;2) Loop it and add on basis of the count.&lt;br /&gt;&lt;br /&gt;Problem with this approach is that in scenario of 10 input files being dropped at the same time and each having 10 each transactions. The count will not ensure that the transactions we are adding are actually coming from a single file (as we need in our case). It is not guaranteed that the Transactions in each file will be processed in a sequence.&lt;br /&gt;&lt;br /&gt;3) Third approach works for me. If I set up a unique ID at each transaction level. This ID is same for all transactions in one particular file. Then I can equate this ID as "File Name" in the Send Port and then use "Append". Biztalk will append all the transactions with the same unique file name. This is what I need!&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111029888879513180?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111029888879513180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111029888879513180&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111029888879513180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111029888879513180'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/02/de-batching-and-re-batching-files.html' title='De-Batching and Re-Batching the Files (Scatter-Gather)'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111033058173776102</id><published>2005-01-08T23:03:00.000-05:00</published><updated>2005-03-08T20:09:41.736-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Work around "Node" name changes in Schemas</title><content type='html'>Once the mapping is done and the assembly is deployed. Any change in the root node name of the schema means re-mapping the whole thing again. There is a quick work around to this.&lt;br /&gt;&lt;br /&gt;Create a function using VB.net/C#. Pass the xml document (with the old root name) to this function. Suppose the incoming Doc is "DocIn". This function will take DocIn as a parameter. Replace the "oldname" with "newname" using replace command on "Outerxml". Pass the resulting document to the final destination. This is how the function will look like.&lt;br /&gt;&lt;br /&gt;Public Function Convert (Byval DocIn as XMLDocument)&lt;br /&gt;&lt;br /&gt;Dim DocOut as new XMLDocument&lt;br /&gt;&lt;br /&gt;DocOut.Load(DocIn.Outerxml.replace("OldName","RootName"))&lt;br /&gt;&lt;br /&gt;Return DocOut&lt;br /&gt;&lt;br /&gt;End Function&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111033058173776102?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111033058173776102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111033058173776102&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111033058173776102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111033058173776102'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2005/01/work-around-node-name-changes-in.html' title='Work around &quot;Node&quot; name changes in Schemas'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111033475320946413</id><published>2004-12-11T19:12:00.000-05:00</published><updated>2005-03-08T21:19:57.073-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Stored Procedures for Oracle through Dot Net</title><content type='html'>One of the requirements in the current Project is to call queries from Oracle and perform validations. We are calling about 100 of the queries using "script funtoids" in the mapper. I wanted to optimize the database connections. Instead of sending 100 queries and hitting the database 100 times. I wanted to have single stored procedure to replace the 100 queries. Having worked with stored procedures for SQL database before, I did not find it an issue. My plan was to create an array that is input to the Stored Procedure and get an array as an output to the stored procedure. The idea was to send all possible variables in an array to the stored procedure. Process them and get possible values as an array. Use this array to populate the "Right Hand" side of the map.&lt;br /&gt;&lt;br /&gt;On course of my effort, I realized that there are limitations as such of working with Oracle through arrays. I gave up after trying!&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111033475320946413?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111033475320946413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111033475320946413&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111033475320946413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111033475320946413'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2004/12/stored-procedures-for-oracle-through.html' title='Stored Procedures for Oracle through Dot Net'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111472182540540484</id><published>2004-11-28T16:55:00.000-05:00</published><updated>2005-04-28T16:57:56.146-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Pipeline tools</title><content type='html'>For those that don't know, there are some really handy pipeline tools in the SDK under the folder:&lt;br /&gt;&lt;br /&gt;\Program Files\Microsoft BizTalk Server 2004\SDK\Utilities\PipelineTools&lt;br /&gt;&lt;br /&gt;These tools allow you to test your pipeline components and, even more handily, flat file schemas without having to set up the BizTalk Server environment. They are pretty much essential when developing flat file schemas (particularly when you have a header, trailer and body schema).&lt;br /&gt;Here is a list of the pipeline tools available:&lt;br /&gt;&lt;br /&gt;DSDump.exe - this tool outputs a textual description of the schema.&lt;br /&gt;&lt;br /&gt;Pipeline.exe - this tool executes a pipeline and produces one or more output files. Very useful for testing custom pipelines.&lt;br /&gt;&lt;br /&gt;XMLDasm.exe - this tool executes the XML Disassembler component by simulating a receive pipeline.&lt;br /&gt;&lt;br /&gt;XMLAsm.exe - this tool executes the XML Assembler component by simulating a send pipeline.&lt;br /&gt;&lt;br /&gt;FFDasm.exe - this tool executes the Flat File Disassembler component by simulating a receive pipeline. Essential for flat file development!&lt;br /&gt;&lt;br /&gt;FFAsm.exe - this tool executes the Flat File Assembler component by simulating a send pipeline. Again, essential for flat file development!&lt;br /&gt;&lt;br /&gt;Note: The pipeline.exe tool does not access the BizTalk Server databases, so executing a pipeline that contains the BizTalk Framework Assembler/Disassembler may not work as it accesses the BizTalk Management database during runtime to match up receipts to documents.&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111472182540540484?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111472182540540484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111472182540540484&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111472182540540484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111472182540540484'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2004/11/pipeline-tools.html' title='Pipeline tools'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111042214831404201</id><published>2004-11-09T21:29:00.000-05:00</published><updated>2005-03-09T21:35:48.316-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Remote Connection to HAT</title><content type='html'>I read some articles on Remotely connecting to HAT. Not very straightword. My requirements were to just get a view of transaction process without using Remote Desktop to the server. Due to limited server connections it was always a problem to connect to it. This is how you connect to server:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) Open the HAT.&lt;br /&gt;&lt;br /&gt;2) Go to Tools----Preferences-----Select "Archived Data"....Enter the SQL server name and select the Database.&lt;br /&gt;&lt;br /&gt;You are all set!&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111042214831404201?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111042214831404201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111042214831404201&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111042214831404201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111042214831404201'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2004/11/remote-connection-to-hat.html' title='Remote Connection to HAT'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11313996.post-111042724914669029</id><published>2004-10-09T22:31:00.000-04:00</published><updated>2005-03-09T23:05:19.216-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2004'/><title type='text'>Converting Eurpean/American Dates to ISO-format</title><content type='html'>We are getting European/American dates in the inbound files. We need to convert them to ISO format dates before sending it over to database. This is how to do it:&lt;br /&gt;&lt;br /&gt;1) Drag a script functoid over to the map grid.&lt;br /&gt;&lt;br /&gt;2) One input to that "functoid" will be the date field from the input schema and the second input will be a constact value of either "1" ( for European format) and "2" (American format).&lt;br /&gt;&lt;br /&gt;2) Create a Public Function in external assembly with two paramaters.&lt;br /&gt; &lt;br /&gt;  Public Function dateformat( byval strDate as string, Byval flag as integer)&lt;br /&gt;Dim newdate As Date &lt;br /&gt;Dim strReturnDate As String &lt;br /&gt;&lt;br /&gt;      Select Case flag &lt;br /&gt;        Case 1 &lt;br /&gt;          newdate = Convert.ToDateTime(strDate , New CultureInfo("en-gb")) &lt;br /&gt;            strReturnDate = Format(newdate , "yyyy-MM-dd") &lt;br /&gt;&lt;br /&gt;        Case 2&lt;br /&gt;          newdate = Convert.ToDateTime(strDate , New CultureInfo("en-us")) &lt;br /&gt;            strReturnDate = Format(newdate , "yyyy-MM-dd") &lt;br /&gt;            End Select &lt;br /&gt;    &lt;br /&gt;       Return strReturnDate &lt;br /&gt;        &lt;br /&gt;    End Function&lt;div class="blogger-post-footer"&gt;Shashikant Raina&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11313996-111042724914669029?l=biztalkwithshashikant.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://biztalkwithshashikant.blogspot.com/feeds/111042724914669029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11313996&amp;postID=111042724914669029&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111042724914669029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11313996/posts/default/111042724914669029'/><link rel='alternate' type='text/html' href='http://biztalkwithshashikant.blogspot.com/2004/10/converting-eurpeanamerican-dates-to.html' title='Converting Eurpean/American Dates to ISO-format'/><author><name>Shashikant Raina</name><uri>http://www.blogger.com/profile/03319940567629165057</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
