summaryrefslogtreecommitdiff
path: root/qpid/wcf/ReadMe.txt
blob: b49e1a37ee5404df2135dbfd80bd7bdd3519e9e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
1. WCF supported features
=========================

1.  WCF service model programming using one way contracts
2.  WCF channel model programming using IInputChannel and IOutputChannel based factories
3.  Programmatic access to AMQP message properties on WCF messages
4.  AMQP version 0-10 (as provided by the Qpid C++ native client library)
5.  Shared connections for multiple channels based on binding parameters
6.  WCF to WCF applications (using SOAP message encoders)
7.  WCF to non-WCF applications (using raw content encoders)
8.  Rudimentary AMQP type support for headers (Int and String)
9.  Channel functional tests using NUnit
10. Programming samples
11. Prefetch window for inbound messages
12. Full distributed transaction support with single phase optimization.
13. Limited Qpid Messaging address naming for temporary queues and topics
14. TLS/SSL security with username/password credentials


2. Planned features (not yet available)
=======================================

1.  Full AMQP type support, including maps and arrays
2.  AMQP session-based local transactions.
3.  Shared sessions
4.  Connection failover with AMQP broker clusters
5.  Broker management
6.  System logging and tracing
7.  CMake build system support


3. Prerequisites
================

1. Qpid C++ client and common libraries for Windows including BOOST.
Ensure the location of the Boost library (e.g. %BOOST_ROOT%\lib) is
included in your PATH environment variable.

2. .NET Framework 3.5 SP1
Install the .NET Framework from http://www.microsoft.com/net/

3. Windows SDK
Install the Windows SDK for the version of Windows that you are using
from http://msdn.microsoft.com/en-us/windows/bb980924.aspx

4. NUnit
Install NUnit from http://www.nunit.org

NOTE: In the following instructions %QPID_ROOT% refers to the root of
qpid source code location e.g. C:\trunk\qpid

5. Build Qpid cpp according to the instuctions in INSTALL-WINDOWS.
Build at least the "qpidd", "qpidxarm", "qpidclient" and "qpidcommon"
projects. Optionally build "perftest" for use with the WcfPerftest
interoperability and performance test program.  Create an environment
variable called QPID_BUILD_ROOT and store the path to the Qpid build
directory in it.  Use the same BOOST_ROOT environment variable for
building both Qpid cpp and WCF related solutions.


4. Building the solution file
=============================

Ensure that BOOST_ROOT and QPID_BUILD_ROOT environment variables are
set as described above.

Option 1: Using MSBuild

1. %systemroot%\Microsoft.NET\Framework\v3.5\MSBuild.exe %QPID_ROOT%\wcf\QpidWcf.sln
2. %systemroot%\Microsoft.NET\Framework\v3.5\MSBuild.exe %QPID_ROOT%\wcf\tools\QCreate\QCreate.sln


Option 2: Using Visual Studio 2008 (the Professional Edition, Team
System Development Edition, or Team System Team Suite SKU)

1. Open the solution file QpidWcf.sln in Visual Studio.
2. Make sure that the reference to 'nunit.framework.dll' by the 'FunctionalTests'
   project is appropriately resolved.
3. Select the Debug configuration.
3. Right-click the solution file in the Solution Explorer and select 'Build Solution'.
4. Follow the above steps to build %QPID_ROOT%\wcf\tools\QCreate.sln as well.


5. Executing tests
==================

1. Make sure that the batch file
   %QPID_ROOT%\wcf\test\Apache\Qpid\Test\Channel\Functional\RunTests.bat has the correct
   values for the nunit_exe, qpid_dll_location and configuration_name variables as per
   your installation.
2. Start the qpid broker from the qpid build folder e.g. %QPID_BUILD_ROOT%\src\Debug.
3. Execute RunTests.bat from its location e.g. %QPID_ROOT%\wcf\test\Apache\Qpid\Test\Channel\Functional.


6. Building and executing samples
=================================

