More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  Andy's WarholeProfileFriendsBlogMore Tools Explore the Spaces community

Blog

6/4/2008

BizTalk schema editor, base data types and restrictions

When you define an element with data type xs:decimal, there is no way that you can control the digits using the XSD schema editor in Visual Studio. However, you can still add the fractionDigit facet, by editing the BizTalk schema in a text/xml editor. Just add the following code under the xs:decimal data type element:

<xs:simpleType>
            <xs:restriction base="xs:decimal">
                        <xs:fractionDigits value="3" />
            </xs:restriction>
</xs:simpleType>

If you than validate an instance the error nicely refers to the fractionDigits facet specified:

The '….' element is invalid - The value '169.5652174' is invalid according to its datatype 'Decimal' - The FractionDigits constraint failed.

Nice feature!

While searching the internet I found this article by Stephen Kaufman describing the fractionDigit feature. It was written before BizTalk 2006 was even there. I'm wandering why this feature was not incorporated in BizTalk Server 2006 (R#).

6/3/2008

Flat-file Custom Date/Time Formats

Technorati Tags: BizTalk Server 2006;Flat File;Custom Date/Time Format
 
Lately I've been doing a lot of flat file validations and transformations. One of the conversions dealt with date/time conversions. In the schemas I wanted to use the xs:date datatype. However, the dates in the files supplied did not conform to the ISO 8601 format.
 
When experimenting with the schemas, I ran into a property called Custom Date/Time Format. In that property you can define the alternative format of the actual supplied value and the flat file disassembler converts it to an xs:date format.
 
 BTS - Custom Format
 
The use of Custom Date/Time Formats is explained in details at the Microsoft's BizTalk Server TechCenter.
4/28/2008

Team Foundation Server; 'Working folder is already in use'

Technorati Tags: Team Foundation System;TFS
 
Recently we migrated to TFS using virtual machines. However, when trying to get the sources creating work spaces and mapping working folder I ran into problems. The message I got was: 'The working folder is already in use by another workspace on this computer'.
 
I followed some advice to remove the workspace using the command:
 tf workspace /delete /server:http://<server>:8080 <computer>;<domain>\<client>
 
It did not solve my problem. The error indicates tha the server believes this folder is already in use in another workspace. So, I created a workspace using a different machine name and it worked. However, I did not want to use a different name other than my virtual machine name. It took me a moment to realise that there indeed was another workspace with the same name.  The person who cloned the virtual machines also had a workspace with the same machine name, but a different user name. Aparently, the workspace is bounded to a machine name and not to machine name and user as I would expect.
 
Another lesson learned...
4/25/2008

'An error has occurred while establishing a connection to the server'

When deploying a BizTalk project from Visual Studio, you sometimes run into this error:

"An error has occurred while establishing a connection to the server.  When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)"

This happened to me when migrating from Visual SourceSafe, VSS, to Team Foundation System, TFS, by copying the projects from a pc to a virtual machine. To solve this error, perform the following steps:

  1. Rightclick on the project and choose Properties
  2. Go to "Configuration Properties" => "Deployment"
  3. Change the "Server" property to be the servername of the SQL Server you are deploying to
  4. Save changes
  5. Deploy again

The error happens since the servername is listed in the projectname.btproj.user file that is a part of the project.

I often forget the change the servername, so this is to not forget it the next time.

4/23/2008

BizTalk Server 2006 R3

Technorati Tags: , R3,VS2008,SQL Server 2008

Today I read a blogpost on BizTalk Server Team Blog announcing the plans to deliver BizTalk server 2006 R3. This new release will support Windows Server 2008, .Net framework 3.5, Visual Studio 2008 and SQL Server 2008. According to Steve Martin's blogpost  a CTP of BizTalk Server R3 is expected later this year and the RTM is planned the first half of 2009.

" at a high level we are planning some new investments in the release that includes:

  • New web service registry capabilities with support for UDDI (Universal Description Discovery and Integration) version 3.0 
  • Enhanced service enablement of applications (through new and enhanced adapters for LOB applications, databases, and legacy/host systems) 
  • Enhanced service enablement of “edge” devices through BizTalk RFID Mobile 
  • Enhanced interoperability and connectivity support for B2B protocols (like SWIFT, EDI, etc) 
  • SOA patterns and best practices guidance to assist our customer’s implementations"
3/25/2008

"Could not write to output file"

