Added: 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/csharp/NmsInputChannel.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/csharp/NmsInputChannel.cs?rev=709503&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/csharp/NmsInputChannel.cs
 (added)
+++ 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/csharp/NmsInputChannel.cs
 Fri Oct 31 10:43:10 2008
@@ -0,0 +1,342 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.Text;
+using Apache.NMS;
+using ISession = Apache.NMS.ISession;
+
+namespace Apache.NMS.WCF
+{
+       /// <summary>
+       /// Channel for receiving messages.
+       /// </summary>
+       public class NmsInputChannel : NmsChannelBase, IInputChannel
+       {
+               #region Constructors
+
+               /// <summary>
+               /// Initializes a new instance of the <see 
cref="NmsInputChannel"/> class.
+               /// </summary>
+               /// <param name="bufferManager">The buffer manager.</param>
+               /// <param name="encoderFactory">The encoder factory.</param>
+               /// <param name="address">The address.</param>
+               /// <param name="parent">The parent.</param>
+               /// <exception cref="T:System.ArgumentNullException">
+               ///     <paramref name="channelManager"/> is null.</exception>
+               public NmsInputChannel(BufferManager bufferManager, 
MessageEncoderFactory encoderFactory, EndpointAddress address, 
NmsChannelListener parent)
+                       : base(bufferManager, encoderFactory, address, parent, 
parent.Destination, parent.DestinationType)
+               {
+                       _localAddress = address;
+                       _messages = new InputQueue<Message>();
+               }
+
+               #endregion
+
+               //Hands the message off to other components higher up the
+               //channel stack that have previously called BeginReceive() 
+               //and are waiting for messages to arrive on this channel.
+               internal void Dispatch(Message message)
+               {
+                       _messages.EnqueueAndDispatch(message);
+               }
+
+               /// <summary>
+               /// Gets the property.
+               /// </summary>
+               /// <typeparam name="T">The type of the property to attempt to 
retrieve.</typeparam>
+               public override T GetProperty<T>()
+               {
+                       if (typeof(T) == typeof(IInputChannel))
+                       {
+                               return (T)(object)this;
+                       }
+
+                       T messageEncoderProperty = Encoder.GetProperty<T>();
+                       if (messageEncoderProperty != null)
+                       {
+                               return messageEncoderProperty;
+                       }
+
+                       return base.GetProperty<T>();
+               }
+
+               #region IInputChannel Members
+
+               /// <summary>
+               /// Returns the message received, if one is available. If a 
message is not available, blocks for a default interval of time.
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.ServiceModel.Channels.Message" /> 
received. 
+               /// </returns>
+               public Message Receive()
+               {
+                       return Receive(DefaultReceiveTimeout);
+               }
+
+               /// <summary>
+               /// Returns the message received, if one is available. If a 
message is not available, blocks for a specified interval of time.
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.ServiceModel.Channels.Message" /> 
received. 
+               /// </returns>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the receive operation has to complete before timing out 
and throwing a <see cref="T:System.TimeoutException" />.</param>
+               /// <exception cref="T:System.TimeoutException">The specified 
<paramref name="timeout" /> is exceeded before the operation is 
completed.</exception>
+               /// <exception cref="T:System.ArgumentOutOfRangeException">The 
timeout specified is less than zero.</exception>
+               public Message Receive(TimeSpan timeout)
+               {
+                       Message message;
+                       if (TryReceive(timeout, out message))
+                       {
+                               return message;
+                       }
+                       throw new TimeoutException(String.Format("Receive timed 
out after {0}.  The time allotted to this operation may have been a portion of 
a longer timeout.", timeout));
+               }
+
+               /// <summary>
+               /// Tries to receive a message within a specified interval of 
time. 
+               /// </summary>
+               /// <returns>
+               /// true if a message is received before the <paramref 
name="timeout" /> has been exceeded; otherwise false.
+               /// </returns>
+               /// <param name="timeout">The <see cref="T:System.IAsyncResult" 
/> returned by a call to one of the <see 
cref="System.ServiceModel.Channels.IInputChannel.BeginReceive" /> 
methods.</param>
+               /// <param name="message">The <see 
cref="T:System.ServiceModel.Channels.Message" /> received. </param>
+               /// <exception cref="T:System.TimeoutException">The specified 
<paramref name="timeout" /> is exceeded before the operation is 
completed.</exception>
+               /// <exception cref="T:System.ArgumentOutOfRangeException">The 
timeout specified is less than zero.</exception>
+               public bool TryReceive(TimeSpan timeout, out Message message)
+               {
+                       NmsChannelHelper.ValidateTimeout(timeout);
+                       return _messages.Dequeue(timeout, out message);
+               }
+
+               /// <summary>
+               /// Begins an asynchronous operation to receive a message that 
has a state object associated with it. 
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.IAsyncResult" /> that references 
the asynchronous message reception. 
+               /// </returns>
+               /// <param name="callback">The <see 
cref="T:System.AsyncCallback" /> delegate that receives the notification of the 
asynchronous operation completion.</param>
+               /// <param name="state">An object, specified by the 
application, that contains state information associated with the asynchronous 
operation.</param>
+               public IAsyncResult BeginReceive(AsyncCallback callback, object 
state)
+               {
+                       return BeginReceive(DefaultReceiveTimeout, callback, 
state);
+               }
+
+               /// <summary>
+               /// Begins an asynchronous operation to receive a message that 
has a specified time out and state object associated with it. 
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.IAsyncResult" /> that references 
the asynchronous receive operation.
+               /// </returns>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies the interval of time to wait for a message to become 
available.</param>
+               /// <param name="callback">The <see 
cref="T:System.AsyncCallback" /> delegate that receives the notification of the 
asynchronous operation completion.</param>
+               /// <param name="state">An object, specified by the 
application, that contains state information associated with the asynchronous 
operation.</param>
+               /// <exception cref="T:System.TimeoutException">The specified 
<paramref name="timeout" /> is exceeded before the operation is 
completed.</exception>
+               /// <exception cref="T:System.ArgumentOutOfRangeException">The 
timeout specified is less than zero.</exception>
+               public IAsyncResult BeginReceive(TimeSpan timeout, 
AsyncCallback callback, object state)
+               {
+                       return BeginTryReceive(timeout, callback, state);
+               }
+
+               /// <summary>
+               /// Completes an asynchronous operation to receive a message. 
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.ServiceModel.Channels.Message" /> 
received. 
+               /// </returns>
+               /// <param name="result">The <see cref="T:System.IAsyncResult" 
/> returned by a call to one of the <see 
cref="System.ServiceModel.Channels.IInputChannel.BeginReceive" /> 
methods.</param>
+               public Message EndReceive(IAsyncResult result)
+               {
+                       return _messages.EndDequeue(result);
+               }
+
+               /// <summary>
+               /// Begins an asynchronous operation to receive a message that 
has a specified time out and state object associated with it. 
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.IAsyncResult" /> that references 
the asynchronous receive operation.
+               /// </returns>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies the interval of time to wait for a message to become 
available.</param>
+               /// <param name="callback">The <see 
cref="T:System.AsyncCallback" /> delegate that receives the notification of the 
asynchronous operation completion.</param>
+               /// <param name="state">An object, specified by the 
application, that contains state information associated with the asynchronous 
operation.</param>
+               /// <exception cref="T:System.TimeoutException">The specified 
<paramref name="timeout" /> is exceeded before the operation is 
completed.</exception>
+               /// <exception cref="T:System.ArgumentOutOfRangeException">The 
timeout specified is less than zero.</exception>
+               public IAsyncResult BeginTryReceive(TimeSpan timeout, 
AsyncCallback callback, object state)
+               {
+                       NmsChannelHelper.ValidateTimeout(timeout);
+                       return _messages.BeginDequeue(timeout, callback, state);
+               }
+
+               /// <summary>
+               /// Completes the specified asynchronous operation to receive a 
message.
+               /// </summary>
+               /// <returns>
+               /// true if a message is received before the specified interval 
of time elapses; otherwise false.
+               /// </returns>
+               /// <param name="result">The <see cref="T:System.IAsyncResult" 
/> returned by a call to the <see 
cref="M:System.ServiceModel.Channels.IInputChannel.BeginTryReceive(System.TimeSpan,System.AsyncCallback,System.Object)"
 /> method.</param>
+               /// <param name="message">The <see 
cref="T:System.ServiceModel.Channels.Message" /> received. </param>
+               public bool EndTryReceive(IAsyncResult result, out Message 
message)
+               {
+                       return _messages.EndDequeue(result, out message);
+               }
+
+               /// <summary>
+               /// Returns a value that indicates whether a message has 
arrived within a specified interval of time.
+               /// </summary>
+               /// <returns>
+               /// true if a message has arrived before the <paramref 
name="timeout" /> has been exceeded; otherwise false.
+               /// </returns>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
specifies the maximum interval of time to wait for a message to arrive before 
timing out.</param>
+               /// <exception cref="T:System.TimeoutException">The specified 
<paramref name="timeout" /> is exceeded before the operation is 
completed.</exception>
+               /// <exception cref="T:System.ArgumentOutOfRangeException">The 
timeout specified is less than zero.</exception>
+               public bool WaitForMessage(TimeSpan timeout)
+               {
+                       NmsChannelHelper.ValidateTimeout(timeout);
+                       return _messages.WaitForItem(timeout);
+               }
+
+               /// <summary>
+               /// Begins an asynchronous wait-for-a-message-to-arrive 
operation that has a specified time out and state object associated with it. 
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.IAsyncResult" /> that references 
the asynchronous operation to wait for a message to arrive.
+               /// </returns>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies the interval of time to wait for a message to become 
available.</param>
+               /// <param name="callback">The <see 
cref="T:System.AsyncCallback" /> delegate that receives the notification of the 
asynchronous operation completion.</param>
+               /// <param name="state">An object, specified by the 
application, that contains state information associated with the asynchronous 
operation.</param>
+               /// <exception cref="T:System.TimeoutException">The specified 
<paramref name="timeout" /> is exceeded before the operation is 
completed.</exception>
+               /// <exception cref="T:System.ArgumentOutOfRangeException">The 
timeout specified is less than zero.</exception>
+               public IAsyncResult BeginWaitForMessage(TimeSpan timeout, 
AsyncCallback callback, object state)
+               {
+                       NmsChannelHelper.ValidateTimeout(timeout);
+                       return _messages.BeginWaitForItem(timeout, callback, 
state);
+               }
+
+               /// <summary>
+               /// Completes the specified asynchronous wait-for-a-message 
operation.
+               /// </summary>
+               /// <returns>
+               /// true if a message has arrived before the timeout has been 
exceeded; otherwise false.
+               /// </returns>
+               /// <param name="result">The <see cref="T:System.IAsyncResult" 
/> that identifies the <see 
cref="M:System.ServiceModel.Channels.IInputChannel.BeginWaitForMessage(System.TimeSpan,System.AsyncCallback,System.Object)"
 /> operation to finish, and from which to retrieve an end result.</param>
+               public bool EndWaitForMessage(IAsyncResult result)
+               {
+                       return _messages.EndWaitForItem(result);
+               }
+
+               /// <summary>
+               /// Gets the address on which the input channel receives 
messages. 
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.ServiceModel.EndpointAddress" /> on 
which the input channel receives messages. 
+               /// </returns>
+               public EndpointAddress LocalAddress
+               {
+                       get { return _localAddress; }
+               }
+
+               #endregion
+
+               /// <summary>
+               /// Inserts processing on a communication object after it 
transitions to the closing state due to the invocation of a synchronous abort 
operation.
+               /// </summary>
+               protected override void OnAbort()
+               {
+                       OnClose(TimeSpan.Zero);
+               }
+
+               /// <summary>
+               /// Inserts processing on a communication object after it 
transitions to the closing state due to the invocation of a synchronous close 
operation.
+               /// </summary>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the on close operation has to complete before timing 
out.</param>
+               /// <exception 
cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout" /> is less 
than zero.</exception>
+               protected override void OnClose(TimeSpan timeout)
+               {
+                       NmsChannelHelper.ValidateTimeout(timeout);
+                       _messages.Close();
+               }
+
+               /// <summary>
+               /// Completes an asynchronous operation on the close of a 
communication object.
+               /// </summary>
+               /// <param name="result">The <see cref="T:System.IAsyncResult" 
/> that is returned by a call to the <see 
cref="M:System.ServiceModel.Channels.CommunicationObject.OnEndClose(System.IAsyncResult)"
 /> method.</param>
+               protected override void OnEndClose(IAsyncResult result)
+               {
+                       CompletedAsyncResult.End(result);
+               }
+
+               /// <summary>
+               /// Inserts processing after a communication object transitions 
to the closing state due to the invocation of an asynchronous close operation.
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.IAsyncResult" /> that references 
the asynchronous on close operation. 
+               /// </returns>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the on close operation has to complete before timing 
out.</param>
+               /// <param name="callback">The <see 
cref="T:System.AsyncCallback" /> delegate that receives notification of the 
completion of the asynchronous on close operation.</param>
+               /// <param name="state">An object, specified by the 
application, that contains state information associated with the asynchronous 
on close operation.</param>
+               /// <exception 
cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout" /> is less 
than zero.</exception>
+               protected override IAsyncResult OnBeginClose(TimeSpan timeout, 
AsyncCallback callback, object state)
+               {
+                       OnClose(timeout);
+                       return new CompletedAsyncResult(callback, state);
+               }
+
+               /// <summary>
+               /// Inserts processing on a communication object after it 
transitions into the opening state which must complete within a specified 
interval of time.
+               /// </summary>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the on open operation has to complete before timing 
out.</param>
+               /// <exception 
cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout" /> is less 
than zero.</exception>
+               /// <exception cref="T:System.TimeoutException">The interval of 
time specified by <paramref name="timeout" /> that was allotted for the 
operation was exceeded before the operation was completed.</exception>
+               protected override void OnOpen(TimeSpan timeout)
+               {
+               }
+
+               /// <summary>
+               /// Inserts processing on a communication object after it 
transitions to the opening state due to the invocation of an asynchronous open 
operation.
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.IAsyncResult" /> that references 
the asynchronous on open operation. 
+               /// </returns>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the on open operation has to complete before timing 
out.</param>
+               /// <param name="callback">The <see 
cref="T:System.AsyncCallback" /> delegate that receives notification of the 
completion of the asynchronous on open operation.</param>
+               /// <param name="state">An object, specified by the 
application, that contains state information associated with the asynchronous 
on open operation.</param>
+               /// <exception 
cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout" /> is less 
than zero.</exception>
+               protected override IAsyncResult OnBeginOpen(TimeSpan timeout, 
AsyncCallback callback, object state)
+               {
+                       return new CompletedAsyncResult(callback, state);
+               }
+
+               /// <summary>
+               /// Completes an asynchronous operation on the open of a 
communication object.
+               /// </summary>
+               /// <param name="result">The <see cref="T:System.IAsyncResult" 
/> that is returned by a call to the <see 
cref="M:System.ServiceModel.Channels.CommunicationObject.OnEndOpen(System.IAsyncResult)"
 /> method.</param>
+               /// <exception cref="T:System.TimeoutException">The interval of 
time specified by the timeout that was allotted for the operation was exceeded 
before the operation was completed.</exception>
+               protected override void OnEndOpen(IAsyncResult result)
+               {
+                       CompletedAsyncResult.End(result);
+               }
+
+               #region Private members
+
+               private readonly InputQueue<Message> _messages;
+               private EndpointAddress _localAddress;
+
+               #endregion
+       }
+}
\ No newline at end of file

Added: 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/csharp/NmsOutputChannel.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/csharp/NmsOutputChannel.cs?rev=709503&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/csharp/NmsOutputChannel.cs
 (added)
+++ 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/csharp/NmsOutputChannel.cs
 Fri Oct 31 10:43:10 2008
@@ -0,0 +1,316 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.ServiceModel;
+using System.ServiceModel.Channels;
+using System.Text;
+using System.Xml;
+using Apache.NMS;
+
+namespace Apache.NMS.WCF
+{
+       /// <summary>
+       /// Channel for sending messages.
+       /// </summary>
+       public class NmsOutputChannel : NmsChannelBase, IOutputChannel
+       {
+               #region Constructors
+
+               /// <summary>
+               /// Initializes a new instance of the <see 
cref="NmsOutputChannel"/> class.
+               /// </summary>
+               /// <param name="bufferManager">The buffer manager.</param>
+               /// <param name="encoderFactory">The encoder factory.</param>
+               /// <param name="address">The address.</param>
+               /// <param name="parent">The parent.</param>
+               /// <param name="via">The via.</param>
+               public NmsOutputChannel(BufferManager bufferManager, 
MessageEncoderFactory encoderFactory, EndpointAddress address, 
NmsChannelFactory parent, Uri via)
+                       : base(bufferManager, encoderFactory, address, parent, 
parent.Destination, parent.DestinationType)
+               {
+                       _via = via;
+                       _connection = 
ConnectionFactoryManager.GetInstance().CreateConnection(via);
+                       _connection.Start();
+               }
+
+               #endregion
+
+               #region Implementation of IOutputChannel
+
+               /// <summary>
+               /// Transmits a message to the destination of the output 
channel. 
+               /// </summary>
+               /// <param name="message">The <see 
cref="T:System.ServiceModel.Channels.Message" /> being sent on the output 
channel.</param>
+               public void Send(Message message)
+               {
+                       Send(message, DefaultSendTimeout);
+               }
+
+               /// <summary>
+               /// Sends a message on the current output channel within a 
specified interval of time.
+               /// </summary>
+               /// <param name="message">The <see 
cref="T:System.ServiceModel.Channels.Message" /> being sent on the output 
channel.</param>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the send operation has to complete before timing 
out.</param>
+               public void Send(Message message, TimeSpan timeout)
+               {
+                       ThrowIfDisposedOrNotOpen();
+
+                       using (NMS.ISession session = 
_connection.CreateSession())
+                       {
+                               IDestination destination = 
NmsChannelHelper.GetDestination(session, Destination, DestinationType);
+                               using (IMessageProducer producer = 
session.CreateProducer(destination))
+                               {
+                                       producer.Persistent = true;
+                                       message.Headers.To = RemoteAddress.Uri;
+                                       //TODO: check if this is synonymous 
with the above operation
+                                       //RemoteAddress.ApplyTo(message);
+
+                                       ITextMessage request = 
session.CreateTextMessage(TranslateMessage(message));
+                                       producer.Send(request);
+                                       producer.Close();
+
+                                       Console.WriteLine("Sending message:");
+                                       Console.WriteLine(request.Text);
+                               }
+                       }
+               }
+
+               /// <summary>
+               /// Translates the message using the appropriate SOAP 
versioning scheme.
+               /// </summary>
+               /// <param name="message">The message to be translated.</param>
+               private string TranslateMessage(Message message)
+               {
+                       return (Encoder.MessageVersion == MessageVersion.Soap11)
+                               ? TranslateMessageAsSoap11(message)
+                               : TranslateMessageAsSoap12(message);
+               }
+
+               /// <summary>
+               /// Translates the message using the SOAP 1.1 schema.
+               /// </summary>
+               /// <param name="message">The message to be translated.</param>
+               private static string TranslateMessageAsSoap11(Message message)
+               {
+                       StringBuilder sb = new StringBuilder();
+                       XmlDictionaryWriter writer = 
XmlDictionaryWriter.CreateDictionaryWriter(XmlWriter.Create(sb));
+                       message.WriteStartEnvelope(writer);
+                       message.WriteBody(writer);
+                       writer.Flush();
+
+                       string raw = sb.ToString();
+                       //to get past the damn utf 16 header
+                       raw = raw.Substring(raw.LastIndexOf("?>") + 2).Trim();
+
+                       //well there is no WriteEndEnvelope(writer) method:-)
+                       return raw + "</s:Envelope>";
+               }
+
+               /// <summary>
+               /// Translates the message using the SOAP 1.2 schema.
+               /// </summary>
+               /// <param name="message">The message to be translated.</param>
+               private static string TranslateMessageAsSoap12(Message message)
+               {
+                       string raw = message.ToString();
+                       raw = raw.Substring(raw.LastIndexOf("?>") + 1).Trim();
+                       return raw;
+               }
+
+               /// <summary>
+               /// Begins an asynchronous operation to transmit a message to 
the destination of the output channel. 
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.IAsyncResult" /> that references 
the asynchronous message transmission. 
+               /// </returns>
+               /// <param name="message">The <see 
cref="T:System.ServiceModel.Channels.Message" /> being sent on the output 
channel. </param>
+               /// <param name="callback">The <see 
cref="T:System.AsyncCallback" /> delegate. </param>
+               /// <param name="state">An object, specified by the 
application, that contains state information associated with the asynchronous 
send operation.</param>
+               public IAsyncResult BeginSend(Message message, AsyncCallback 
callback, object state)
+               {
+                       return BeginSend(message, DefaultSendTimeout, callback, 
state);
+               }
+
+               /// <summary>
+               /// Begins an asynchronous operation to transmit a message to 
the destination of the output channel within a specified interval of time.
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.IAsyncResult" /> that references 
the asynchronous send operation.
+               /// </returns>
+               /// <param name="message">The <see 
cref="T:System.ServiceModel.Channels.Message" /> being sent on the output 
channel.</param>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the send operation has to complete before timing 
out.</param>
+               /// <param name="callback">The <see 
cref="T:System.AsyncCallback" /> delegate that receives the notification of the 
asynchronous operation send completion.</param>
+               /// <param name="state">An object, specified by the 
application, that contains state information associated with the asynchronous 
send operation.</param>
+               public IAsyncResult BeginSend(Message message, TimeSpan 
timeout, AsyncCallback callback, object state)
+               {
+                       ThrowIfDisposedOrNotOpen();
+                       return new NmsAsyncResult(this, message, callback, 
state);
+               }
+
+               /// <summary>
+               /// Completes an asynchronous operation to transmit a message 
to the destination of the output channel.
+               /// </summary>
+               /// <param name="result">The <see 
cref="T:System.IAsyncResult"/> returned by a call to the <see 
cref="System.ServiceModel.Channels.IOutputChannel.BeginSend"/>  method.</param>
+               public void EndSend(IAsyncResult result)
+               {
+                       NmsAsyncResult.End(result);
+               }
+
+               /// <summary>
+               /// Gets the URI that contains the transport address to which 
messages are sent on the output channel.
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.Uri" /> that contains the transport 
address to which messages are sent on the output channel.
+               /// </returns>
+               public Uri Via
+               {
+                       get { return _via; }
+               }
+
+               #endregion
+
+               #region Implementation of CommunicationObject
+
+               /// <summary>
+               /// Gets the property.
+               /// </summary>
+               /// <typeparam name="T"></typeparam>
+               /// <returns></returns>
+               public override T GetProperty<T>()
+               {
+                       if (typeof(T) == typeof(IOutputChannel))
+                       {
+                               return (T)(object)this;
+                       }
+
+                       T messageEncoderProperty = Encoder.GetProperty<T>();
+                       if (messageEncoderProperty != null)
+                       {
+                               return messageEncoderProperty;
+                       }
+
+                       return base.GetProperty<T>();
+               }
+
+               /// <summary>
+               /// Inserts processing on a communication object after it 
transitions to the closing state due to the invocation of a synchronous abort 
operation.
+               /// </summary>
+               protected override void OnAbort()
+               {
+                       OnClose(TimeSpan.Zero);
+               }
+
+               /// <summary>
+               /// Inserts processing on a communication object after it 
transitions to the closing state due to the invocation of a synchronous close 
operation.
+               /// </summary>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the on close operation has to complete before timing 
out.</param>
+               /// <exception 
cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout" /> is less 
than zero.</exception>
+               protected override void OnClose(TimeSpan timeout)
+               {
+                       if (_connection != null)
+                       {
+                               _connection.Close();
+                               _connection.Dispose();
+                       }
+               }
+
+               /// <summary>
+               /// Completes an asynchronous operation on the close of a 
communication object.
+               /// </summary>
+               /// <param name="result">The <see cref="T:System.IAsyncResult" 
/> that is returned by a call to the <see 
cref="M:System.ServiceModel.Channels.CommunicationObject.OnEndClose(System.IAsyncResult)"
 /> method.</param>
+               protected override void OnEndClose(IAsyncResult result)
+               {
+                       CompletedAsyncResult.End(result);
+               }
+
+               /// <summary>
+               /// Inserts processing after a communication object transitions 
to the closing state due to the invocation of an asynchronous close operation.
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.IAsyncResult" /> that references 
the asynchronous on close operation. 
+               /// </returns>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the on close operation has to complete before timing 
out.</param>
+               /// <param name="callback">The <see 
cref="T:System.AsyncCallback" /> delegate that receives notification of the 
completion of the asynchronous on close operation.</param>
+               /// <param name="state">An object, specified by the 
application, that contains state information associated with the asynchronous 
on close operation.</param>
+               /// <exception 
cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout" /> is less 
than zero.</exception>
+               protected override IAsyncResult OnBeginClose(TimeSpan timeout, 
AsyncCallback callback, object state)
+               {
+                       OnClose(timeout);
+                       return new CompletedAsyncResult(callback, state);
+               }
+
+               /// <summary>
+               /// Inserts processing on a communication object after it 
transitions into the opening state which must complete within a specified 
interval of time.
+               /// </summary>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the on open operation has to complete before timing 
out.</param>
+               /// <exception 
cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout" /> is less 
than zero.</exception>
+               /// <exception cref="T:System.TimeoutException">The interval of 
time specified by <paramref name="timeout" /> that was allotted for the 
operation was exceeded before the operation was completed.</exception>
+               protected override void OnOpen(TimeSpan timeout)
+               {
+               }
+
+               /// <summary>
+               /// Inserts processing on a communication object after it 
transitions to the opening state due to the invocation of an asynchronous open 
operation.
+               /// </summary>
+               /// <returns>
+               /// The <see cref="T:System.IAsyncResult" /> that references 
the asynchronous on open operation. 
+               /// </returns>
+               /// <param name="timeout">The <see cref="T:System.TimeSpan" /> 
that specifies how long the on open operation has to complete before timing 
out.</param>
+               /// <param name="callback">The <see 
cref="T:System.AsyncCallback" /> delegate that receives notification of the 
completion of the asynchronous on open operation.</param>
+               /// <param name="state">An object, specified by the 
application, that contains state information associated with the asynchronous 
on open operation.</param>
+               /// <exception 
cref="T:System.ArgumentOutOfRangeException"><paramref name="timeout" /> is less 
than zero.</exception>
+               protected override IAsyncResult OnBeginOpen(TimeSpan timeout, 
AsyncCallback callback, object state)
+               {
+                       return new CompletedAsyncResult(callback, state);
+               }
+
+               /// <summary>
+               /// Completes an asynchronous operation on the open of a 
communication object.
+               /// </summary>
+               /// <param name="result">The <see cref="T:System.IAsyncResult" 
/> that is returned by a call to the <see 
cref="M:System.ServiceModel.Channels.CommunicationObject.OnEndOpen(System.IAsyncResult)"
 /> method.</param>
+               protected override void OnEndOpen(IAsyncResult result)
+               {
+                       CompletedAsyncResult.End(result);
+               }
+
+               #endregion
+
+               /// <summary>
+               /// Encodes the message.
+               /// </summary>
+               /// <param name="message">The message.</param>
+               public ArraySegment<byte> EncodeMessage(Message message)
+               {
+                       try
+                       {
+                               return Encoder.WriteMessage(message, 
Int32.MaxValue, BufferManager);
+                       }
+                       finally
+                       {
+                               // The message is consumed by serialising it, 
so clean up here.
+                               message.Close();
+                       }
+               }
+
+               #region Private members
+
+               private readonly Uri _via;
+               private readonly IConnection _connection;
+
+               #endregion
+       }
+}
\ No newline at end of file

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/ndoc/
------------------------------------------------------------------------------
    bugtraq:label = Issue#:

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/ndoc/
------------------------------------------------------------------------------
--- bugtraq:message (added)
+++ bugtraq:message Fri Oct 31 10:43:10 2008
@@ -0,0 +1 @@
+Fixes [AMQNET-%BUGID%]. (See 
https://issues.apache.org/activemq/browse/AMQNET-%BUGID%)

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/ndoc/
------------------------------------------------------------------------------
    bugtraq:url = https://issues.apache.org/activemq/browse/AMQNET-%BUGID%

Added: 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/ndoc/NamespaceSummary.xml
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/ndoc/NamespaceSummary.xml?rev=709503&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/ndoc/NamespaceSummary.xml
 (added)
+++ 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/main/ndoc/NamespaceSummary.xml
 Fri Oct 31 10:43:10 2008
@@ -0,0 +1,21 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+   
+    http://www.apache.org/licenses/LICENSE-2.0
+   
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<namespaces>
+    <namespace name="Apache.NMS.ActiveMQ.WCF">
+        The <b>Apache.NMS.ActiveMQ.WCF</b> namespace implements a Windows 
Communications Foundation transport for ActiveMQ.
+    </namespace>
+</namespaces>

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/test/
------------------------------------------------------------------------------
    bugtraq:label = Issue#:

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/test/
------------------------------------------------------------------------------
--- bugtraq:message (added)
+++ bugtraq:message Fri Oct 31 10:43:10 2008
@@ -0,0 +1 @@
+Fixes [AMQNET-%BUGID%]. (See 
https://issues.apache.org/activemq/browse/AMQNET-%BUGID%)

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/test/
------------------------------------------------------------------------------
    bugtraq:url = https://issues.apache.org/activemq/browse/AMQNET-%BUGID%

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/test/csharp/
------------------------------------------------------------------------------
    bugtraq:label = Issue#:

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/test/csharp/
------------------------------------------------------------------------------
--- bugtraq:message (added)
+++ bugtraq:message Fri Oct 31 10:43:10 2008
@@ -0,0 +1 @@
+Fixes [AMQNET-%BUGID%]. (See 
https://issues.apache.org/activemq/browse/AMQNET-%BUGID%)

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/test/csharp/
------------------------------------------------------------------------------
    bugtraq:url = https://issues.apache.org/activemq/browse/AMQNET-%BUGID%

Added: 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/test/csharp/CommonAssemblyInfo.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/test/csharp/CommonAssemblyInfo.cs?rev=709503&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/test/csharp/CommonAssemblyInfo.cs
 (added)
+++ 
activemq/activemq-dotnet/Apache.NMS.WCF/trunk/src/test/csharp/CommonAssemblyInfo.cs
 Fri Oct 31 10:43:10 2008
@@ -0,0 +1,28 @@
+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+[assembly: ComVisibleAttribute(false)]
+[assembly: CLSCompliantAttribute(true)]
+[assembly: AssemblyTitleAttribute("WCF Provider for ActiveMQ Class Library")]
+[assembly: AssemblyDescriptionAttribute("WCF Provider for ActiveMQ Class 
Library (.Net Messaging Library Implementation): " +
+    "An implementation of Windows Communications Framework API for ActiveMQ")]
+[assembly: AssemblyConfigurationAttribute("SNAPSHOT")]
+[assembly: AssemblyCompanyAttribute("http://activemq.apache.org/nms";)]
+[assembly: AssemblyProductAttribute("WCF Provider for ActiveMQ Class Library")]
+[assembly: AssemblyCopyrightAttribute("Copyright (C) 2005-2008 Apache Software 
Foundation")]
+[assembly: AssemblyTrademarkAttribute("")]
+[assembly: AssemblyCultureAttribute("")]
+[assembly: AssemblyVersionAttribute("1.1.0")]
+[assembly: AssemblyInformationalVersionAttribute("1.1.0")]
+

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vendor/
------------------------------------------------------------------------------
    bugtraq:label = Issue#:

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vendor/
------------------------------------------------------------------------------
--- bugtraq:message (added)
+++ bugtraq:message Fri Oct 31 10:43:10 2008
@@ -0,0 +1 @@
+Fixes [AMQNET-%BUGID%]. (See 
https://issues.apache.org/activemq/browse/AMQNET-%BUGID%)

Propchange: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vendor/
------------------------------------------------------------------------------
    bugtraq:url = https://issues.apache.org/activemq/browse/AMQNET-%BUGID%

Added: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vs2008-nms-wcf.csproj
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vs2008-nms-wcf.csproj?rev=709503&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vs2008-nms-wcf.csproj (added)
+++ activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vs2008-nms-wcf.csproj Fri Oct 
31 10:43:10 2008
@@ -0,0 +1,134 @@
+<Project DefaultTargets="Build" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"; ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{96BAB638-2ECF-4648-8553-8FE6B9A4816F}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>Apache.NMS.WCF</RootNamespace>
+    <AssemblyName>Apache.NMS.WCF</AssemblyName>
+    <WarningLevel>4</WarningLevel>
+    <SignAssembly>false</SignAssembly>
+    <AssemblyOriginatorKeyFile>
+    </AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <SccProjectName>Svn</SccProjectName>
+    <SccLocalPath>Svn</SccLocalPath>
+    <SccAuxPath>Svn</SccAuxPath>
+    <SccProvider>SubversionScc</SccProvider>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <TargetFrameworkSubset>
+    </TargetFrameworkSubset>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' 
">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>build\net-3.5\debug\</OutputPath>
+    <DefineConstants>TRACE;DEBUG;NET,NET_2_0,NET_3_5</DefineConstants>
+    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+    
<DocumentationFile>build\net-3.5\debug\Apache.NMS.WCF.xml</DocumentationFile>
+    <NoWarn>0419</NoWarn>
+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 
'Release|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <Optimize>true</Optimize>
+    <OutputPath>build\net-3.5\release\</OutputPath>
+    <DefineConstants>TRACE;NET,NET_2_0,NET_3_5</DefineConstants>
+    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+    <DebugType>full</DebugType>
+    
<DocumentationFile>build\net-3.5\release\Apache.NMS.WCF.xml</DocumentationFile>
+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
+    <NoWarn>0419</NoWarn>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Apache.NMS, Version=1.1.0.0, Culture=neutral, 
processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>vendor\Apache.NMS\net-3.5\Apache.NMS.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Web.Services" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="LICENSE.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="nant-common.xml" />
+    <Content Include="NOTICE.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="README.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="src\main\csharp\AsyncResult.cs" />
+    <Compile Include="src\main\csharp\CommonAssemblyInfo.cs" />
+    <Compile Include="src\main\csharp\Configuration\AddressingVersions.cs" />
+    <Compile Include="src\main\csharp\Configuration\NmsBinding.cs" />
+    <Compile Include="src\main\csharp\Configuration\NmsBindingCollection.cs" />
+    <Compile Include="src\main\csharp\Configuration\NmsBindingElement.cs" />
+    <Compile 
Include="src\main\csharp\Configuration\NmsConfigurationDefaults.cs" />
+    <Compile 
Include="src\main\csharp\Configuration\NmsConfigurationStrings.cs" />
+    <Compile Include="src\main\csharp\Configuration\NmsConstants.cs" />
+    <Compile 
Include="src\main\csharp\Configuration\NmsTransportBindingElement.cs" />
+    <Compile Include="src\main\csharp\Configuration\NmsTransportElement.cs" />
+    <Compile Include="src\main\csharp\ConnectionFactoryManager.cs" />
+    <Compile Include="src\main\csharp\InputQueue.cs" />
+    <Compile Include="src\main\csharp\NmsAsyncResult.cs" />
+    <Compile Include="src\main\csharp\NmsChannelBase.cs" />
+    <Compile Include="src\main\csharp\NmsChannelFactory.cs" />
+    <Compile Include="src\main\csharp\NmsChannelHelper.cs" />
+    <Compile Include="src\main\csharp\NmsChannelListener.cs" />
+    <Compile Include="src\main\csharp\NmsInputChannel.cs" />
+    <Compile Include="src\main\csharp\NmsOutputChannel.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="nant.build" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
+</Project>
\ No newline at end of file

Added: activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vs2008-nms-wcf.sln
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vs2008-nms-wcf.sln?rev=709503&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vs2008-nms-wcf.sln (added)
+++ activemq/activemq-dotnet/Apache.NMS.WCF/trunk/vs2008-nms-wcf.sln Fri Oct 31 
10:43:10 2008
@@ -0,0 +1,24 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vs2008-nms-wcf", 
"vs2008-nms-wcf.csproj", "{96BAB638-2ECF-4648-8553-8FE6B9A4816F}"
+EndProject
+Global
+       GlobalSection(SubversionScc) = preSolution
+               Svn-Managed = True
+               Manager = AnkhSVN - Subversion Support for Visual Studio
+       EndGlobalSection
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Release|Any CPU = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {96BAB638-2ECF-4648-8553-8FE6B9A4816F}.Debug|Any CPU.ActiveCfg 
= Debug|Any CPU
+               {96BAB638-2ECF-4648-8553-8FE6B9A4816F}.Debug|Any CPU.Build.0 = 
Debug|Any CPU
+               {96BAB638-2ECF-4648-8553-8FE6B9A4816F}.Release|Any 
CPU.ActiveCfg = Release|Any CPU
+               {96BAB638-2ECF-4648-8553-8FE6B9A4816F}.Release|Any CPU.Build.0 
= Release|Any CPU
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal


Reply via email to