I am writing a VB.Net application using Tamino 4.1.4.1 to begin a transaction, load multiple images into Tamino and commit/rollback the transaction if all images are loaded.
When I run this application locally, meaning the .Net app and Tamino are on the same machine (Win2K Prof), I have no problems, no time-outs.
However, when I move the application to a separate machine so the app is running on Win2K server and Tamino on Win2K prof, I get a time-out.
My code follows these steps:
1) create a connection, Mode = LocalTransaction
2) create command for collection
3) begin transaction
4) insert images
5) commit transaction
6) close connection
Since this code works when everything is hosted on the same machine, I do not understand the problem. Do I need to use GlobalTransaction mode instead? If so, are there any examples on how to set this up?
Thanks in advance!
Are you able to provide a stack trace of how your problem occurs?
What exception do you get?
Does it happen quickly/slowly/how long does the timeout take to occur?
You don’t need to use Global Transactions in this case. You would usually use them when sharing work over 2 or more databases (or “resource managers”).
Well, the strange thing is that I have 20 images to load and the app inserts the first 2 without problems. Then on the command to insert the next image, I get a time-out. The app then tries to perform a rollback, but that times-out too.
I haven’t actually timed how long the time-out takes, but it does take long.
The first exception I get is:
The operation has timed-out
The second exception I get is:
The operation has timed-out.
at SoftwareAG.Tamino.Api.Common.Command.Execute()
at SoftwareAG.Tamino.Api.TaminoTransaction.Rollback()
It turns out that this was due to a license limitation of IIS. Combination of “Connection: Keep-Alive” turned on and a low a number of SIMULTANEOUS connections permitted. This led to a blockage on the basis of resource exhaustion.
When Apache was used as the web server there was no problem.
I have the same problem as Michelle when I execute a rollback, and when I execute an update with a dataset.
I have set the “Connection : Keep-Alive”, but the connection number is “Unlimited”.
When I use Apache, there is no timeout. What is the problem ?
Thanks
Does it work when you turn off the Connection: Keep-Alive in IIS? I am wondering whether the .NET runtime is keeping a hold of the open connections and it is the client side that is resource exhausted.
I have turned off the Keep-Alive in IIS, and I still get the time-out…
Are you doing inserts of binary documents? We believe that we have identified a problem that only appears when the web server is IIS. This should be fixed in the next release. There is no workaround besides using Apache.
I’m doing insert of xml and binary documents …
Do you know when the new API version will be release ? I can work with Apache in the test phase, but I would like to use only one server in the production phase…
We intend to do a community release that includes the fix in about 2 weeks.
There is a fix for this that should be obtainable from customer support. The relevant problem is P246937.
Hello,
I still have a timeout problem when I try to insert several document (xml type) in a loop. I have the Tamino dotNet API version 4.1.5.1. I’ve tried open the connection inside or outside the loop, and I’ve still have the problem. Does it works better with the new version of Tamino (4.2). Is there a new version of the .Net API with the Tamino 4.2.
With Apache, no probmel occurs.
Thanks a lot for your answer
There is a slightly newer version of the .NET API with Tamino 4.2. There were 1 or 2 bug fixes that might impact the behaviour you are seeing.
Our test suites include similar tests to what you are describing and work with IIS and Apache.
Is it possible for you to open a support request with your program + data? Please try to make the program/data as simple as possible to reproduce the failure.
I have tried with the API from the Tamino 4.2, but the same problem occurs…
Here is the code that produce the timeout error, please read the comment in the code, I have put some informations or question for you :
This code will be use to create a temporary backup of all data frome database1 to database2 to be able modify the schema in the database1, without losing all the datas.
The we will recopy the data from database2 to database1, modified by an xsl in order to match the xml with the schema change.
srcDataCollectionCommand is the command connected to the database1
destDataCollectionCommand is the command connected to the database2
docType is the doctype (without the prefix) of the documents to copy
// Get all the ino:id and the ino:docname of the documents to copy
srcDataCollectionCommand.Connection.Open(TaminoConnectionMode.AutoCommit);
response = srcDataCollectionCommand.Query(new TaminoQuery(“declare namespace tf=‘http://namespaces.softwareag.com/tamino/TaminoFunction’ for $all in input()/*[local-name(.)='”+docType+“'] return {tf:getDocname(root($all))}”),1);
srcDataCollectionCommand.Connection.Close();
// Put the relevant nodes in a list
XmlNodeList list = response.GetSinglePage().SelectNodes(“//value”);
string docName;
TaminoUri tamUri;
// ?? needed to avoid the timeout ??
System.Net.ServicePointManager.DefaultConnectionLimit = 20;
System.Net.ServicePointManager.MaxServicePointIdleTime = 500;
bool isInoIDDocName;
// Open connection to the source and destination databases (REM :I’v tried to put it in the loop bellow, but the problem
// is the same : timeout)
srcDataCollectionCommand.Connection.Open(TaminoConnectionMode.AutoCommit);
destDataCollectionCommand.Connection.Open(TaminoConnectionMode.AutoCommit);
// Loop through the relevant nodes
foreach(XmlNode node in list)
{
// Use ino:docname if available, other use ino:id as document name
if(node.HasChildNodes)
{
docName = node.InnerText;
isInoIDDocName=false;
}
else
{
docName = node.Attributes[“inoId”].InnerText;
isInoIDDocName = true;
}
// set the uri depending on the test above. If ino:id is used, add @ before the docname (i.e. ./contractX/@1)
tamUri = new TaminoUri(“./”+tamSchemaDoc.DocName+“/”+(isInoIDDocName?“@”:“”)+docName);
// Retrive the document (REM: The timeout occurs on this line on the 2nd code loop)
tamDataDoc=srcDataCollectionCommand.Retrieve(tamUri);
// If ino:id is used, tamDataDoc.DocNam == @nbre (i.e. @1). An exception is thrown with this docname.
// → Replacing the tamDataDoc.DocName (i.e. @1) with the docName used for the retrival operation (i.e. 1)
tamDataDoc.DocName = docName;
// Insert the retrived document. (REM: If this line is commented, no timeout occurs)
destDataCollectionCommand.Insert(tamDataDoc);
}
// close both connections
srcDataCollectionCommand.Connection.Close();
destDataCollectionCommand.Connection.Close();
thanks for your help
It is odd that it only occurs with IIS and NOT Apache. This seems to imply that it is related to the external environment.
What is the value in IIS of “Web Site->Connections->Limited To”?
it is set at 10 connections
I can see nothing obvious.
Please could you put in a support request for this?