Skip to content

Commit 4bc70a9

Browse files
author
Emile Joubert
committed
Allow messages larger than the default
1 parent 36abca8 commit 4bc70a9

File tree

6 files changed

+66
-9
lines changed

6 files changed

+66
-9
lines changed

projects/wcf/RabbitMQ.ServiceModel/RabbitMQ.ServiceModel.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
<Reference Include="System.Data" />
8484
<Reference Include="System.ServiceModel"><RequiredTargetFramework>3.0</RequiredTargetFramework></Reference>
8585
<Reference Include="System.Xml" />
86+
<Reference Include="System.Runtime.Serialization" />
8687
</ItemGroup>
8788
<ItemGroup>
8889
<ProjectReference Include="..\..\client\RabbitMQ.Client\RabbitMQ.Client.csproj">

projects/wcf/RabbitMQ.ServiceModel/src/serviceModel/RabbitMQBinding.cs

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,10 @@ public sealed class RabbitMQBinding : Binding
5656
{
5757
private String m_host;
5858
private int m_port;
59+
private long m_maxMessageSize;
5960
private IProtocol m_brokerProtocol;
6061
private CompositeDuplexBindingElement m_compositeDuplex;
61-
private MessageEncodingBindingElement m_encoding;
62+
private TextMessageEncodingBindingElement m_encoding;
6263
private bool m_isInitialized;
6364
private bool m_oneWayOnly;
6465
private ReliableSessionBindingElement m_session;
@@ -67,8 +68,8 @@ public sealed class RabbitMQBinding : Binding
6768
private RabbitMQTransportBindingElement m_transport;
6869

6970
/// <summary>
70-
/// Creates a new instance of the RabbitMQBinding class initialized
71-
/// to use the Protocols.DefaultProtocol. The broker must be set
71+
/// Creates a new instance of the RabbitMQBinding class initialized
72+
/// to use the Protocols.DefaultProtocol. The broker must be set
7273
/// before use.
7374
/// </summary>
7475
public RabbitMQBinding()
@@ -79,7 +80,8 @@ public RabbitMQBinding()
7980
/// Uses the default protocol and the broker specified by the given
8081
/// Uri.
8182
/// </summary>
82-
/// <param name="broker">The address of the broker to connect to</param>
83+
/// <param name="hostname">The hostname of the broker to connect to</param>
84+
/// <param name="port">The port of the broker to connect to</param>
8385
public RabbitMQBinding(String hostname, int port)
8486
: this(hostname, port, Protocols.DefaultProtocol)
8587
{ }
@@ -88,7 +90,7 @@ public RabbitMQBinding(String hostname, int port)
8890
/// Uses the broker and protocol specified
8991
/// </summary>
9092
/// <param name="hostname">The hostname of the broker to connect to</param>
91-
/// <param name="port">The port of the broker to connect to</param>
93+
/// <param name="port">The port of the broker to connect to</param>
9294
/// <param name="protocol">The protocol version to use</param>
9395
public RabbitMQBinding(String hostname, int port, IProtocol protocol)
9496
: this(protocol)
@@ -97,6 +99,19 @@ public RabbitMQBinding(String hostname, int port, IProtocol protocol)
9799
this.Port = port;
98100
}
99101

102+
/// <summary>
103+
/// Uses the broker and protocol specified
104+
/// </summary>
105+
/// <param name="hostname">The hostname of the broker to connect to</param>
106+
/// <param name="port">The port of the broker to connect to</param>
107+
/// <param name="maxMessageSize">The largest allowable encoded message size</param>
108+
/// <param name="protocol">The protocol version to use</param>
109+
public RabbitMQBinding(String hostname, int port, long maxMessageSize, IProtocol protocol)
110+
: this(hostname, port, protocol)
111+
{
112+
this.MaxMessageSize = maxMessageSize;
113+
}
114+
100115
/// <summary>
101116
/// Uses the specified protocol. The broker must be set before use.
102117
/// </summary>
@@ -117,6 +132,7 @@ public override BindingElementCollection CreateBindingElements()
117132
m_transport.HostName = this.HostName;
118133
m_transport.Port = this.Port;
119134
m_transport.BrokerProtocol = this.BrokerProtocol;
135+
m_transport.MaxReceivedMessageSize = this.MaxMessageSize;
120136
BindingElementCollection elements = new BindingElementCollection();
121137

122138
if (m_transactionsEnabled)
@@ -145,12 +161,12 @@ private void Initialize()
145161
m_session = new ReliableSessionBindingElement();
146162
m_compositeDuplex = new CompositeDuplexBindingElement();
147163
m_transactionFlow = new TransactionFlowBindingElement();
148-
164+
m_maxMessageSize = 8192L;
149165
m_isInitialized = true;
150166
}
151167
}
152168
}
153-
169+
154170
/// <summary>
155171
/// Gets the scheme used by the binding, soap.amqp
156172
/// </summary>
@@ -179,6 +195,16 @@ public int Port
179195
set { m_port = value; }
180196
}
181197

