C# Static string appending problem.

B

BA

Hello,

I have a very strange code behavior that I cannot make heads or tails of:

I have c# code being executed in BizTalk assemblies which is acting very
strangely.

In my BizTalk process I call a static method:

public static string ValidateMessage(params...)

When I call this method the FIRST TIME, everything is fine, and the
DebugView outputs the following...

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines > 0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique




Then it gets strange.... when I execute it a second time, I get:

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines > 0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines > 0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique


A third time I get:

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines > 0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines > 0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines > 0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping thru
lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique


And so on... It keeps piggy-backing these past method calls and I don't know
why!

If I restart the BizTalk host, the first call behaves normally as described
above and then this problem begins again.

Someone suggested there was something static is being appended, but I cant
see it in the code. If you see something, please let me know. The reason I
tend to agree is because the line "AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification ASSERTED " appears 2/3 of the way thru and its the
very first thing which is done when the code is executed. It does not
appear that the logic is executing 3x, just the output to the debug view.

If there is something appended, where am I allowing this to happen in the
code below?

using System;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Diagnostics;
using Microsoft.RuleEngine;

namespace AL.TechSvcs.Procurement.Support
{

public class BusinessRulesVerification
{
public BusinessRulesVerification()
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification ASSERTED");
}


public static string VerifyPOLineUnique(TypedXmlDocument rootNode,
string PoNum, string xpath, string xLineNum)
{
XmlNodeList PoLines;

try
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: VerifyPOLineUnique STARTED");
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: PO NUM = " + PoNum);

PoLines = rootNode.Document.SelectNodes(String.Format(xpath,
PoNum));

if (PoLines.Count > 0)
{

Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: PO lines > 0");

//PUT MATCHING PO NUMBERS IN AN ARRAY
ArrayList arrLineNums = new ArrayList();
foreach (XmlNode node in PoLines)
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: looping thru lines");

arrLineNums.Add(node.SelectSingleNode(xLineNum).InnerText);
}

int i, j;

for (i = 0; i < arrLineNums.Count - 1; i++)
{
for (j = i + 1; j < arrLineNums.Count; j++)
{
if (arrLineNums.Equals(arrLineNums[j]))
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support
:: BusinessRulesVerification :: found non-unique line !!");

return "False";
}
}
}
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: all lines are unique");

return "True";
}
else
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: no PO lines found");
return string.Empty;
}
}

catch (Exception e)
{
Debug.WriteLine(exception.ToString());
EventLog.WriteEntry("Biztalk", String.Format("Error occured
when trying to find unique PO lines. Return empty string"),
EventLogEntryType.Error);
throw e;
}

}
}
}


If anyone has seen this or knows what I am doing wrong, please help.

Thanks,

BA
 
N

Nicholas Paldino [.NET/C# MVP]

BA,

It doesn't look like you are doing anything (like storing a static
variable) which would cause this to happen. Because of that, I would have
to assume that your xpath expression that is being passed to the method is
producing duplicate lines, or your XML document has the extra lines the
second time around.

In other words, it's not the code, it's the input.

One thing I did notice, in your try/catch block, you have the line
"throw e". You should change that to just "throw" so that the original
stack trace information is retained, unless you ^want^ the stack trace
information to start from the place where you re-throw the exception.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

BA said:
Hello,

I have a very strange code behavior that I cannot make heads or tails of:

I have c# code being executed in BizTalk assemblies which is acting very
strangely.

In my BizTalk process I call a static method:

public static string ValidateMessage(params...)

When I call this method the FIRST TIME, everything is fine, and the
DebugView outputs the following...

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines >
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique




Then it gets strange.... when I execute it a second time, I get:

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines >
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines >
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique


A third time I get:

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines >
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines >
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines >
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique


And so on... It keeps piggy-backing these past method calls and I don't
know
why!

If I restart the BizTalk host, the first call behaves normally as
described above and then this problem begins again.

Someone suggested there was something static is being appended, but I cant
see it in the code. If you see something, please let me know. The reason
I
tend to agree is because the line "AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification ASSERTED " appears 2/3 of the way thru and its
the
very first thing which is done when the code is executed. It does not
appear that the logic is executing 3x, just the output to the debug view.

If there is something appended, where am I allowing this to happen in the
code below?

using System;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Diagnostics;
using Microsoft.RuleEngine;

