Ed "Over" Ip

09 Sep, 2009

Visual Studio said to WSDL, “Size does matter!”

Posted by: eip In: Tech

I am sad to say that as I write this, the information is already irrelavant, however I feel it should be written simply because it is a problem nonetheless.
The circumstances (long story, will post about it later) around the BizTalk 2009 project I’m working on is forcing us to, most than likely use SOAP adapter instead of WCF — In case you are not aware, the SOAP adapter has been tagged as deprecated in BizTalk 2009 and should not be used with new development.  Nevertheless, it is what it is, we have to make do with the problem at hand.
The SOAP adapter needs a proxy generated from a WSDL.  In order for the entities to be made available to an Orchestration or Map during design time, the Web Reference must be added to a BizTalk project.  This is where the pain began….the WSDLs we are seeing are north of 800KB (i.e. REALLY big WSDL).  That by itself is not a problem, however when the generated entities are used in a BizTalk map, Visual Studio 2008 SP1 will spin for 10 – 20 minutes and try to consume every bit of RAM available before throwing a very frustruction System.OutOfMemoryException.  Don’t understand it, and absolutely can’t work around it.
To see for yourself:
1. Create a BizTalk project
2. Add Web Reference to a large (> 500kb) WSDL
3. Create a Map and transform anything into an entity created during step #2.
4. Hit build and enjoy the show
For the record, my development environment consists of Windows 2003 Enterprise x64 with 3.75GB of RAM.
I will update if/when I find a workaround.

I am sad to say that as I write this, the information is already irrelavant, however I feel it should be written simply because it is a problem nonetheless.

The circumstances (long story, will post about it later) around the BizTalk 2009 project I’m working on is forcing us to, most than likely use SOAP adapter instead of WCF — In case you are not aware, the SOAP adapter has been tagged as deprecated in BizTalk 2009 and should not be used with new development.  Nevertheless, it is what it is, we have to make do with the problem at hand.

The SOAP adapter need a proxy generated from a WSDL.  In order for the entities to be made available to an Orchestration or Map during design time, the Web Reference must be added to a BizTalk project.  This is where the pain began….the WSDLs we are seeing are north of 800KB (i.e. REALLY big WSDL).  That by itself is not a problem, however when the generated entities are used in a BizTalk map, Visual Studio 2008 SP1 will spin for 10 – 20 minutes and try to consume every bit of RAM available before throwing a very frustruction System.OutOfMemoryException.  Don’t understand it, and absolutely can’t work around it.

To see for yourself:

1. Create a BizTalk project
2. Add Web Reference to a large (> 500kb) WSDL
3. Create a Map and transform anything into an entity created during step #2.
4. Hit build and enjoy the show

For the record, my development environment consists of Windows 2003 Enterprise x64 with 3.75GB of RAM.

I know what you are thinking, may be we should pare down the WSDL.  Well, let just say the 3rd party vendor can’t do that.  I will update if/when I find a workaround.

Update 09/14/2009:  One of my colleague figured this out.  The root of the problem is a bunch of circular reference in the schema — Entity A contain Entity B, B contain Entity C, C contain A.  This is a known deficiency in the .NET XMLSerializer.

Update 09/18/2009:  A bunch of test later, it looks like WSDL size is a problem at design time (i.e. can’t compile) and circular reference is a problem at run time (i.e. SOAP Adapter can’t serialize the message using XMLSerializer).

Related Articles:


No Responses to "Visual Studio said to WSDL, “Size does matter!”"

Comment Form