BizTalk Utilities CV ,   Jobs ,   Code library
 
Go to the front page to continue learning about XML or select below:

Contents

ReBlogger Contents

Previous posts in BizTalk Server

 
 
Page 2060 of 21350

Notes on Resolving BizTalk Connectivity Issues with Ponton clients

Blogger : Geekswithblogs.net
All posts : All posts by Geekswithblogs.net
Category : BizTalk Server
Blogged date : 2008 Nov 14

Notes on Resolving Connectivity Issues
During the first stage of the Integration project a number of challenges were encountered. Some of these obstacles could have been avoided but we chose to resolve them so that we would have a solid solution for further development.
Challenges Encountered
·         Server 500 error when posting messages to customer with a static port configuration and document that worked for other customers.
·         Ponton responds with an ‘Internal Storage’ Error.
·         The dynamic port fails with either a 500 server error or a 204 (StatusDescription=No Content) server error.
Issue 1
After a lot of work and Microsoft’s help we tracked the first error down to the customer’s server being unable to process HTTP 1.1 messages. The customer is currently running iPlanet 6 SP 10 on a Solaris 8 with a Ponton application server running WebLogic 8.1 SP6 also running on Solaris 8. 
HTTP 1.1 includes chunking of messages at the HTTP level. In this case the customer’s server could not recombine the chunked message and failed with a 500 error. By default the HTTP chunking is turned on when a new static HTTP port is created in BizTalk. To turn this off click on the Configuration button in the Transport section of the Send Port’s General Property page. Under the Destination URL field there is a check box labeled ‘Enable chunked encoding’. By clearing this check box the HTTP 1.1 chunking feature will be disabled.
NOTE:  While we were trying to resolve this issue the Microsoft tech ask me to run Microsoft Network Monitor 3.0 (NetMon) to capture the traffic so that we could determine if there was an obvious message problem. Due to the process used by NetMon it could not capture the HTTP traffic. It could however capture the HTTPS traffic. I’ve not sure why this is but it is worth noting.
Issue 2
The second issue was resolved with the assistance of Ponton. Our current customers use older versions of Ponton . Our new customer uses the 2.4 version of this product. It turned out that the use of the ‘Content-Disposition: attachment; filename="=?utf-8?B?QXR0YWNobWVudDF=?="’ property in the document header changed in the newer version. Older versions ignored this property. When we deleted this line from the header the ‘internal storage’ error was no longer raised by the Ponton server.
Issue 3
Finally when we tried to move the solution to a more dynamic design the customers server started to respond with 500 server errors again. Since the integration with our customer is over an SSL connection we contacted Ponton to see if they had a test server that uses HTTP for our analysis. When we connected with this server (Apache running on Linux) we received 204 server errors. If we tested the dynamic port with the same message against a BizTalk server running on a windows 2003 server it processed successfully.
The Microsoft Tech again tried to use NetMon to monitor the traffic with the same results. As a result several other techniques where used to capture the traffic to understand the differences in the messages.
By adding the following XML to the BTSNTSvc.exe.config file and running Sysinternals Debug Viewer we were able to monitor the traffic as it was generated in BizTalk.
<configuration>
    <system.diagnostics>
        <trace autoflush="true" />
                <sources>
                <source name="System.Net">
                        <listeners>
                                <add name="System.Net"/>
                        </listeners>
                </source>
                <source name="System.Net.HttpListener">
                        <listeners>
                <add name="System.Net"/>
                        </listeners>
                </source>
               <source name="System.Net.Sockets">
                        <listeners>
                <add name="System.Net"/>
                        </listeners>
                </source>
                               <source name="System.Net.Cache">
                        <listeners>
                <add name="System.Net"/>
                        </listeners>
                </source>
                </sources>
   <sharedListeners>
                <add
                 name="System.Net"
                 type="System.Diagnostics.TextWriterTraceListener"
                  initializeData="System.Net.trace.log"
                 traceOutputOptions = "DateTime"
                />
    </sharedListeners>
    <switches>
        <add name="System.Net" value="Verbose" />
        <add name="System.Net.Sockets" value="Verbose" />
        <add name="System.Net.Cache" value="Verbose" />
        <add name="System.Net.HttpListener" value="Verbose" />
    </switches>
    </system.diagnostics>
</configuration>
The first thing that was determined through this process was the default settings for a HTTP static port are not the same as those of the dynamic port. These settings were modified in an orchestration message assignment shape with the code shown below.

PontonMessage(HTTP.EnableChunkedEncoding) = false;
PontonMessage(HTTP.ContentType) = "multipart/related; type=\"text/xml\"; start=ebxml-header; boundary=\"_00000000-0000-0000-0000-000000000000_\" ";
PontonMessage(HTTP.UseHandlerProxySettings) = true;
PontonMessage(HTTP.AuthenticationScheme) = "Anonymous";

Addressing these differences was the first place that we tried to resolve the issue. Unfortunately this did not resolve the problem.
 
The final test we did was to use a network sniffer called 'WireShark' to monitor the traffic. This allowed the text comparison of a static and a dynamic message. From this comparison the only differences were the date stamps, unique ID and the quotes around the content type parameters as shown below.
 
Dynamic Message:
Content-Type: multipart/related; type=’text/xml’; start=ebxml-header; boundary=’_00000000-0000-0000-0000-000000000000_’
 
The non Windows server required the quotes to be double quotes and could not process the message if single quotes were used. As a result the code int the Orchestration expression shape was changed as shown below.
 
From:
PontonMessage(HTTP.ContentType) = “multipart/related; type=’text/xml’; start=ebxml-header; boundary=’_00000000-0000-0000-0000-000000000000_’”;
To:
PontonMessage(HTTP.ContentType) = "multipart/related; type=\"text/xml\"; start=ebxml-header; boundary=\"_00000000-0000-0000-0000-000000000000_\" ";
I hope this helps other people.  This has been an interesting ride for me.  Integration with non Microsoft systems can result in some unexpected problems.


Read comments or post a reply to : Notes on Resolving BizTalk Connectivity Issues with Ponton clients
Page 2060 of 21350

Newest posts
 

    Email TopXML