namespace AL.TechSvcs.Procurement.Support
{

public class BusinessRulesVerification
{
public BusinessRulesVerification()
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification ASSERTED");
}


public static string VerifyPOLineUnique(TypedXmlDocument rootNode,
string PoNum, string xpath, string xLineNum)
{
XmlNodeList PoLines;

try
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: VerifyPOLineUnique STARTED");
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: PO NUM = " + PoNum);

PoLines =
rootNode.Document.SelectNodes(String.Format(xpath, PoNum));

if (PoLines.Count > 0)
{

Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: PO lines > 0");

//PUT MATCHING PO NUMBERS IN AN ARRAY
ArrayList arrLineNums = new ArrayList();
foreach (XmlNode node in PoLines)
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: looping thru lines");


arrLineNums.Add(node.SelectSingleNode(xLineNum).InnerText);
}

int i, j;

for (i = 0; i < arrLineNums.Count - 1; i++)
{
for (j = i + 1; j < arrLineNums.Count; j++)
{
if (arrLineNums.Equals(arrLineNums[j]))
{

Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: found non-unique line !!");

return "False";
}
}
}
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: all lines are unique");

return "True";
}
else
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: no PO lines found");
return string.Empty;
}
}

catch (Exception e)
{
Debug.WriteLine(exception.ToString());
EventLog.WriteEntry("Biztalk", String.Format("Error occured
when trying to find unique PO lines. Return empty string"),
EventLogEntryType.Error);
throw e;
}

}
}
}


If anyone has seen this or knows what I am doing wrong, please help.

Thanks,

BA
 
B

BA

Nicholas,

Thanks for having a look. Good suggestion about the throw, I will use it.

Regarding the content. I am 100% sure that the data going in is a single
instance. It would break in BizTalk with a host of errors such as multiple
root nodes, etc and would also break in the business rules engine where this
code is called. To be 100% sure I wrote out all the input statements in the
first line of code to see what was there and they loooked normal.
Additionally, notice how the "assert" statement which should appear first
only appears first in the first pass. The remaining passes have something
built up which is being dumped out when the code executes multiple times.

I just cant figure out what is causing this.

Do you have any other suggestions about what could be causing this?

Thanks,
BA



Nicholas Paldino said:
BA,

It doesn't look like you are doing anything (like storing a static
variable) which would cause this to happen. Because of that, I would have
to assume that your xpath expression that is being passed to the method is
producing duplicate lines, or your XML document has the extra lines the
second time around.

In other words, it's not the code, it's the input.

One thing I did notice, in your try/catch block, you have the line
"throw e". You should change that to just "throw" so that the original
stack trace information is retained, unless you ^want^ the stack trace
information to start from the place where you re-throw the exception.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

BA said:
Hello,

I have a very strange code behavior that I cannot make heads or tails of:

I have c# code being executed in BizTalk assemblies which is acting very
strangely.

In my BizTalk process I call a static method:

public static string ValidateMessage(params...)

When I call this method the FIRST TIME, everything is fine, and the
DebugView outputs the following...

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique




Then it gets strange.... when I execute it a second time, I get:

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique


A third time I get:

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all lines
are unique


And so on... It keeps piggy-backing these past method calls and I don't
know
why!

If I restart the BizTalk host, the first call behaves normally as
described above and then this problem begins again.

Someone suggested there was something static is being appended, but I
cant see it in the code. If you see something, please let me know. The
reason I
tend to agree is because the line "AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification ASSERTED " appears 2/3 of the way thru and its
the
very first thing which is done when the code is executed. It does not
appear that the logic is executing 3x, just the output to the debug view.

If there is something appended, where am I allowing this to happen in the
code below?

using System;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Diagnostics;
using Microsoft.RuleEngine;

namespace AL.TechSvcs.Procurement.Support
{

public class BusinessRulesVerification
{
public BusinessRulesVerification()
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification ASSERTED");
}


public static string VerifyPOLineUnique(TypedXmlDocument rootNode,
string PoNum, string xpath, string xLineNum)
{
XmlNodeList PoLines;

try
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: VerifyPOLineUnique STARTED");
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: PO NUM = " + PoNum);

PoLines =
rootNode.Document.SelectNodes(String.Format(xpath, PoNum));

if (PoLines.Count > 0)
{

Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: PO lines > 0");

//PUT MATCHING PO NUMBERS IN AN ARRAY
ArrayList arrLineNums = new ArrayList();
foreach (XmlNode node in PoLines)
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support
:: BusinessRulesVerification :: looping thru lines");


arrLineNums.Add(node.SelectSingleNode(xLineNum).InnerText);
}

int i, j;

for (i = 0; i < arrLineNums.Count - 1; i++)
{
for (j = i + 1; j < arrLineNums.Count; j++)
{
if (arrLineNums.Equals(arrLineNums[j]))
{

Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: found non-unique line !!");

return "False";
}
}
}
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: all lines are unique");

return "True";
}
else
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: no PO lines found");
return string.Empty;
}
}

