I finally found some time and tried upgrading from BizTalk 2004 and GotDotNet WSS adapter to BizTalk 2006 and the native BT'06 adapter for Windows SharePoint Services. The idea was to start from a BizTalk 2004 installation with version 1.0 of Steve Resnick & Co. WSS Adapter (http://www.gotdotnet.com/workspaces/workspace.aspx?id=0d1aa85c-cf8d-497e-84f4-3ffec8db115f) , setup a simple messaging scenario using SharePoint, upgrade to BizTalk 2006, verify that messaging still works, upgrade to the native BizTalk 2006 WSS Adapter and then verify that messaging works with the new adapter.

I followed the steps below, in order to create a sample messaging test for SharePoint:

  1. Created Source document library, then renamed it SourceDocLib (this trick causes the document library URL and the document library name to be different and this way I can see if WSSLib adapter really expects the URL or the display name of the document library). Created a View named ‘UpgradeDocuments’ that shows only those documents with ID >= 0 (probably all docs).
  2. Created document library named 'Destination', then renamed it to 'DestinationDocLib'. Created folder ‘Dest Folder’. Added columns SharePointColumn1, and SharePointColumn2.
  3. Created document library named 'Archive', then renamed it to 'ArchiveDocLib'. Created ‘My Folder’ folder in the library just created.
  4. Created receive port and receive location for WSSLib adapter. Used all the fields available in order to make sure that similar field exists in native BT'06 adapter.
  5. Created send port for WSSLib adapter, used all the fields.
    (See the exported bindings or the UI captures below to see how the ports were configured. If you want to repro my test, after importing the bindings, you will have to update the filter on the send port to process messages received from the receive location by adding BTS.ReceivePortName == WSSLib-Receive condition. Only then start the send port.)
  6. Sent test messages (see attached).
  7. Exported all bindings.

See images below for the receive location and send port settings:


WSSLib - Receive Location
Receive Location XML
<Config xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <pollingInterval>10</pollingInterval>
   <errorThreshold>10</errorThreshold>
   <site>http://demoappserver/Sites/BASSite</site>
   <folder>Source</folder>
   <view>UpgradeDocuments</view>
   <archiveFolder>Archive/My Folder</archiveFolder>
   <uri>http://demoappserver/Sites/BASSite/Source</uri>
   <userName />
   <userPassword>******</userPassword>
   <userDomain />
</Config>

WSSLib - Send port (upper and lower part of configuration dialog box)
Send Port XML
<Config xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <uri>wss://demoappserver/Sites/BASSite/Destination/Dest Folder</uri>
   <site>http://demoappserver/Sites/BASSite/</site>
   <folder>Destination/Dest Folder</folder>
   <overwrite>true</overwrite>
   <fileName>%GUID%</fileName>
   <fileExtension>xml</fileExtension>
   <fileNamespace>po0="http://MyTestNamespace"</fileNamespace>
   <userName />
   <userPassword>******</userPassword>
   <userDomain />
   <propertyName1>SharePointColumn1</propertyName1>
   <propertySource1>=//po1:PurchaseOrder/po1:Amount</propertySource1>
   <propertyNamespace1>po1="http://MyTestNamespace"</propertyNamespace1>
   <propertyName2 /><propertySource2 />
   <propertyNamespace2 />
   <propertyName3>SharePointColumn2</propertyName3>
   <propertySource3>=//po3:PurchaseOrder/po3:ChargeTo</propertySource3>
   <propertyNamespace3>po3="http://MyTestNamespace"</propertyNamespace3>
   <propertyName4 />
   <propertySource4 />
   <propertyNamespace4 />
   <propertyName5 />
   <propertySource5 />
   <view/>
</Config>

Once I configured the messaging I've sent a couple of messages through (see attached) to make sure that everything is working fine.

UPGRADE

I followed these steps http://geekswithblogs.net/darko/archive/2006/01/24/66866.aspx in order to upgrade to BizTalk 2006. The upgrade went through without problems. Another place where you can find upgrade information is this blog http://blogs.msdn.com/biztalk_upgrade/default.aspx Because my BizTalk 2004 installation had the BAS feature installed, after upgrade, both BAS and Windows SharePoint Services Adapter Web Service features were installed on the machine (even though the latter does not show up as enabled in setup, it's there because BAS requires it). If your BizTalk 2004 installation didn't have BAS, after upgrading your SharePoint box, you will have to start setup, add Windows SharePoint Services Adapter Web Service feature, and configure it. That's easy and straight forward so I won't go into details.

After upgrade, I browsed to the BAS site (SharePoint site) to see if SharePoint was still working fine and it didn't. I received the following error:
This Windows SharePoint Services virtual server has not been configured for use with ASP.NET 2.0.50727.42. For more information, please refer to Knowledge Base article 894903 at http://go.microsoft.com/fwlink/?LinkId=42660.

Troubleshoot issues with Windows SharePoint Services

The KB article just tells you to run one command. I run the command below:

stsadm.exe –o upgrade –forceupgrade –url http://demoappserver/sites/BASSite

