You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by sh...@apache.org on 2009/09/03 01:38:07 UTC

svn commit: r810734 [5/5] - in /qpid/trunk/qpid/wcf: ./ samples/ samples/Channel/ samples/Channel/WCFToWCFDirect/ samples/Channel/WCFToWCFDirect/Client/ samples/Channel/WCFToWCFDirect/Client/Properties/ samples/Channel/WCFToWCFDirect/Service/ samples/C...

Added: qpid/trunk/qpid/wcf/src/Apache/Qpid/Interop/QpidMarshal.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/src/Apache/Qpid/Interop/QpidMarshal.h?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/src/Apache/Qpid/Interop/QpidMarshal.h (added)
+++ qpid/trunk/qpid/wcf/src/Apache/Qpid/Interop/QpidMarshal.h Wed Sep  2 23:38:03 2009
@@ -0,0 +1,53 @@
+/*
+* 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.
+*/
+
+#pragma once
+
+namespace Apache {
+namespace Qpid {
+namespace Interop {
+
+using namespace System;
+using namespace System::Text;
+
+
+// Helper functions for marshaling.
+
+private ref class QpidMarshal
+{
+ public:
+
+    // marshal_as<T> not available in all Visual Studio editions.
+
+    static std::string ToNative (System::String^ managed) {
+	if (managed->Length == 0) {
+	    return std::string();
+	}
+	array<unsigned char>^ mbytes = Encoding::UTF8->GetBytes(managed);
+	if (mbytes->Length == 0) {
+	    return std::string();
+	}
+
+	pin_ptr<unsigned char> pinnedBuf = &mbytes[0];
+	std::string native((char *) pinnedBuf, mbytes->Length);
+	return native;
+    }
+};
+
+}}} // namespace Apache::Qpid::Interop

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Interop/QpidMarshal.h
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/src/Apache/Qpid/Interop/QpidMarshal.h
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/AsyncTest.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/AsyncTest.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/AsyncTest.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/AsyncTest.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,190 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using System.Threading;
+    using NUnit.Framework;
+
+    [TestFixture]
+    public class AsyncTest
+    {
+        private const int MessageCount = 20;
+        private const string Queue = "amqp:amq.direct?routingkey=routing_key";
+        private Uri endpoint = new Uri("amqp:message_queue");
+        private TimeSpan standardTimeout = TimeSpan.FromSeconds(10.0); // seconds
+
+        [Test]
+        public void NonTryReceives()
+        {
+            this.SendMessages(this.standardTimeout, this.standardTimeout);
+            this.ReceiveNonTryMessages(this.standardTimeout, this.standardTimeout);
+        }
+
+        [Test]
+        public void TryReceives()
+        {
+            this.SendMessages(this.standardTimeout, this.standardTimeout);
+            this.ReceiveTryMessages(this.standardTimeout, this.standardTimeout);
+        }
+
+        [Test]
+        public void SmallTimeout()
+        {
+            // This code is commented out due to a bug in asynchronous channel open.
+            ////IChannelListener parentListener;
+            ////try
+            ////{
+            ////    this.RetrieveAsyncChannel(new Uri("amqp:fake_queue_do_not_create"), TimeSpan.FromMilliseconds(10.0), out parentListener);
+            ////    parentListener.Close();
+            ////    Assert.Fail("Accepting the channel did not time out.");
+            ////}
+            ////catch (TimeoutException)
+            ////{
+            ////    // Intended exception.
+            ////}
+
+            try
+            {
+                this.ReceiveNonTryMessages(this.standardTimeout, TimeSpan.FromMilliseconds(10.0));
+                Assert.Fail("Receiving a message did not time out.");
+            }
+            catch (TimeoutException)
+            {
+                // Intended exception.
+            }
+        }
+
+        private void SendMessages(TimeSpan channelTimeout, TimeSpan messageSendTimeout)
+        {
+            ChannelFactory<IOutputChannel> channelFactory = 
+                    new ChannelFactory<IOutputChannel>(Util.GetBinding(), Queue);
+            IOutputChannel proxy = channelFactory.CreateChannel();
+            IAsyncResult[] resultArray = new IAsyncResult[MessageCount];
+
+            for (int i = 0; i < MessageCount; i++)
+            {
+                Message toSend = Message.CreateMessage(MessageVersion.Default, string.Empty, i);
+                resultArray[i] = proxy.BeginSend(toSend, messageSendTimeout, null, null);
+            }
+
+            for (int j = 0; j < MessageCount; j++)
+            {
+                proxy.EndSend(resultArray[j]);
+            }
+
+            IAsyncResult iocCloseResult = proxy.BeginClose(channelTimeout, null, null);
+            Thread.Sleep(TimeSpan.FromMilliseconds(50.0)); // Dummy work
+            proxy.EndClose(iocCloseResult);
+
+            IAsyncResult chanFactCloseResult = channelFactory.BeginClose(channelTimeout, null, null);
+            Thread.Sleep(TimeSpan.FromMilliseconds(50.0)); // Dummy work
+            channelFactory.EndClose(chanFactCloseResult);
+        }
+
+        private void ReceiveNonTryMessages(TimeSpan channelTimeout, TimeSpan messageTimeout)
+        {
+            IChannelListener inputChannelParentListener;
+            IInputChannel inputChannel = this.RetrieveAsyncChannel(this.endpoint, channelTimeout, out inputChannelParentListener);
+
+            inputChannel.Open();
+
+            IAsyncResult[] resultArray = new IAsyncResult[MessageCount];
+            try
+            {
+                for (int i = 0; i < MessageCount; i++)
+                {
+                    resultArray[i] = inputChannel.BeginReceive(messageTimeout, null, null);
+                }
+
+                for (int j = 0; j < MessageCount; j++)
+                {
+                    inputChannel.EndReceive(resultArray[j]);
+                }
+            }
+            finally
+            {
+                IAsyncResult channelCloseResult = inputChannel.BeginClose(channelTimeout, null, null);
+                Thread.Sleep(TimeSpan.FromMilliseconds(50.0)); // Dummy work
+                inputChannel.EndClose(channelCloseResult);
+
+                // Asynchronous listener close has not been implemented.
+                ////IAsyncResult listenerCloseResult = inputChannelParentListener.BeginClose(channelTimeout, null, null);
+                ////Thread.Sleep(TimeSpan.FromMilliseconds(50.0)); // Dummy work
+                ////inputChannelParentListener.EndClose(listenerCloseResult);
+
+                inputChannelParentListener.Close();
+            }
+        }
+
+        private void ReceiveTryMessages(TimeSpan channelAcceptTimeout, TimeSpan messageReceiveTimeout)
+        {
+            IChannelListener<IInputChannel> listener = Util.GetBinding().BuildChannelListener<IInputChannel>(this.endpoint, new BindingParameterCollection());
+            listener.Open();
+            IInputChannel inputChannel = listener.AcceptChannel(channelAcceptTimeout);
+            IAsyncResult channelResult = inputChannel.BeginOpen(channelAcceptTimeout, null, null);
+            Thread.Sleep(TimeSpan.FromMilliseconds(50.0));
+            inputChannel.EndOpen(channelResult);
+
+            IAsyncResult[] resultArray = new IAsyncResult[MessageCount];
+
+            for (int i = 0; i < MessageCount; i++)
+            {
+                resultArray[i] = inputChannel.BeginTryReceive(messageReceiveTimeout, null, null);
+            }
+
+            for (int j = 0; j < MessageCount; j++)
+            {
+                Message tempMessage;
+                Assert.True(inputChannel.EndTryReceive(resultArray[j], out tempMessage), "Did not successfully receive message #{0}", j);
+            }
+
+            inputChannel.Close();
+            listener.Close();
+        }
+
+        private IInputChannel RetrieveAsyncChannel(Uri queue, TimeSpan timeout, out IChannelListener parentListener)
+        {
+            IChannelListener<IInputChannel> listener =
+                    Util.GetBinding().BuildChannelListener<IInputChannel>(queue, new BindingParameterCollection());
+            listener.Open();
+            IInputChannel inputChannel;
+
+            try
+            {
+                IAsyncResult acceptResult = listener.BeginAcceptChannel(timeout, null, null);
+                Thread.Sleep(TimeSpan.FromMilliseconds(300.0)); // Dummy work
+                inputChannel = listener.EndAcceptChannel(acceptResult);
+            }
+            catch (TimeoutException e)
+            {
+                listener.Close();
+                throw e;
+            }
+            finally
+            {
+                parentListener = listener;
+            }
+            return inputChannel;
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/AsyncTest.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/AsyncTest.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/CustomAmqpBindingTest.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/CustomAmqpBindingTest.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/CustomAmqpBindingTest.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/CustomAmqpBindingTest.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,77 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Reflection;
+    using System.ServiceModel;
+    using System.Threading;
+    using NUnit.Framework;
+
+    [TestFixture]
+    public class CustomAmqpBindingTest
+    {
+        private MessageClient client;
+
+        [SetUp]
+        public void Setup()
+        {
+            // Create client
+            this.client = new MessageClient();
+            this.client.NumberOfMessages = 3;
+            this.client.NumberOfIterations = 3;
+
+            // Setup and start service            
+            MessageService.EndpointAddress = "amqp:message_queue";
+            MessageService.ContractTypes = new List<Type>();
+            MessageService.ContractTypes.Add(typeof(IInteropService));
+            MessageService.CompletionHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
+            MessageService.IntendedInvocationCount = this.client.NumberOfIterations * this.client.NumberOfMessages * MessageService.ContractTypes.Count;
+            MessageService.StartService(Util.GetCustomBinding());
+        }
+
+        [Test]
+        public void Run()
+        {
+            // Create the WCF AMQP channel and send messages
+            MethodInfo runClientMethod = this.client.GetType().GetMethod("RunInteropClient");
+            EndpointAddress address = new EndpointAddress("amqp:amq.direct?routingkey=routing_key");
+            foreach (Type contractType in MessageService.ContractTypes)
+            {
+                MethodInfo runClientT = runClientMethod.MakeGenericMethod(contractType);
+                runClientT.Invoke(this.client, new object[] { address });
+            }
+
+            // Allow the WCF service to process all the messages before validation
+            MessageService.CompletionHandle.WaitOne(TimeSpan.FromSeconds(10.0), false);
+            
+            // Validation
+            int expectedMethodCallCount = this.client.NumberOfIterations * this.client.NumberOfMessages * MessageService.ContractTypes.Count;
+            Assert.AreEqual(expectedMethodCallCount, MessageService.TotalMethodCallCount);
+        }
+
+        [TearDown]
+        public void Cleanup()
+        {
+            MessageService.StopService();
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/CustomAmqpBindingTest.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/CustomAmqpBindingTest.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/FunctionalTests.csproj
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/FunctionalTests.csproj?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/FunctionalTests.csproj (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/FunctionalTests.csproj Wed Sep  2 23:38:03 2009
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+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.
+-->
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E2D8C779-E417-40BA-BEE1-EE034268482F}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Apache.Qpid.Test.Channel.Functional</RootNamespace>
+    <AssemblyName>Apache.Qpid.Test.Channel.Functional</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="nunit.framework, Version=2.5.2.9222, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL" />
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AsyncTest.cs" />
+    <Compile Include="CustomAmqpBindingTest.cs" />
+    <Compile Include="IGenericObjectService.cs" />
+    <Compile Include="IInteropService.cs" />
+    <Compile Include="IQueuedDatagramService1.cs" />
+    <Compile Include="IQueuedDatagramService2.cs" />
+    <Compile Include="IQueuedDatagramService3.cs" />
+    <Compile Include="MessageBodyTest.cs" />
+    <Compile Include="MessagePropertiesTest.cs" />
+    <Compile Include="MultipleEndpointsSameQueueTest.cs" />
+    <Compile Include="MessageClient.cs" />
+    <Compile Include="MessageService.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Util.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\..\..\..\src\Apache\Qpid\Channel\Channel.csproj">
+      <Project>{8AABAB30-7D1E-4539-B7D1-05450262BAD2}</Project>
+      <Name>Channel</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\..\..\..\src\Apache\Qpid\Interop\Interop.vcproj">
+      <Project>{C9B6AC75-6332-47A4-B82B-0C20E0AF2D34}</Project>
+      <Name>Interop</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+</Project>
\ No newline at end of file

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IGenericObjectService.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IGenericObjectService.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IGenericObjectService.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IGenericObjectService.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,30 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System.ServiceModel;
+
+    [ServiceContract(SessionMode = SessionMode.NotAllowed)]
+    public interface IGenericObjectService
+    {
+        [OperationContract(IsOneWay = true)]
+        void SendObject(object message);
+    }
+}

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IGenericObjectService.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IGenericObjectService.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IInteropService.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IInteropService.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IInteropService.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IInteropService.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,31 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+
+    [ServiceContract]
+    public interface IInteropService
+    {
+        [OperationContract(IsOneWay = true, Action = "*")]
+        void Hello(Message message);
+    }
+}
\ No newline at end of file

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IInteropService.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IInteropService.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService1.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService1.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService1.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService1.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,34 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+
+    [ServiceContract(SessionMode = SessionMode.NotAllowed)]
+    public interface IQueuedDatagramService1
+    {
+        [OperationContract(IsOneWay = true)]
+        void Hello(string message);
+
+        [OperationContract(IsOneWay = true)]
+        void Goodbye();
+    }
+}
\ No newline at end of file

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService1.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService1.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService2.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService2.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService2.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService2.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,34 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+
+    [ServiceContract(SessionMode = SessionMode.NotAllowed)]
+    public interface IQueuedDatagramService2
+    {
+        [OperationContract(IsOneWay = true)]
+        void Hello(string message);
+
+        [OperationContract(IsOneWay = true)]
+        void Goodbye();
+    }
+}
\ No newline at end of file

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService2.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService2.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService3.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService3.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService3.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService3.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,33 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System.ServiceModel;
+
+    [ServiceContract(SessionMode = SessionMode.NotAllowed)]
+    public interface IQueuedDatagramService3
+    {
+        [OperationContract(IsOneWay = true)]
+        void Hello(string message);
+
+        [OperationContract(IsOneWay = true)]
+        void Goodbye();
+    }
+}
\ No newline at end of file

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService3.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/IQueuedDatagramService3.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageBodyTest.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageBodyTest.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageBodyTest.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageBodyTest.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,135 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Runtime.Serialization;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using NUnit.Framework;
+
+    [TestFixture]
+    public class MessageBodyTest
+    {
+        private const string Queue = "amqp:amq.direct?routingkey=routing_key";
+
+        [Test]
+        public void DateVariation()
+        {
+            DateTime rightNow = DateTime.UtcNow;
+            this.SendMessage(rightNow);
+            this.ReceiveMessage<DateTime>(rightNow);
+        }
+
+        [Test]
+        public void EmptyStringVariation()
+        {
+            const string TestString = "";
+            this.SendMessage(TestString);
+            this.ReceiveMessage<string>(TestString);
+        }
+
+        [Test]
+        public void IntPrimitiveVariation()
+        {
+            const int TheAnswer = 42;
+            this.SendMessage(TheAnswer);
+            this.ReceiveMessage<int>(TheAnswer);
+        }
+
+        [Test]
+        public void MultipleIntVariation()
+        {
+            const int NumberOfMessages = 20;
+            int[] listOfNumbers = new int[NumberOfMessages];
+
+            for (int i = 0; i < NumberOfMessages; i++)
+            {
+                this.SendMessage(i);
+                listOfNumbers[i] = i;
+            }
+
+            Assert.True(listOfNumbers[NumberOfMessages - 1] != 0, "Not all messages were sent.");
+
+            for (int j = 0; j < NumberOfMessages; j++)
+            {
+                int receivedNumber = this.ReceiveMessage<int>();
+                Assert.True(listOfNumbers[j].Equals(receivedNumber), "Received {0} - this number is unknown or has been received more than once.", receivedNumber);
+            }
+        }
+
+        [Test]
+        public void StringVariation()
+        {
+            const string TestString = "The darkest of dim, dreary days dost draw deathly deeds. どーも";
+            this.SendMessage(TestString);
+            this.ReceiveMessage<string>(TestString);
+        }
+        
+        private void SendMessage(object objectToSend)
+        {
+            IChannelFactory<IOutputChannel> channelFactory =
+                    Util.GetBinding().BuildChannelFactory<IOutputChannel>();
+            channelFactory.Open();
+            IOutputChannel proxy = channelFactory.CreateChannel(new EndpointAddress(Queue));
+            proxy.Open();
+            Message toSend = Message.CreateMessage(MessageVersion.Default, string.Empty, objectToSend);
+            proxy.Send(toSend);
+            toSend.Close();
+            channelFactory.Close();
+        }
+
+        private TObjectType ReceiveMessage<TObjectType>()
+        {
+            Uri endpoint = new Uri("amqp:message_queue");
+            IChannelListener<IInputChannel> listener = Util.GetBinding().BuildChannelListener<IInputChannel>(endpoint, new BindingParameterCollection());
+            listener.Open();
+            IInputChannel service = listener.AcceptChannel(TimeSpan.FromSeconds(10));
+            service.Open();
+            Message receivedMessage = service.Receive(TimeSpan.FromSeconds(10));
+            Assert.NotNull(receivedMessage, "Message was not received");
+            try
+            {
+                TObjectType receivedObject = receivedMessage.GetBody<TObjectType>();
+                return receivedObject;
+            }
+            catch (SerializationException)
+            {
+                Assert.Fail("Deserialized object not of correct type");
+            }
+            finally
+            {
+                receivedMessage.Close();
+                service.Close();
+                listener.Close();
+            }
+
+            return default(TObjectType);
+        }
+
+        private TObjectType ReceiveMessage<TObjectType>(TObjectType objectToMatch)
+        {
+            TObjectType receivedObject = this.ReceiveMessage<TObjectType>();
+            Assert.True(objectToMatch.Equals(receivedObject), "Original and deserialized objects do not match");
+            return receivedObject;
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageBodyTest.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageBodyTest.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageClient.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageClient.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageClient.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageClient.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,101 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System;
+    using System.Reflection;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+
+    public class MessageClient
+    {
+        public int NumberOfMessages
+        {
+            get;
+            set;
+        }
+
+        public int NumberOfIterations
+        {
+            get;
+            set;
+        }
+
+        public void RunClient<TServiceContract>(EndpointAddress address)
+        {
+            Binding amqpBinding = Util.GetBinding();
+            Type proxyType = typeof(TServiceContract);
+            MethodInfo helloMethod = proxyType.GetMethod("Hello");
+            MethodInfo goodbyeMethod = proxyType.GetMethod("Goodbye");
+
+            string[] messages = new string[this.NumberOfMessages];
+            for (int i = 0; i < this.NumberOfMessages; ++i)
+            {
+                messages[i] = "Message " + i;
+            }
+
+            for (int i = 0; i < this.NumberOfIterations; ++i)
+            {
+                this.CreateChannelAndSendMessages<TServiceContract>(address, amqpBinding, helloMethod, goodbyeMethod, messages);
+            }
+        }
+
+        public void RunInteropClient<TServiceContract>(EndpointAddress address)
+        {
+            Binding amqpBinding = Util.GetBinding();
+            Type proxyType = typeof(TServiceContract);
+            MethodInfo helloMethod = proxyType.GetMethod("Hello");
+
+            Message[] messages = new Message[this.NumberOfMessages];
+
+            for (int i = 0; i < this.NumberOfIterations; ++i)
+            {
+                this.CreateInteropChannelAndSendMessages<TServiceContract>(address, amqpBinding, helloMethod, this.NumberOfMessages);
+            }
+        }
+
+        private void CreateChannelAndSendMessages<TServiceContract>(EndpointAddress address, Binding amqpBinding, MethodInfo helloMethod, MethodInfo goodbyeMethod, object[] messages)
+        {
+            ChannelFactory<TServiceContract> channelFactory = new ChannelFactory<TServiceContract>(amqpBinding, address);
+            TServiceContract proxy = channelFactory.CreateChannel();
+
+            foreach (object message in messages)
+            {
+                helloMethod.Invoke(proxy, new object[] { message });
+            }
+
+            goodbyeMethod.Invoke(proxy, new object[0]);
+            channelFactory.Close();
+        }
+
+        private void CreateInteropChannelAndSendMessages<TServiceContract>(EndpointAddress address, Binding amqpBinding, MethodInfo helloMethod, int messageCount)
+        {
+            ChannelFactory<TServiceContract> channelFactory = new ChannelFactory<TServiceContract>(amqpBinding, address);
+            TServiceContract proxy = channelFactory.CreateChannel();
+
+            for (int i = 0; i < messageCount; i++)
+            {
+                helloMethod.Invoke(proxy, new object[] { Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "*") });
+            }
+
+            channelFactory.Close();
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageClient.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageClient.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageProperties.txt
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageProperties.txt?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageProperties.txt (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageProperties.txt Wed Sep  2 23:38:03 2009
@@ -0,0 +1,22 @@
+/*
+* 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.
+*/
+ContentType=Text
+Durable=true
+RoutingKey=routing_key
+TimeToLive=00:00:10
\ No newline at end of file

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageProperties.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageProperties.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessagePropertiesTest.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessagePropertiesTest.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessagePropertiesTest.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessagePropertiesTest.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,131 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Reflection;
+    using System.Runtime.Serialization;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using Apache.Qpid.AmqpTypes;
+    using NUnit.Framework;
+
+    [TestFixture]
+    public class MessagePropertiesTest
+    {
+        private const string RoutingKey = "routing_key";
+        private const string SendToUri = "amqp:amq.direct?routingkey=" + RoutingKey;
+
+        [Test]
+        public void DefaultAmqpProperties()
+        {
+            const string TestString = "Test Message";
+            AmqpProperties messageProperties = new AmqpProperties();
+
+            this.SendMessage(TestString, messageProperties);
+            this.ReceiveMessage<string>(TestString, messageProperties);
+        }
+
+        [Test]
+        public void NonDefaultAmqpProperties()
+        {
+            const string TestString = "Test Message";
+            AmqpProperties messageProperties = this.CreateMessageProperties();
+
+            this.SendMessage(TestString, messageProperties);
+            this.ReceiveMessage<string>(TestString, messageProperties);
+        }
+
+        private AmqpProperties CreateMessageProperties()
+        {
+            Dictionary<string, string> messageProperties = Util.GetProperties("..\\..\\MessageProperties.txt");
+
+            AmqpProperties amqpProperties = new AmqpProperties();
+            amqpProperties.ContentType = (string)messageProperties["ContentType"];
+            amqpProperties.Durable = Convert.ToBoolean((string)messageProperties["Durable"]);
+            amqpProperties.RoutingKey = (string)messageProperties["RoutingKey"];
+            amqpProperties.TimeToLive = TimeSpan.Parse((string)messageProperties["TimeToLive"]);
+
+            return amqpProperties;
+        }
+
+        private void SendMessage(object objectToSend, AmqpProperties propertiesToSend)
+        {
+            ChannelFactory<IOutputChannel> channelFactory =
+                    new ChannelFactory<IOutputChannel>(Util.GetBinding(), SendToUri);
+            IOutputChannel proxy = channelFactory.CreateChannel();
+            proxy.Open();
+            
+            Message toSend = Message.CreateMessage(MessageVersion.Default, string.Empty, objectToSend);
+            toSend.Properties["AmqpProperties"] = propertiesToSend;
+            proxy.Send(toSend);
+
+            toSend.Close();
+            proxy.Close();
+            channelFactory.Close();
+        }
+
+        private void ReceiveMessage<TObjectType>(TObjectType objectToMatch, AmqpProperties expectedProperties)
+        {
+            Uri receiveFromUri = new Uri("amqp:message_queue");
+            IChannelListener<IInputChannel> listener = Util.GetBinding().BuildChannelListener<IInputChannel>(receiveFromUri, new BindingParameterCollection());
+            listener.Open();
+            IInputChannel service = listener.AcceptChannel(TimeSpan.FromSeconds(10));
+            service.Open();
+            Message receivedMessage = service.Receive(TimeSpan.FromSeconds(10));            
+            try
+            {
+                TObjectType receivedObject = receivedMessage.GetBody<TObjectType>();
+                Assert.True(receivedObject.Equals(objectToMatch), "Original and deserialized objects do not match");
+                
+                AmqpProperties receivedProperties = (AmqpProperties)receivedMessage.Properties["AmqpProperties"];
+                PropertyInfo[] propInfo = typeof(AmqpProperties).GetProperties();
+
+                for (int i = 0; i < propInfo.Length; i++)
+                {
+                    string propertyName = propInfo[i].Name;
+                    if (propertyName.Equals("RoutingKey", StringComparison.InvariantCultureIgnoreCase))
+                    {
+                        Assert.AreEqual(RoutingKey, Convert.ToString(propInfo[i].GetValue(receivedProperties, null)));
+                    }
+                    else
+                    {
+                        Assert.AreEqual(Convert.ToString(propInfo[i].GetValue(expectedProperties, null)), Convert.ToString(propInfo[i].GetValue(receivedProperties, null)));
+                    }
+                }
+            }
+            catch (NullReferenceException)
+            {
+                Assert.Fail("Message not received");
+            }
+            catch (SerializationException)
+            {
+                Assert.Fail("Deserialized object not of correct type");
+            }
+            finally
+            {
+                receivedMessage.Close();
+                service.Close();
+                listener.Close();
+            }
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessagePropertiesTest.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessagePropertiesTest.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageService.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageService.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageService.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageService.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,158 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System;
+    using System.Collections.Generic;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using System.Threading;
+
+    public class MessageService : IQueuedDatagramService1, IQueuedDatagramService2, IQueuedDatagramService3, IInteropService
+    {
+        private static Dictionary<string, int> methodCallCount = new Dictionary<string, int>();
+        private static ServiceHost serviceHost;
+
+        public static EventWaitHandle CompletionHandle
+        {
+            get;
+            set;
+        }
+
+        public static int IntendedInvocationCount
+        {
+            get;
+            set;
+        }
+
+        public static int TotalMethodCallCount
+        {
+            get;
+            set;
+        }
+
+        // The test must set these paramters                  
+        public static List<Type> ContractTypes
+        {
+            get;
+            set;
+        }
+
+        public static string EndpointAddress
+        {
+            get;
+            set;
+        }
+
+        public static void DisplayCounts()
+        {
+            Console.WriteLine("Method calls:");
+            foreach (string key in methodCallCount.Keys)
+            {
+                Console.WriteLine("  {0}: {1}", key, methodCallCount[key]);
+            }
+
+            Console.WriteLine("Total: {0}", TotalMethodCallCount);
+        }
+
+        public static void StartService(Binding amqpBinding)
+        {
+            MessageService.methodCallCount.Clear();
+            MessageService.TotalMethodCallCount = 0;
+
+            serviceHost = new ServiceHost(typeof(MessageService));
+
+            foreach (Type contractType in ContractTypes)
+            {
+                serviceHost.AddServiceEndpoint(contractType, amqpBinding, EndpointAddress);
+            }
+
+            serviceHost.Open();
+        }
+
+        public static void StopService()
+        {
+            if (serviceHost.State != CommunicationState.Faulted)
+            {
+                serviceHost.Close();
+            }
+        }
+
+        public void UpdateCounts(string method)
+        {
+            lock (methodCallCount)
+            {
+                if (!methodCallCount.ContainsKey(method))
+                {
+                    methodCallCount[method] = 0;
+                }
+
+                ++methodCallCount[method];
+                ++TotalMethodCallCount;
+                if (TotalMethodCallCount >= IntendedInvocationCount && CompletionHandle != null)
+                {
+                    CompletionHandle.Set();
+                }
+            }
+        }
+
+        [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
+        void IQueuedDatagramService1.Hello(string message)
+        {
+            this.UpdateCounts("IQueuedDatagramService1.Hello");
+        }
+
+        [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
+        void IQueuedDatagramService1.Goodbye()
+        {
+            this.UpdateCounts("IQueuedDatagramService1.Goodbye");
+        }
+
+        [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
+        void IQueuedDatagramService2.Hello(string message)
+        {
+            this.UpdateCounts("IQueuedDatagramService2.Hello");
+        }
+
+        [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
+        void IQueuedDatagramService2.Goodbye()
+        {
+            this.UpdateCounts("IQueuedDatagramService2.Goodbye");
+        }
+
+        [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
+        void IQueuedDatagramService3.Hello(string message)
+        {
+            this.UpdateCounts("IQueuedDatagramService3.Hello");
+        }
+
+        [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
+        void IQueuedDatagramService3.Goodbye()
+        {
+            this.UpdateCounts("IQueuedDatagramService3.Goodbye");
+        }
+
+        [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
+        void IInteropService.Hello(Message message)
+        {
+            this.UpdateCounts("IInteropService.Hello");
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageService.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MessageService.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MultipleEndpointsSameQueueTest.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MultipleEndpointsSameQueueTest.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MultipleEndpointsSameQueueTest.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MultipleEndpointsSameQueueTest.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,83 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Reflection;
+    using System.ServiceModel;
+    using System.Threading;
+    using NUnit.Framework;
+
+    [TestFixture]
+    public class MultipleEndpointsSameQueueTest
+    {
+        private MessageClient client;
+
+        [SetUp]
+        public void Setup()
+        {
+            // Create client
+            this.client = new MessageClient();
+            this.client.NumberOfMessages = 3;
+            this.client.NumberOfIterations = 5;
+
+            // Setup and start service            
+            MessageService.EndpointAddress = "amqp:message_queue";
+
+            MessageService.ContractTypes = new List<Type>();
+            MessageService.ContractTypes.Add(typeof(IQueuedDatagramService1));
+            MessageService.ContractTypes.Add(typeof(IQueuedDatagramService2));
+            MessageService.ContractTypes.Add(typeof(IQueuedDatagramService3));
+            MessageService.CompletionHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
+            MessageService.IntendedInvocationCount = this.client.NumberOfIterations * (this.client.NumberOfMessages + 1) * MessageService.ContractTypes.Count;
+
+            MessageService.StartService(Util.GetBinding());
+        }
+
+        [Test]
+        public void Run()
+        {
+            // Create wcf amqpchannel and send messages
+            MethodInfo runClientMethod = this.client.GetType().GetMethod("RunClient");
+            EndpointAddress address = new EndpointAddress("amqp:amq.direct?routingkey=routing_key");
+
+            foreach (Type contractType in MessageService.ContractTypes)
+            {
+                MethodInfo runClientT = runClientMethod.MakeGenericMethod(contractType);
+                runClientT.Invoke(this.client, new object[] { address });
+            }
+
+            // Allow the wcf service to process all the messages before validation
+            MessageService.CompletionHandle.WaitOne(TimeSpan.FromSeconds(10.0), false);
+
+            // Validation
+            int expectedMethodCallCount = this.client.NumberOfIterations * (this.client.NumberOfMessages + 1) * MessageService.ContractTypes.Count;
+
+            Assert.AreEqual(expectedMethodCallCount, MessageService.TotalMethodCallCount);
+        }
+
+        [TearDown]
+        public void Cleanup()
+        {
+            MessageService.StopService();
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MultipleEndpointsSameQueueTest.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/MultipleEndpointsSameQueueTest.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Properties/AssemblyInfo.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Properties/AssemblyInfo.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Properties/AssemblyInfo.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Properties/AssemblyInfo.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,55 @@
+/*
+* 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Apache.Qpid.Test.Channel.Functional")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("552dca74-b5a3-4ad3-a718-4a1dd03db039")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Properties/AssemblyInfo.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Properties/AssemblyInfo.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/RunTests.bat
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/RunTests.bat?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/RunTests.bat (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/RunTests.bat Wed Sep  2 23:38:03 2009
@@ -0,0 +1,34 @@
+@echo OFF
+
+REM Licensed to the Apache Software Foundation (ASF) under one
+REM or more contributor license agreements.  See the NOTICE file
+REM distributed with this work for additional information
+REM regarding copyright ownership.  The ASF licenses this file
+REM to you under the Apache License, Version 2.0 (the
+REM "License"); you may not use this file except in compliance
+REM with the License.  You may obtain a copy of the License at
+REM 
+REM   http://www.apache.org/licenses/LICENSE-2.0
+REM 
+REM Unless required by applicable law or agreed to in writing,
+REM software distributed under the License is distributed on an
+REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+REM KIND, either express or implied.  See the License for the
+REM specific language governing permissions and limitations
+REM under the License.
+
+
+set nunit_exe=%programfiles%\NUnit 2.5.1\bin\net-2.0\nunit-console.exe
+set qpid_dll_location=..\..\..\..\..\..\..\cpp\build\src\Debug
+set configuration_name=bin\Debug
+set qcreate_location=..\..\..\..\..\..\tools\QCreate\Debug
+
+copy %qpid_dll_location%\qpidclient.dll %configuration_name%
+copy %qpid_dll_location%\qpidcommon.dll %configuration_name%
+
+copy %qpid_dll_location%\qpidclient.dll %qcreate_location%
+copy %qpid_dll_location%\qpidcommon.dll %qcreate_location%
+
+%qcreate_location%\QCreate.exe amq.direct routing_key message_queue
+
+"%nunit_exe%" %configuration_name%\Apache.Qpid.Test.Channel.Functional.dll

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/RunTests.bat
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/RunTests.bat
------------------------------------------------------------------------------
    svn:executable = *

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/RunTests.bat
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Util.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Util.cs?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Util.cs (added)
+++ qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Util.cs Wed Sep  2 23:38:03 2009
@@ -0,0 +1,74 @@
+/*
+* 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.
+*/
+
+namespace Apache.Qpid.Test.Channel.Functional
+{
+    using System.Collections.Generic;
+    using System.IO;
+    using System.ServiceModel;
+    using System.ServiceModel.Channels;
+    using Apache.Qpid.Channel;
+
+    internal class Util
+    {
+        public static Dictionary<string, string> GetProperties(string path)
+        {
+            string fileData = string.Empty;
+            using (StreamReader sr = new StreamReader(path))
+            {
+                fileData = sr.ReadToEnd().Replace("\r", string.Empty);
+            }
+
+            Dictionary<string, string> properties = new Dictionary<string, string>();
+            string[] kvp;
+            string[] records = fileData.Split("\n".ToCharArray());
+            foreach (string record in records)
+            {
+                if (record[0] == '/' || record[0] == '*')
+                {
+                    continue;
+                }
+
+                kvp = record.Split("=".ToCharArray());
+                properties.Add(kvp[0], kvp[1]);
+            }
+
+            return properties;
+        }
+
+        public static Binding GetBinding()
+        {
+            return new AmqpBinding();
+        }
+
+        public static Binding GetCustomBinding()
+        {
+            AmqpTransportBindingElement transportElement = new AmqpTransportBindingElement();
+            RawMessageEncodingBindingElement encodingElement = new RawMessageEncodingBindingElement();
+            transportElement.BrokerHost = "127.0.0.1";
+            transportElement.TransferMode = TransferMode.Streamed;
+
+            CustomBinding brokerBinding = new CustomBinding();
+            brokerBinding.Elements.Add(encodingElement);
+            brokerBinding.Elements.Add(transportElement);
+
+            return brokerBinding;
+        }
+    }
+}

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Util.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/test/Apache/Qpid/Test/Channel/Functional/Util.cs
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/tools/QCreate/QCreate.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/tools/QCreate/QCreate.cpp?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/tools/QCreate/QCreate.cpp (added)
+++ qpid/trunk/qpid/wcf/tools/QCreate/QCreate.cpp Wed Sep  2 23:38:03 2009
@@ -0,0 +1,65 @@
+/*
+* 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.
+*/
+
+#include "stdafx.h"
+
+#include <qpid/client/Connection.h>
+#include <qpid/client/Session.h>
+
+#include <cstdlib>
+#include <iostream>
+
+using namespace qpid::client;
+using namespace qpid::framing;
+
+
+int main(int argc, char** argv) {
+
+	std::string exchange = argc>1 ? argv[1] : "amq.direct";
+    std::string bindingKey = argc>2 ? argv[2] : "routing_key";
+	std::string queue = argc>3 ? argv[3] : "message_queue";
+
+	const char* host = "127.0.0.1";
+    int port = 5672;
+    Connection connection;
+
+    try {
+      connection.open(host, port);
+      Session session =  connection.newSession();
+
+
+  //--------- Main body of program --------------------------------------------
+
+      // Create a queue and route all messages whose
+      // routing key is "routing_key" to this newly created queue.
+
+      session.queueDeclare(arg::queue=queue);
+      session.exchangeBind(arg::exchange=exchange, arg::queue=queue, arg::bindingKey=bindingKey);
+
+  //-----------------------------------------------------------------------------
+
+      connection.close();
+      return 0;
+    } catch(const std::exception& error) {
+        std::cout << error.what() << std::endl;
+    }
+    return 1;
+   
+}
+

Propchange: qpid/trunk/qpid/wcf/tools/QCreate/QCreate.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/tools/QCreate/QCreate.cpp
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/tools/QCreate/ReadMe.txt
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/tools/QCreate/ReadMe.txt?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/tools/QCreate/ReadMe.txt (added)
+++ qpid/trunk/qpid/wcf/tools/QCreate/ReadMe.txt Wed Sep  2 23:38:03 2009
@@ -0,0 +1,52 @@
+/*
+* 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.
+*/
+
+========================================================================
+    CONSOLE APPLICATION : QCreate Project Overview
+========================================================================
+
+AppWizard has created this QCreate application for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your QCreate application.
+
+
+QCreate.vcproj
+    This is the main project file for VC++ projects generated using an Application Wizard.
+    It contains information about the version of Visual C++ that generated the file, and
+    information about the platforms, configurations, and project features selected with the
+    Application Wizard.
+
+QCreate.cpp
+    This is the main application source file.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+    These files are used to build a precompiled header (PCH) file
+    named QCreate.pch and a precompiled types file named StdAfx.obj.
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" comments to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////

Propchange: qpid/trunk/qpid/wcf/tools/QCreate/ReadMe.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/tools/QCreate/ReadMe.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/tools/QCreate/stdafx.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/tools/QCreate/stdafx.cpp?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/tools/QCreate/stdafx.cpp (added)
+++ qpid/trunk/qpid/wcf/tools/QCreate/stdafx.cpp Wed Sep  2 23:38:03 2009
@@ -0,0 +1,27 @@
+/*
+* 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.
+*/
+
+// stdafx.cpp : source file that includes just the standard includes
+// QCreate.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file

Propchange: qpid/trunk/qpid/wcf/tools/QCreate/stdafx.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/tools/QCreate/stdafx.cpp
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/tools/QCreate/stdafx.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/tools/QCreate/stdafx.h?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/tools/QCreate/stdafx.h (added)
+++ qpid/trunk/qpid/wcf/tools/QCreate/stdafx.h Wed Sep  2 23:38:03 2009
@@ -0,0 +1,34 @@
+/*
+* 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.
+*/
+
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#pragma once
+
+#include "targetver.h"
+
+#include <stdio.h>
+#include <tchar.h>
+
+
+
+// TODO: reference additional headers your program requires here

Propchange: qpid/trunk/qpid/wcf/tools/QCreate/stdafx.h
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/tools/QCreate/stdafx.h
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: qpid/trunk/qpid/wcf/tools/QCreate/targetver.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/wcf/tools/QCreate/targetver.h?rev=810734&view=auto
==============================================================================
--- qpid/trunk/qpid/wcf/tools/QCreate/targetver.h (added)
+++ qpid/trunk/qpid/wcf/tools/QCreate/targetver.h Wed Sep  2 23:38:03 2009
@@ -0,0 +1,32 @@
+/*
+* 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.
+*/
+
+#pragma once
+
+// The following macros define the minimum required platform.  The minimum required platform
+// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run 
+// your application.  The macros work by enabling all features available on platform versions up to and 
+// including the version specified.
+
+// Modify the following defines if you have to target a platform prior to the ones specified below.
+// Refer to MSDN for the latest info on corresponding values for different platforms.
+#ifndef _WIN32_WINNT            // Specifies that the minimum required platform is Windows Vista.
+#define _WIN32_WINNT 0x0600     // Change this to the appropriate value to target other versions of Windows.
+#endif
+

Propchange: qpid/trunk/qpid/wcf/tools/QCreate/targetver.h
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: qpid/trunk/qpid/wcf/tools/QCreate/targetver.h
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org