198+
/// <summary>
199+
/// Specifies the maximum encoded message size
200+
/// </summary>
201+
[ConfigurationProperty("maxmessagesize")]
202+
public long MaxMessageSize
203+
{
204+
get { return m_maxMessageSize; }
205+
set { m_maxMessageSize = value; }
206+
}
207+
182208
/// <summary>
183209
/// Specifies the version of the AMQP protocol that should be used to communicate with the broker
184210
/// </summary>
@@ -205,7 +231,7 @@ public ReliableSession ReliableSession
205231
}
206232

207233
/// <summary>
208-
/// Determines whether or not the TransactionFlowBindingElement will
234+
/// Determines whether or not the TransactionFlowBindingElement will
209235
/// be added to the channel stack
210236
/// </summary>
211237
public bool TransactionFlow

projects/wcf/RabbitMQ.ServiceModel/src/serviceModel/RabbitMQBindingConfigurationElement.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ protected override void InitializeFrom(Binding binding)
8383
{
8484
this.HostName = rabbind.HostName;
8585
this.Port = rabbind.Port;
86+
this.MaxMessageSize = rabbind.MaxMessageSize;
8687
this.OneWayOnly = rabbind.OneWayOnly;
8788
this.TransactionFlowEnabled = rabbind.TransactionFlow;
8889
this.VirtualHost = rabbind.Transport.ConnectionFactory.VirtualHost;
@@ -113,6 +114,7 @@ protected override void OnApplyConfiguration(Binding binding)
113114
rabbind.Transport.ConnectionFactory.Password = this.Password;
114115
rabbind.Transport.ConnectionFactory.UserName = this.Username;
115116
rabbind.Transport.ConnectionFactory.VirtualHost = this.VirtualHost;
117+
rabbind.Transport.MaxReceivedMessageSize = this.MaxMessageSize;
116118
}
117119

118120
/// <summary>
@@ -191,6 +193,13 @@ public string ProtocolVersion
191193
}
192194
}
193195

196+
[ConfigurationProperty("maxmessagesize", DefaultValue = 8192L)]
197+
public long MaxMessageSize
198+
{
199+
get { return (long)base["maxmessagesize"]; }
200+
set { base["maxmessagesize"] = value; }
201+
}
202+
194203
private IProtocol GetProtocol() {
195204
IProtocol result = Protocols.Lookup(this.ProtocolVersion);
196205
if (result == null) {

projects/wcf/RabbitMQ.ServiceModel/src/serviceModel/RabbitMQInputChannel.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ public RabbitMQInputChannel(BindingContext context, IModel model, EndpointAddres
6767
: base(context, address)
6868
{
6969
m_bindingElement = context.Binding.Elements.Find<RabbitMQTransportBindingElement>();
70-
MessageEncodingBindingElement encoderElem = context.BindingParameters.Find<MessageEncodingBindingElement>();
70+
TextMessageEncodingBindingElement encoderElem = context.BindingParameters.Find<TextMessageEncodingBindingElement>();
71+
encoderElem.ReaderQuotas.MaxStringContentLength = (int)m_bindingElement.MaxReceivedMessageSize;
7172
if (encoderElem != null) {
7273
m_encoder = encoderElem.CreateMessageEncoderFactory().Encoder;
7374
}

projects/wcf/RabbitMQ.ServiceModel/src/serviceModel/RabbitMQTransportBindingElement.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public sealed class RabbitMQTransportBindingElement : TransportBindingElement
6060
private IProtocol m_protocol;
6161
private String m_host;
6262
private int m_port;
63+
private long m_maxReceivedMessageSize;
6364
private String m_username;
6465
private String m_password;
6566
private String m_vhost;
@@ -80,6 +81,7 @@ private RabbitMQTransportBindingElement(RabbitMQTransportBindingElement other)
8081
Username = other.Username;
8182
Password = other.Password;
8283
VirtualHost = other.VirtualHost;
84+
MaxReceivedMessageSize = other.MaxReceivedMessageSize;
8385
}
8486

8587

@@ -190,6 +192,15 @@ public int Port
190192
}
191193
}
192194

195+
/// <summary>
196+
/// The largest receivable encoded message
197+
/// </summary>
198+
public override long MaxReceivedMessageSize
199+
{
200+
get { return m_maxReceivedMessageSize; }
201+
set { m_maxReceivedMessageSize = value; }
202+
}
203+
193204
/// <summary>
194205
/// The username to use when authenticating with the broker
195206
/// </summary>

projects/wcf/RabbitMQ.ServiceModel/src/serviceModel/RabbitMQTransportElement.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,15 @@ public string VirtualHost
212212
set { base["virtualHost"] = value; }
213213
}
214214

215+
/// <summary>
216+
/// The largest receivable encoded message
217+
/// </summary>
218+
public new long MaxReceivedMessageSize
219+
{
220+
get { return MaxReceivedMessageSize; }
221+
set { MaxReceivedMessageSize = value; }
222+
}
223+
215224
protected override ConfigurationPropertyCollection Properties
216225
{
217226
get

0 commit comments

Comments
 (0)