Technorati Tags: ,,
 
Occasionally, I run into the following error when building a solution containing multiple BizTalk projects:
Could not write to output file '[path]\obj\Debug\[assembly].dll' -- 'The process cannot access the file because it is being used by another process.'
I found this simple solution here. Just close and reopen Visual Studio 2005.
Now you can rebuild your solution. Annoying, but it works.
3/18/2008

"An error has occurred while establishing a connection to the server"

Recently I ran into this when I tried to deploy my BizTalk project from Visual Studio 2005:

"An error has occurred while establishing a connection to the server.  When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)"

I had run into this error before and after a few minutes I remembered what I did wrong: the server name. Since I moved the solution and projects from Visual Source Safe to Team Foundation System in a virtual machine environment, I needed to change the server name of the project. To change the property, complete the following steps:

  • Rightclick on the project and choose Properties
  • Go to "Configuration Properties" and select "Deployment"
  • Change the "Server" property to be the servername of the SQL Server you are deploying to
  • Save changes
  • Deploy again

Now let's hope I won't forget it a next time.

2/15/2008

Enlist Send port problem

 
Recently I ran into a strange problem using a bindings file.
 
To improve error handling for Oracle send port errors I enabled routing for failed messages and setup a send port subscribing to those error messages using a filter. After running some tests I concluded all worked nicely. So far, so good.
 
Since we're using different environments; development, integration, test, acceptance and production to name them all, we're using installation scripts to install BizTalk applications. In order to include the newly created port in the binding files for the separate environments, I exported my development binding file and manually adjusted the binding file for the test integration environment using visual studio 2005.
 
Then I successfully ran the install script. However, when I checked the BizTalk application I noticed the orchestrations were not enlisted, and the send ports and receive locations were not started. When I tried to manually start the newly created port I ran into the following error:
 
"Could not enlist send port '[Send Port]' Exception from HRESULT: 0xC00CE557(Microsoft.BizTalk.ExplorerOM)"
 
I than looked a the properties and noticed the filter expression had disappeared. When I live searched the internet, I came across the article Problem Enlisting Send Port. The article mentioned exactly mentioned the exact problem and more important the solution.
 
The cause of the problem is the slight reformatting xml within the Filter element of the binding file; extra lines are added before and after within the filter element.
 
<Filter>
&lt;?xml version="1.0" encoding="utf-16"?&gt;
...
&lt;/Filter&gt;
</Filter>
The way it should be.

<Filter>&lt;?xml version="1.0" encoding="utf-16"?&gt;
...
&lt;/Filter&gt;</Filter>
 
Strange? Certainly!
1/29/2008

Catching errors from the Oracle Adapter

My current BizTalk project involves implementation of the Oracle adapter. In order to improve the current error handling when writing data into and retrieving data from Oracle I tried to implement the suggested way of using a fault message in How to Add a Fault Message. However, I could not get it to work.

According to the documentation the Oracle adapter communicates through the ODBC API via SOAP messages. Instead of using the Fault method I decided to catch the SOAP exception message. Since it involved a request response send port I could not use the DeliveryFailureException by setting the Delivery Transmitted property to Transmitted. In order to catch the SOAP Exception you have to add a reference to the System.Web.Services namespace in your BizTalk project.

Once you have added the reference, you can set the Exception Object Type to System.Web.Services.Protocols.SoapException in the Catch/Error handler block. Note that when you make use of the InnerException object of the SOAP exception object an error can occur when the InnerException object is null. ExSOAP.InnerException.Message will then result in an XLANGS/s error:

Inner exception: Object reference not set to an instance of an object.
Exception type: NullReferenceException

1/23/2008

'System.Xml.XmlDocument' does not contain a definition for 'xxxxx'

Recently I used the following code to get the value of a promoted property:

propValue = msgIncoming.Property1.ToString();

However, this statement caused the following error during compilation:

Error 48, 'System.Xml.XmlDocument' does not contain a definition for 'Property1'

There is an easy way to solve this; use the System.Convert method:

propValue = System.Convert.ToString(msgIncoming.Property1);

That's it.

1/9/2008

BizTalk FTP adapter: final round 2

OK, in BizTalk FTP adapter: round 1, I was facing some problems when downloading large files.Apparently, this problem is very easy to solve according to this knowledge base article.

"This problem occurs because the value of the Polling Interval property of the receive location that is configured for an FTP site is less than the time that it takes to receive a large file."