catch (Exception e)
{
Debug.WriteLine(exception.ToString());
EventLog.WriteEntry("Biztalk", String.Format("Error
occured when trying to find unique PO lines. Return empty string"),
EventLogEntryType.Error);
throw e;
}

}
}
}


If anyone has seen this or knows what I am doing wrong, please help.

Thanks,

BA

 
N

Nicholas Paldino [.NET/C# MVP]

BA,

That's the thing, I see no static members, and no recursive calls, so it
looks fine to me.

Can't you run this through a debugger and see what is going on?


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

BA said:
Nicholas,

Thanks for having a look. Good suggestion about the throw, I will use it.

Regarding the content. I am 100% sure that the data going in is a single
instance. It would break in BizTalk with a host of errors such as
multiple root nodes, etc and would also break in the business rules engine
where this code is called. To be 100% sure I wrote out all the input
statements in the first line of code to see what was there and they
loooked normal. Additionally, notice how the "assert" statement which
should appear first only appears first in the first pass. The remaining
passes have something built up which is being dumped out when the code
executes multiple times.

I just cant figure out what is causing this.

Do you have any other suggestions about what could be causing this?

Thanks,
BA



Nicholas Paldino said:
BA,

It doesn't look like you are doing anything (like storing a static
variable) which would cause this to happen. Because of that, I would
have to assume that your xpath expression that is being passed to the
method is producing duplicate lines, or your XML document has the extra
lines the second time around.

In other words, it's not the code, it's the input.

One thing I did notice, in your try/catch block, you have the line
"throw e". You should change that to just "throw" so that the original
stack trace information is retained, unless you ^want^ the stack trace
information to start from the place where you re-throw the exception.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

BA said:
Hello,

I have a very strange code behavior that I cannot make heads or tails
of:

I have c# code being executed in BizTalk assemblies which is acting very
strangely.

In my BizTalk process I call a static method:

public static string ValidateMessage(params...)

When I call this method the FIRST TIME, everything is fine, and the
DebugView outputs the following...

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all
lines are unique




Then it gets strange.... when I execute it a second time, I get:

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all
lines are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all
lines are unique


A third time I get:

AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all
lines are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all
lines are unique
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ASSERTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification ::
VerifyPOLineUnique STARTED
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO NUM =
V360006300001000
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: PO lines
0
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: looping
thru lines
AL.TechSvcs.Procurement.Support :: BusinessRulesVerification :: all
lines are unique


And so on... It keeps piggy-backing these past method calls and I don't
know
why!

If I restart the BizTalk host, the first call behaves normally as
described above and then this problem begins again.

Someone suggested there was something static is being appended, but I
cant see it in the code. If you see something, please let me know. The
reason I
tend to agree is because the line "AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification ASSERTED " appears 2/3 of the way thru and its
the
very first thing which is done when the code is executed. It does not
appear that the logic is executing 3x, just the output to the debug
view.

If there is something appended, where am I allowing this to happen in
the code below?

using System;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Diagnostics;
using Microsoft.RuleEngine;

namespace AL.TechSvcs.Procurement.Support
{

public class BusinessRulesVerification
{
public BusinessRulesVerification()
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification ASSERTED");
}


public static string VerifyPOLineUnique(TypedXmlDocument
rootNode, string PoNum, string xpath, string xLineNum)
{
XmlNodeList PoLines;

try
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: VerifyPOLineUnique STARTED");
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: PO NUM = " + PoNum);

PoLines =
rootNode.Document.SelectNodes(String.Format(xpath, PoNum));

if (PoLines.Count > 0)
{

Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: PO lines > 0");

//PUT MATCHING PO NUMBERS IN AN ARRAY
ArrayList arrLineNums = new ArrayList();
foreach (XmlNode node in PoLines)
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support
:: BusinessRulesVerification :: looping thru lines");


arrLineNums.Add(node.SelectSingleNode(xLineNum).InnerText);
}

int i, j;

for (i = 0; i < arrLineNums.Count - 1; i++)
{
for (j = i + 1; j < arrLineNums.Count; j++)
{
if (arrLineNums.Equals(arrLineNums[j]))
{

Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: found non-unique line !!");

return "False";
}
}
}
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: all lines are unique");

return "True";
}
else
{
Debug.WriteLine("AL.TechSvcs.Procurement.Support ::
BusinessRulesVerification :: no PO lines found");
return string.Empty;
}
}

catch (Exception e)
{
Debug.WriteLine(exception.ToString());
EventLog.WriteEntry("Biztalk", String.Format("Error
occured when trying to find unique PO lines. Return empty string"),
EventLogEntryType.Error);
throw e;
}

}
}
}


If anyone has seen this or knows what I am doing wrong, please help.

Thanks,

BA


 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top