|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.Channels
{
using System.Text;
using System.Runtime.Diagnostics;
using System.Runtime.InteropServices;
using System.Security;
using System.IO;
using System.ServiceModel.Diagnostics;
using System.Threading;
class TracingConnectionInitiator : IConnectionInitiator
{
IConnectionInitiator connectionInitiator;
ServiceModelActivity activity;
Uri connectedUri;
bool isClient;
internal TracingConnectionInitiator(IConnectionInitiator connectionInitiator, bool isClient)
{
this.connectionInitiator = connectionInitiator;
this.activity = ServiceModelActivity.CreateActivity(DiagnosticTraceBase.ActivityId);
this.isClient = isClient;
}
public IConnection Connect(Uri uri, TimeSpan timeout)
{
using (ServiceModelActivity.BoundOperation(this.activity))
{
IConnection retval = this.connectionInitiator.Connect(uri, timeout);
if (!this.isClient)
{
TracingConnection tracingConnection = new TracingConnection(retval, false);
tracingConnection.ActivityStart(uri);
retval = tracingConnection;
}
return retval;
}
}
public IAsyncResult BeginConnect(Uri uri, TimeSpan timeout, AsyncCallback callback, object state)
{
using (ServiceModelActivity.BoundOperation(this.activity))
{
this.connectedUri = uri;
return this.connectionInitiator.BeginConnect(uri, timeout, callback, state);
}
}
public IConnection EndConnect(IAsyncResult result)
{
using (ServiceModelActivity.BoundOperation(this.activity))
{
TracingConnection connection = new TracingConnection(this.connectionInitiator.EndConnect(result), false);
connection.ActivityStart(this.connectedUri);
return connection;
}
}
}
}
|