The resolution than is set the Polling Interval property in the FTP Transport Properties dialog box to a longer duration. To be safe, the first time I set he first  a very long polling interval.

FTP Adapter Config

After extensive analysis and testing, I managed to bring it back to a just a couple of minutes. Further enhancements will be made when files are zipped.

Flat file to XML

Technorati Tags: ,,

While processing large flat files with BizTalk 2006, I thought it be useful to have the files archived for informational purposes. So, I made a send pipeline subscribing to the large message to archive the file. The flat file coming in was about 230 MB in size, while the size file was about 650 MB. After a moment of being surprised by this large increase in size, I realized that the file being archived is XML format. Sometimes, I forget.

BTS File Growth

Note that initially the file was much larger, about 3-5 times as large. We managed to decrease the file size by using very short element and node names in the schema.

1/4/2008

Orchestration Exception Handling

 
Recently I was investigating an orchestration's exception handling. When I looked into some of the error messages, the object properties were empty, meaning no error number or error description. After some live-searching I found this post. Indeed, the exception caught in the orchestration was the General Exception and not the System.Exception. So, keep in mind the subtle differences between BizTalk 2004 and Biztalk 2006. Sometimes backwards compatibility is not one of my favorite features.
12/24/2007

BizTalk FTP adapter: round 1

Recently I had to implement BizTalk's the FTP adapter. However, we're using large files and I mean really large files; 250+ MB. I know BizTalk is not meant for handling bulk messages, but that discussion is past now.

The problem with these large files is that when you're copying the file to the FTP site, BizTalk at the same time is polling for the file and tries to receive it. This results in errors.

BTS2006 FTP Error

1. BizTalk Server 2006 Warning
The adapter "FTP" raised an error message. Details "Unable to receive the file "BMF.txt" from the FTP server. ".

2. BizTalk Server 2006 Error
There was a failure executing the receive pipeline: "Microsoft.BizTalk.DefaultPipelines.PassThruReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Source: "Pipeline " Receive Port: "ReceivePortFile" URI: "ftp://server:21" Reason: Unable to receive the file "BMF.txt" from the FTP server.

3..7 BizTalk Server 2006 Warnings
The adapter "FTP" raised an error message. Details "Unable to receive the file "BMF.txt" from the FTP server. ".

I've changed the polling interval and some of the configurations of the FTP adapter. It actually worked once, but I'm still testing if it works in all cases. I'll keep you posted.

12/19/2007

BizTalk 2006 Oracle Adapter issue

Recently I wanted to provide nil values to an Oracle database using the standard Oracle adapter. So I used the handy Nil value functoid in the BizTalk mapper.

BTS2006 Mapping Nil Value

However, the Nil value functoid doesn't work for number fields. The value supplied to Oracle is a 0 (zero).  It does fortunately work for string fields. Really annoying to write triggers in Oracle to overcome this nil value 'bug' for number fields.

12/17/2007

Re-organizing BizTalk project solution

Technorati Tags: ,,

Recently I wanted to re-organize a BizTalk solution. I had some maps, schemas and orchestrations and wanted them neatly organized in folders with the same name. So I moved a map in the maps folder in my project. However, the mapper complained I couldn't find the schema's anymore.

A simple replacement of the schemas involved did not work, which greatly surprised me. I recalled that if you opened the mapping in a text editor you can see a reference to the schema. This reference is a relative path reference. I ended up changing the mapping in a text editor. Changing the beginning of the reference from .\<path> to ..\<path> solved my problem. Strange?!

12/10/2007

External assembly in BizTalk mapping

Some strange things happened to me last week. I have a mapping in BizTalk and in that mapping I'm calling an external assembly. When I changed the assembly version I updated my mapping, but I got errors using the assembly. So I checked the mapping, but everything seemed to be fine. However, when I opened the mapper the previous version of my assembly was still referenced. After a couple of tries solving the problem, I ended up editing the mapping in a text editor which finally solved the problem. Strange!

11/23/2007

BizTalk Server 2006

Technorati Tags: ,,

Currently I'am working for a large music company. For the processing of their world wide digital sales they use BizTalk Server 2006. I'm responsible for the implementation of functional and non-functional changes. In monthly iterations new functionalities are released into production.

Besides designing and implementing, I do some consultancy about the new BizTalk environment for the global services platform that will support the world wide SOA architecture.