restarted IIS and after that the BAS site shown up without problems. I started the BizTalk services that I stopped during upgrade, sent a few SharePoint messages through and everything worked fine.

Updating the ports

So I proceeded to update the receive location and send port in order to change from WSSLib adapter to 'Windows SharePoint Services' adapter. First thing I did, was to stop the BizTalk Host Instances that were used by the WSSLib adapter. This is probably not necessary, but in a couple of cases I noticed that the WSSLib ports don't shutdown appropriately and I didn't want to run into issues. After that, for each of the receive location or send port I changed the 'Transport Type' property from 'WSSLib' to 'Windows SharePoint Services' and then re-configured the send port/receive location like below.


'Windows SharePoint Services' - Receive Location
Receive Location XML
<ReceiveLocation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <SiteUrl>http://demoappserver/Sites/BASSite/</SiteUrl>
   <WssLocation>Source</WssLocation>
   <ViewName>UpgradeDocuments</ViewName>
   <ArchiveLocation>Archive/My Folder</ArchiveLocation>
   <NamespaceAliases></NamespaceAliases>
   <ArchiveFileName></ArchiveFileName>
   <Overwrite>no</Overwrite>
   <ErrorThreshold>10</ErrorThreshold>
   <PollingInterval>10</PollingInterval>
   <BatchSize>20</BatchSize>
   <OfficeIntegration>optional</OfficeIntegration>
   <Timeout>100000</Timeout>
   <AdapterWSPort>80</AdapterWSPort>
   <uri>wss://demoappserver:80/Sites/BASSite/Source?ViewName=UpgradeDocuments</uri>
</ReceiveLocation>

'Windows SharePoint Services' - Send port (upper and lower part of configuration dialog box)
Send Port XML
<SendPort xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <SiteUrl>http://demoappserver/sites/BASSite/</SiteUrl>
   <WssLocation>Destination/Dest Folder</WssLocation>
   <Overwrite>yes</Overwrite>
   <NamespaceAliases>po0="http://MyTestNamespace"; po1="http://MyTestNamespace"; po3="http://MyTestNamespace"</NamespaceAliases>
   <FileName>%MessageID%.xml</FileName>
   <OfficeIntegration>optional</OfficeIntegration>
   <TemplatesDocLib></TemplatesDocLib>
   <TemplatesNamespaceCol></TemplatesNamespaceCol>
   <CustomTemplatesDocLib></CustomTemplatesDocLib>
   <CustomTemplatesNamespaceCol></CustomTemplatesNamespaceCol>
   <PropertyName1>SharePointColumn1</PropertyName1>
   <PropertySource1>%XPATH=//po1:PurchaseOrder/po1:Amount%</PropertySource1>
   <PropertyName2></PropertyName2>
   <PropertySource2 />
   <PropertyName3>SharePointColumn2</PropertyName3>
   <PropertySource3>%XPATH=//po3:PurchaseOrder/po3:ChargeTo%</PropertySource3>
   <PropertyName4></PropertyName4>
   <PropertySource4 />
   <PropertyName5></PropertyName5>
   <PropertySource5 />
   <PropertyName6></PropertyName6>
   <PropertySource6 />
   <PropertyName7></PropertyName7>
   <PropertySource7 />
   <PropertyName8></PropertyName8>
   <PropertySource8 />
   <PropertyName9></PropertyName9>
   <PropertySource9 />
   <PropertyName10></PropertyName10>
   <PropertySource10 />
   <PropertyName11></PropertyName11>
   <PropertySource11 />
   <PropertyName12></PropertyName12>
   <PropertySource12 />
   <PropertyName13></PropertyName13>
   <PropertySource13 />
   <PropertyName14></PropertyName14>
   <PropertySource14 />
   <PropertyName15></PropertyName15>
   <PropertySource15 />
   <PropertyName16></PropertyName16>
   <PropertySource16 />
   <Timeout>100000</Timeout>
   <AdapterWSPort>80</AdapterWSPort>
   <uri>wss://demoappserver:80/sites/BASSite/Destination/Dest%20Folder</uri>
</SendPort>

Once I updated all the send ports and receive locations, I re-started the host instances, and sent a few messages through. All the messages were processed correctly in the same manner as before and this concluded my upgrade experience. Please notice that my upgrade test was done using version 1.0 of the WSSLib adapter. On GotDotNet there is an RC for the WSSLib adapter version 2.0. A comparision of that WSSLib2 adapter and BizTalk 2006 native 'Windows SharePoint Services' adapter can be found here http://blogs.msdn.com/ahamza/archive/2005/07/27/BizTalk2006WSSAdapters.aspx The only feature supported by WSSLib2 that is not available in the native BT'06 adapter is storing the Username/Password in SSO per send port/receive location. The native BT'06 adapter uses the identity of the host instance to connect and authenticate with SharePoint. Upgrade from WSSLib2 to BT'06 native WSS Adapter should be just as straight forward.

Regardless of the adapter version from which you are upgrading, if you are using some of the adapter context properties in your orchestrations you will have to update your orchestrations to use the WSS.* context properties and that will require you to recompile and redeploy your orchestrations.