diff --git a/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs b/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs
index eff2cd5f55..613141c47a 100644
--- a/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs
+++ b/Stack/Opc.Ua.Core/Stack/Tcp/TcpMessageSocket.cs
@@ -540,8 +540,12 @@ namespace Opc.Ua.Bindings
BufferManager.UnlockBuffer(m_receiveBuffer);
}
+ Utils.TraceDebug("Bytes read: {0}", bytesRead);
+
if (bytesRead == 0)
{
+ // Remote end has closed the connection
+
// free the empty receive buffer.
if (m_receiveBuffer != null)
{
@@ -549,11 +553,9 @@ namespace Opc.Ua.Bindings
m_receiveBuffer = null;
}
- return ServiceResult.Good;
+ return ServiceResult.Create(StatusCodes.BadConnectionClosed, "Remote side closed connection");
}
- // Utils.Trace("Bytes read: {0}", bytesRead);
-
m_bytesReceived += bytesRead;
// check if more data left to read.
diff --git a/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs b/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs
index 0c4d9627de..8d3f2bb673 100644
--- a/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs
+++ b/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryChannel.cs
@@ -229,7 +229,7 @@ namespace Opc.Ua.Bindings
}
}
- Utils.Trace("{0}: Channel {1} - Duplicate sequence number: {2} <= {3}", context, this.ChannelId, sequenceNumber, m_remoteSequenceNumber);
+ Utils.Trace((int)Utils.TraceMasks.Error, "{0}: Channel {1} - Duplicate sequence number: {2} <= {3}", context, this.ChannelId, sequenceNumber, m_remoteSequenceNumber);
return false;
}
@@ -284,7 +284,7 @@ namespace Opc.Ua.Bindings
{
uint messageType = BitConverter.ToUInt32(message.Array, message.Offset);
- //Utils.Trace("{1} Message Received: {0} bytes", message.Count, messageType);
+ Utils.TraceDebug("{1} Message Received: {0} bytes", message.Count, messageType);
if (!HandleIncomingMessage(messageType, message))
{
@@ -364,6 +364,8 @@ namespace Opc.Ua.Bindings
try
{
+ Utils.TraceDebug("Bytes written: {0}", e.BytesTransferred);
+
if (e.BytesTransferred == 0)
{
error = ServiceResult.Create(StatusCodes.BadConnectionClosed, "The socket was closed by the remote application.");
@@ -509,8 +511,6 @@ namespace Opc.Ua.Bindings
reason = new UTF8Encoding().GetString(reasonBytes, 0, reasonLength);
}
- // Utils.Trace("Channel {0}: Read = {1}", ChannelId, reason);
-
return ServiceResult.Create(statusCode, "Error received from remote host: {0}", reason);
}
@@ -555,7 +555,7 @@ namespace Opc.Ua.Bindings
buffer[offset++] = (byte)((messageType & 0x000000FF));
buffer[offset++] = (byte)((messageType & 0x0000FF00) >> 8);
buffer[offset++] = (byte)((messageType & 0x00FF0000) >> 16);
- buffer[offset++] = (byte)((messageType & 0xFF000000) >> 24);
+ buffer[offset ] = (byte)((messageType & 0xFF000000) >> 24);
}
///
@@ -573,7 +573,7 @@ namespace Opc.Ua.Bindings
buffer[offset++] = (byte)((messageSize & 0x000000FF));
buffer[offset++] = (byte)((messageSize & 0x0000FF00) >> 8);
buffer[offset++] = (byte)((messageSize & 0x00FF0000) >> 16);
- buffer[offset++] = (byte)((messageSize & 0xFF000000) >> 24);
+ buffer[offset ] = (byte)((messageSize & 0xFF000000) >> 24);
}
#endregion
diff --git a/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs b/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs
index b6425a3e67..747c39574e 100644
--- a/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs
+++ b/Stack/Opc.Ua.Core/Stack/Tcp/UaSCBinaryClientChannel.cs
@@ -679,35 +679,35 @@ namespace Opc.Ua.Bindings
// process a response.
if (TcpMessageType.IsType(messageType, TcpMessageType.Message))
{
- //Utils.Trace("Channel {0}: ProcessResponseMessage", ChannelId);
+ Utils.TraceDebug("Channel {0}: ProcessResponseMessage", ChannelId);
return ProcessResponseMessage(messageType, messageChunk);
}
// check for acknowledge.
else if (messageType == TcpMessageType.Acknowledge)
{
- //Utils.Trace("Channel {0}: ProcessAcknowledgeMessage", ChannelId);
+ Utils.TraceDebug("Channel {0}: ProcessAcknowledgeMessage", ChannelId);
return ProcessAcknowledgeMessage(messageChunk);
}
// check for error.
else if (messageType == TcpMessageType.Error)
{
- //Utils.Trace("Channel {0}: ProcessErrorMessage", ChannelId);
+ Utils.TraceDebug("Channel {0}: ProcessErrorMessage", ChannelId);
return ProcessErrorMessage(messageType, messageChunk);
}
// process open secure channel repsonse.
else if (TcpMessageType.IsType(messageType, TcpMessageType.Open))
{
- //Utils.Trace("Channel {0}: ProcessOpenSecureChannelResponse", ChannelId);
+ Utils.TraceDebug("Channel {0}: ProcessOpenSecureChannelResponse", ChannelId);
return ProcessOpenSecureChannelResponse(messageType, messageChunk);
}
// process a response to a close request.
else if (TcpMessageType.IsType(messageType, TcpMessageType.Close))
{
- //Utils.Trace("Channel {0}: ProcessResponseMessage (close)", ChannelId);
+ Utils.TraceDebug("Channel {0}: ProcessResponseMessage (close)", ChannelId);
return ProcessResponseMessage(messageType, messageChunk);
}
@@ -1230,8 +1230,6 @@ namespace Opc.Ua.Bindings
///
protected bool ProcessErrorMessage(uint messageType, ArraySegment messageChunk)
{
- Utils.Trace("Channel {0}: ProcessErrorMessage()", ChannelId);
-
// read request buffer sizes.
MemoryStream istrm = new MemoryStream(messageChunk.Array, messageChunk.Offset, messageChunk.Count, false);
BinaryDecoder decoder = new BinaryDecoder(istrm, Quotas.MessageContext);
@@ -1242,6 +1240,8 @@ namespace Opc.Ua.Bindings
{
ServiceResult error = ReadErrorMessageBody(decoder);
+ Utils.Trace((int)Utils.TraceMasks.Error, "Channel {0}: ProcessErrorMessage({1})", ChannelId, error);
+
// check if a handshake is in progress
if (m_handshakeOperation != null)
{
diff --git a/Stack/Opc.Ua.Core/Types/Utils/Utils.cs b/Stack/Opc.Ua.Core/Types/Utils/Utils.cs
index 9bb897a716..3826e5a38e 100644
--- a/Stack/Opc.Ua.Core/Types/Utils/Utils.cs
+++ b/Stack/Opc.Ua.Core/Types/Utils/Utils.cs
@@ -342,7 +342,15 @@ namespace Opc.Ua
{
Trace((int)TraceMasks.Information, format, args);
}
-
+
+ ///
+ /// Writes an informational message to the trace log.
+ ///
+ public static void TraceDebug(string format, params object[] args)
+ {
+ Trace((int)TraceMasks.OperationDetail, format, args);
+ }
+
///
/// Writes an informational message to the trace log.
///
@@ -431,9 +439,9 @@ namespace Opc.Ua
TraceWriteLine(message.ToString(), null);
}
- #endregion
+#endregion
- #region File Access
+#region File Access
///
/// Replaces a prefix enclosed in '%' with a special folder or environment variable path (e.g. %ProgramFiles%\MyCompany).
///