WCFToWCFDirect

1. Copy the dlls Apache.Qpid.Channel.dll and Apache.Qpid.Interop.dll that you built
   in step 2 to the %QPID_ROOT%\wcf\samples\Channel\WCFToWCFDirect folder.

2. Build the solution WCFToWCFDirect.sln.

3. Copy qpidclientd.dll and qpidcommond.dll from the Qpid build folder
   e.g. %QPID_ROOT%\cpp\build\src\Debug to the same location as the exe files
   e.g. bin\Debug of each of the projects. These dlls are needed at runtime.

4. Copy qpidclientd.dll and qpidcommond.dll to %QPID_ROOT%\wcf\tools\QCreate\Debug folder.

5. Start the qpid broker from the qpid build folder e.g. %QPID_ROOT%\cpp\build\src\Debug.

6. Create queue required using the QCreate tool located at
   %QPID_ROOT%\wcf\tools\QCreate\Debug. The syntax is QCreate %QPID_ROOT%. For
   this sample you should do 

      QCreate amq.direct routing_key message_queue

7. Start Service.exe from
      %QPID_ROOT%\wcf\samples\Channel\WCFToWCFDirect\Service\bin\Debug.

8. Start Client.exe from
      %QPID_ROOT%\wcf\samples\Channel\WCFToWCFDirect\Client\bin\Debug.


WCFToWCFPubSub

1. Copy the dlls Apache.Qpid.Channel.dll and Apache.Qpid.Interop.dll that you built
   in step 2 to the %QPID_ROOT%\wcf\samples\Channel\WCFToWCFPubSub folder.

2. Build the solution WCFToWCFPubSub.sln.

3. Copy qpidclientd.dll and qpidcommond.dll from the Qpid build folder
   e.g. %QPID_ROOT%\cpp\build\src\Debug to the same location as the exe files
   e.g. bin\Debug of each of the projects. These dlls are needed at runtime.

4. Copy qpidclientd.dll and qpidcommond.dll to %QPID_ROOT%\wcf\tools\QCreate\Debug folder.

5. Start the qpid broker from the qpid build folder e.g. %QPID_ROOT%\cpp\build\src\Debug.

6. Create queues required using the QCreate tool located at
   \wcf\tools\QCreate\Debug. The syntax is QCreate %QPID_ROOT%. For this sample you
   should do

	QCreate amq.topic usa.# usa
	QCreate amq.topic #.news news

7. Start Topic_Consumer.exe from
   %QPID_ROOT%\wcf\samples\Channel\WCFToWCFPubSub\Topic_Consumer\bin\Debug.

8. Start Another_Topic_Consumer.exe from
   %QPID_ROOT%\wcf\samples\Channel\WCFToWCFPubSub\Another_Topic_Consumer\bin\Debug.

9. Start Topic_Producer.exe from
   %QPID_ROOT%\wcf\samples\Channel\WCFToWCFPubSub\Topic_Producer\bin\Debug.


7. Configuring Transaction Support
==================================

1. Following the instructions in http://support.microsoft.com/kb/817066, update
   the MSDTC security settings to allow XA transactions, and create an XADLL
   registry entry for "qpidxarm" with string (REG_SZ) value
   "c:\actual\path\to\qpidxarm.dll".

2. Update the PATH environment variable for system programs and services to 
   include the locations for the Release versions of each following dll:

   Apache.Qpid.Channel.dll
   Apache.Qpid.Interop.dll
   qpidclient.dll
   qpidcommon.dll
   boost*.dll

3. Restart the Distributed Transaction Coordinator service, so that it runs 
   using the new PATH and MSDTC settings from the previous steps.


8. Known Issues
===============

1. The AmqpChannelListener is limited to single threaded use and the async methods
   throw NotImplementedException.

2. Failing to close WCF channels after use can sometimes lead to BOOST timeout
   exceptions in the finalizer thread.  As a workaround, applications should
   close all Qpid WCF services, listeners and channel factories before exiting.