More questions about request/response

1,921 views
Skip to first unread message

schaibaa

unread,
Aug 15, 2012, 10:39:32 PM8/15/12
to masstrans...@googlegroups.com
Hi Guys,

I updated to 2.6 today and am stuck on a weird issue --

I don't think it's related to 2.6 - but possible?

Anyway, do my request/response classes need to implement CorrelatedBy?

Also, should I be using Consumes<IConsumesContext<Type>>.All instead of .Consumes<Type>.All ?


The issue is that I have identical code on 2 aspx web form pages... creating the same request/response, etc... one of them works perfectly, the other waits until my timeout is reached -- it doesn't time out, it goes into Handle

I can't figure it out :)

Thanks!

schaibaa

unread,
Aug 15, 2012, 10:51:25 PM8/15/12
to masstrans...@googlegroups.com
OK... well... 

I'm not sure why this worked, but on the page that was not working correctly, the @Page directive Async was set to true:

<%@ Page Async="true" %> 

Turning this off fixed the problem.  Seems totally innocuous and not intuitive.. but, fixed my problem.

Chris Patterson

unread,
Aug 16, 2012, 12:44:14 AM8/16/12
to masstrans...@googlegroups.com
You should use Consumes<T>.Context actually, that's the best way to do it now.

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-dis...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/2wcWQaKy-sUJ.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

Stanislav Perekrestov

unread,
Aug 16, 2012, 5:02:30 AM8/16/12
to masstrans...@googlegroups.com

If I use RabbitMQ routing and the following code

_bus.PublishRequest(new RequestMessage {CorrelationId = correlationId}, x =>
{
x.Handle<ReplyMessage>(response => { Debugger.Break(); });
});

a consumer receives a message and successfully replies it:
public void Consume(IConsumeContext<RequestMessage> context)
{
///......
context.Respond(new  ReplyMessage  {CorrelationId = context.Message.CorrelationId});
}

But the requestor doesn't receive a response.
I checked rabbitmq configuration and I saw the following:
The appropriate RabbitMq exchange (bus) has binding for RequestMessage  and it doesn't have a binding for ReplyMessage

I'm not really sure but it seems that Masstransit doesn't correctly configure RabbitMQ for the request/reply pattern.

On Thursday, August 16, 2012 7:44:14 AM UTC+3, Chris Patterson wrote:
You should use Consumes<T>.Context actually, that's the best way to do it now.

On Wed, Aug 15, 2012 at 9:51 PM, schaibaa <adam.s...@gmail.com> wrote:
OK... well... 

I'm not sure why this worked, but on the page that was not working correctly, the @Page directive Async was set to true:

<%@ Page Async="true" %> 

Turning this off fixed the problem.  Seems totally innocuous and not intuitive.. but, fixed my problem.


On Wednesday, August 15, 2012 10:39:32 PM UTC-4, schaibaa wrote:
Hi Guys,

I updated to 2.6 today and am stuck on a weird issue --

I don't think it's related to 2.6 - but possible?

Anyway, do my request/response classes need to implement CorrelatedBy?

Also, should I be using Consumes<IConsumesContext<Type>>.All instead of .Consumes<Type>.All ?


The issue is that I have identical code on 2 aspx web form pages... creating the same request/response, etc... one of them works perfectly, the other waits until my timeout is reached -- it doesn't time out, it goes into Handle

I can't figure it out :)

Thanks!

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

schaibaa

unread,
Aug 16, 2012, 10:08:57 AM8/16/12
to masstrans...@googlegroups.com
Thanks Chris...

Is there any benefit to my request/response classes implementing CorrelatedBy?  Seems to work just fine without...


On Thursday, August 16, 2012 12:44:14 AM UTC-4, Chris Patterson wrote:
You should use Consumes<T>.Context actually, that's the best way to do it now.

On Wed, Aug 15, 2012 at 9:51 PM, schaibaa <adam.s...@gmail.com> wrote:
OK... well... 

I'm not sure why this worked, but on the page that was not working correctly, the @Page directive Async was set to true:

<%@ Page Async="true" %> 

Turning this off fixed the problem.  Seems totally innocuous and not intuitive.. but, fixed my problem.


On Wednesday, August 15, 2012 10:39:32 PM UTC-4, schaibaa wrote:
Hi Guys,

I updated to 2.6 today and am stuck on a weird issue --

I don't think it's related to 2.6 - but possible?

Anyway, do my request/response classes need to implement CorrelatedBy?

Also, should I be using Consumes<IConsumesContext<Type>>.All instead of .Consumes<Type>.All ?


The issue is that I have identical code on 2 aspx web form pages... creating the same request/response, etc... one of them works perfectly, the other waits until my timeout is reached -- it doesn't time out, it goes into Handle

I can't figure it out :)

Thanks!

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

schaibaa

unread,
Aug 16, 2012, 10:09:26 AM8/16/12
to masstrans...@googlegroups.com
I haven't had any issues with RabbitMQ config.. seems to "just work" for me

Wiebe Tijsma

unread,
Aug 16, 2012, 12:12:01 PM8/16/12
to masstrans...@googlegroups.com
We use the standard Request/Response pattern with RabbitMQ and without a Correlation ID, and it works just fine?


                bus.PublishRequest(
                    new Request { message = "Hello" },
                    callback => callback.Handle<Response>(response => {/* Do something useful */} ));
- Wiebe

To unsubscribe from this group, send email to masstransit-dis...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/R8gACITV1IwJ.

Chris Patterson

unread,
Aug 16, 2012, 1:21:20 PM8/16/12
to masstrans...@googlegroups.com
Yeah, these should just work.

You don't need CorrelationId, a RequestId header gets added by MT and that is used for correlation.

Also, the response is sent to the ResponseAddress in the message header, so if the message originated from queueA, the response is sent directly to queueA (avoiding all of the exchange routing logic).

And I demo this every time I demo MT, and it works and others have seen it work. If it is not working for you, there may be something wrong with your message class that it can't be deserialized - in which case I suggest checking the logs (enable log4net or NLOG first) and see what's up with the message itself.

Stanislav Perekrestov

unread,
Aug 16, 2012, 2:30:36 PM8/16/12
to masstrans...@googlegroups.com
Thanks,


BTW, can't figure out what is wrong with this code:  http://pastebin.com/jvKK3WXM 
A responder sends a reply but a requestor doesn't get it. :(

To unsubscribe from this group, send email to masstransit-discuss+unsubscribe...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/2wcWQaKy-sUJ.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/R8gACITV1IwJ.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

Chris Patterson

unread,
Aug 16, 2012, 2:36:15 PM8/16/12
to masstrans...@googlegroups.com
Each bus needs to be on a different queue, you have them both on "test" so they are fighting over messages.

Change one to "test_server" and the other to "test_client" and you'll be all set.

To unsubscribe from this group, send email to masstransit-dis...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/jQGNVFwAxL4J.

Stanislav Perekrestov

unread,
Aug 16, 2012, 2:40:54 PM8/16/12
to masstrans...@googlegroups.com
It doesn't help much  http://pastebin.com/u9qGzYcK 
RabbitMQ Mgmt console http://screencast.com/t/2bQC0stN
Thanks,


To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/R8gACITV1IwJ.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsubscribe...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

Stanislav Perekrestov

unread,
Aug 16, 2012, 2:48:36 PM8/16/12
to masstrans...@googlegroups.com
Thanks a lot Chris!
You were absolutely right.

This one is correct:  http://pastebin.com/SCY7nfRn 
Thanks,


To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/R8gACITV1IwJ.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsubscribe...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

Travis Smith

unread,
Aug 16, 2012, 3:12:38 PM8/16/12
to masstrans...@googlegroups.com
So we have that tidbit in docs, but it's one of the most common
starting problems. Where could we put it so you would know that it's
the likely cause of an issue? Did you look at any docs when getting
started? Should it just be in the README?

We'll take feedback on this, I hate having to answer the same problem
multiple times. We're doing something wrong here.

Glad it's working for you.

-Travis


On Thu, Aug 16, 2012 at 2:48 PM, Stanislav Perekrestov
>>>>>>>> masstransit-dis...@googlegroups.com.
>>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/2wcWQaKy-sUJ.
>>>>>>>>
>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "masstransit-discuss" group.
>>>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to
>>>>>> masstransit-dis...@googlegroups.com.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/R8gACITV1IwJ.
>>>>>>
>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "masstransit-discuss" group.
>>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>>> To unsubscribe from this group, send email to
>>>>> masstransit-dis...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>
>>>>>
>>>>
>>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "masstransit-discuss" group.
>>> To post to this group, send email to masstrans...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> masstransit-dis...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msg/masstransit-discuss/-/jQGNVFwAxL4J.
>>>
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>
>>
> --
> You received this message because you are subscribed to the Google Groups
> "masstransit-discuss" group.
> To post to this group, send email to masstrans...@googlegroups.com.
> To unsubscribe from this group, send email to
> masstransit-dis...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/masstransit-discuss/-/Y8XDpkKufjsJ.

Stanislav Perekrestov

unread,
Aug 16, 2012, 5:04:58 PM8/16/12
to masstrans...@googlegroups.com
I guess the best way to take attention to the described problem is to put
"NB" here and put some additional information why a requester and a receiver should use different queue names.

//the requester
public class Program
{
    public static void Main()
    {
        Bus.Initialize(sbc =>
        {
            sbc.UseMsmq();
            sbc.VerifyMsmqConfiguration();
            sbc.UseMulticastSubscriptionClient();
            sbc.ReceiveFrom("msmq://localhost/message_requestor");
        });

If I have 2 messages "Request" and "Response" and a queue "test" then masstransit creates exchanges "Request" and "Response" and binds them to
an appropriate exchange "test" that corresponds to the queue with the same name.

I can't figure out why "Each bus needs to be on a different queue, you have them both on "test" so they are fighting over messages."
The requester listens/consumes only "Response" messages while the Responder consumes only "Request" messages.
I understand that 2 instances of the IServiceBus listen to the same queue. And If they consume messages of the same type we will have something like race conditions. But in the mentioned sample the requester and the responder consume different kinds of messages.
I guess it's the core of my misunderstanding and perhaps I'm not alone :)

Thanks.
>>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/2wcWQaKy-sUJ.
>>>>>>>>
>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "masstransit-discuss" group.
>>>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/R8gACITV1IwJ.
>>>>>>
>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "masstransit-discuss" group.
>>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>>> To unsubscribe from this group, send email to
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>
>>>>>
>>>>
>>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "masstransit-discuss" group.
>>> To post to this group, send email to masstrans...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msg/masstransit-discuss/-/jQGNVFwAxL4J.
>>>
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>
>>
> --
> You received this message because you are subscribed to the Google Groups
> "masstransit-discuss" group.
> To post to this group, send email to masstrans...@googlegroups.com.
> To unsubscribe from this group, send email to

Dru Sellers

unread,
Aug 16, 2012, 5:44:09 PM8/16/12
to masstrans...@googlegroups.com
We currently have it here:


and I have now added it to the place you requested. http://docs.masstransit-project.com/en/latest/overview/request.html

Its a common misconception that everyone needs to have the same queue, so hopefully this new stuff helps. Thank you for the feedback.

-d

To unsubscribe from this group, send email to masstransit-dis...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/6lwgR0dVO9MJ.

schaibaa

unread,
Aug 16, 2012, 7:42:42 PM8/16/12
to masstrans...@googlegroups.com
I think if you were to add a comment at the end of the .ReceiveFrom() line, that would help.  For some reason my eyes tend to skip over the string - especially since it is very similar.  Also, at least on my display, the red warning box is pretty far below the fold.  It might be more effective for the warning to be between the requester and responder code block.  Also, if _requestor and _responder in the string were bolded and/or a different font color (possibly bold red and bold blue or something).. that would draw additional attention to their differences.

Just a few thoughts.
-d

>>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/2wcWQaKy-sUJ.
>>>>>>>>
>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "masstransit-discuss" group.
>>>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/R8gACITV1IwJ.
>>>>>>
>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "masstransit-discuss" group.
>>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>>> To unsubscribe from this group, send email to
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>
>>>>>
>>>>
>>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "masstransit-discuss" group.
>>> To post to this group, send email to masstrans...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msg/masstransit-discuss/-/jQGNVFwAxL4J.
>>>
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>
>>
> --
> You received this message because you are subscribed to the Google Groups
> "masstransit-discuss" group.
> To post to this group, send email to masstrans...@googlegroups.com.
> To unsubscribe from this group, send email to
> To view this discussion on the web visit

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

Travis Smith

unread,
Aug 16, 2012, 8:35:14 PM8/16/12
to masstrans...@googlegroups.com
Thanks for the feedback on this. Everything we can do to help people
get started smooth is better for everyone.

-Travis
>>>> >>>>>>>> masstransit-dis...@googlegroups.com.
>>>> >>>>>>>> To view this discussion on the web visit
>>>> >>>>>>>>
>>>> >>>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/2wcWQaKy-sUJ.
>>>> >>>>>>>>
>>>> >>>>>>>> For more options, visit
>>>> >>>>>>>> https://groups.google.com/groups/opt_out.
>>>> >>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>>
>>>> >>>>>>>
>>>> >>>>>> --
>>>> >>>>>> You received this message because you are subscribed to the
>>>> >>>>>> Google
>>>> >>>>>> Groups "masstransit-discuss" group.
>>>> >>>>>> To post to this group, send email to
>>>> >>>>>> masstrans...@googlegroups.com.
>>>> >>>>>> To unsubscribe from this group, send email to
>>>> >>>>>> masstransit-dis...@googlegroups.com.
>>>> >>>>>> To view this discussion on the web visit
>>>> >>>>>>
>>>> >>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/R8gACITV1IwJ.
>>>> >>>>>>
>>>> >>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>> >>>>>>
>>>> >>>>>>
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> --
>>>> >>>>> You received this message because you are subscribed to the Google
>>>> >>>>> Groups "masstransit-discuss" group.
>>>> >>>>> To post to this group, send email to
>>>> >>>>> masstrans...@googlegroups.com.
>>>> >>>>> To unsubscribe from this group, send email to
>>>> >>>>> masstransit-dis...@googlegroups.com.
>>>> >>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>> >>>>>
>>>> >>>>>
>>>> >>>>
>>>> >>>>
>>>> >>> --
>>>> >>> You received this message because you are subscribed to the Google
>>>> >>> Groups
>>>> >>> "masstransit-discuss" group.
>>>> >>> To post to this group, send email to masstrans...@googlegroups.com.
>>>> >>> To unsubscribe from this group, send email to
>>>> >>> masstransit-dis...@googlegroups.com.
>>>> >>> To view this discussion on the web visit
>>>> >>> https://groups.google.com/d/msg/masstransit-discuss/-/jQGNVFwAxL4J.
>>>> >>>
>>>> >>> For more options, visit https://groups.google.com/groups/opt_out.
>>>> >>>
>>>> >>>
>>>> >>
>>>> >>
>>>> > --
>>>> > You received this message because you are subscribed to the Google
>>>> > Groups
>>>> > "masstransit-discuss" group.
>>>> > To post to this group, send email to masstrans...@googlegroups.com.
>>>> > To unsubscribe from this group, send email to
>>>> > masstransit-dis...@googlegroups.com.
>>>> > To view this discussion on the web visit
>>>> > https://groups.google.com/d/msg/masstransit-discuss/-/Y8XDpkKufjsJ.
>>>> >
>>>> > For more options, visit https://groups.google.com/groups/opt_out.
>>>> >
>>>> >
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "masstransit-discuss" group.
>>> To post to this group, send email to masstrans...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> masstransit-dis...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msg/masstransit-discuss/-/6lwgR0dVO9MJ.
>>>
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>
>>
> --
> You received this message because you are subscribed to the Google Groups
> "masstransit-discuss" group.
> To post to this group, send email to masstrans...@googlegroups.com.
> To unsubscribe from this group, send email to
> masstransit-dis...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/masstransit-discuss/-/nY51oO0uysoJ.

Chris Patterson

unread,
Aug 17, 2012, 10:16:33 AM8/17/12
to masstrans...@googlegroups.com
A bus always consumes messages, whether it has subscriptions or not.

To unsubscribe from this group, send email to masstransit-dis...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/6lwgR0dVO9MJ.

Stanislav Perekrestov

unread,
Aug 17, 2012, 10:20:56 AM8/17/12
to masstrans...@googlegroups.com
Wow, I suppose it's one of the most important remarks for me. Thanks a lot.

Hrvoje Hudoletnjak

unread,
Aug 21, 2012, 3:21:28 PM8/21/12
to masstrans...@googlegroups.com

After upgrading to 2.6.2 my request/response messages doesn't work any more! 
Well, request msg is received, but respond message never arrives back.

Was there some change with this?

Code is really simple:
respond part:
 public class AliveHandler : Consumes<AliveRequestMessage>.Context
 {
    public void Consume(IConsumeContext<AliveRequestMessage> message)
    {
message.Respond(new AliveRespondeMessage() { somevar = somethhing });
Console.WriteLine("Ping.");
    }
 }

request part:
bool? returned = null;
int n = 0;
Bus.Instance.PublishRequest(
    new AliveRequestMessage(),
    r =>
    {
        r.Handle<AliveRespondeMessage>(m =>
        {
            n = m.Somevar;
            returned = true;
        });
        r.HandleTimeout(TimeSpan.FromSeconds(3), ()=> { returned = false; } );
    });


I can see "Ping" in console, but respond msg never arrives. 


Also, I upgraded to Win8 + .net 4.5, if that's important info  ...

thanx,
Hrvoje

Chris Patterson

unread,
Aug 24, 2012, 8:37:08 PM8/24/12
to masstrans...@googlegroups.com
There are extensive tests on request/response and they all pass.

If you can submit a failing unit test (via Gist, or whatever), we can try to reproduce it. But everything we have setup verifies that the request/response support in MT with RabbitMQ works.

On Fri, Aug 24, 2012 at 3:50 PM, Andrei Volkov <zvo...@gmail.com> wrote:
I see the same issue with 2.6.1 -- the response actually arrives but is not getting dispatched correctly?
The last message I see in the log is:

DEBUG MassTransit.Context.ServiceBusReceiveContext - Dispatching message on rabbitmq://localhost/ip2 from thread 5

but my PublishRequest callback is not actually getting hit.
rolling back to 2.1.1 :(


On Wednesday, August 15, 2012 10:39:32 PM UTC-4, schaibaa wrote:

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-dis...@googlegroups.com.

Andrei Volkov

unread,
Aug 29, 2012, 10:45:44 AM8/29/12
to masstrans...@googlegroups.com
Your unit tests run under no SynchronizationContext (SynchronizationContext.Current returns null). This is different from ASP.NET environment which uses AspNetSynchronizationContext.

The new ResponseHandlerBase class gets stuck on the _context.Post line when executed under ASP.NET, but it takes a completely different path in the unit-tests.

I will try and make a unit-test run under a non-empty SynchronizationContext.
 
~AV

Andrei Volkov

unread,
Aug 29, 2012, 12:57:46 PM8/29/12
to masstrans...@googlegroups.com
What's funny is: my message handler is invoked ...right after the timeout expires! This is because _context.Post (in ResponseHandlerBase) does not actually invoke the handler until after the CompleteEvent.WaitOne in RequestImpl has returned. Which makes me think... am I not supposed to call PublishRequest from a request thread of a web app? Should I use full-blown async pattern and have ASP.NET do the wait for me?

Unfortunately it's not easy to recreate AspNetSynchronizationContext environment in a unit-test, but assuming Request/Response should work just as well from a GUI app I could try and simulate a similar situation with WindowsFormsSynchronizationContext? I.e. call PublishRequest directly from the UI thread? Would that be as simple as this failing unit-test? https://gist.github.com/3515252 


On Friday, August 24, 2012 8:37:08 PM UTC-4, Chris Patterson wrote:
There are extensive tests on request/response and they all pass.

If you can submit a failing unit test (via Gist, or whatever), we can try to reproduce it. But everything we have setup verifies that the request/response support in MT with RabbitMQ works.

On Fri, Aug 24, 2012 at 3:50 PM, Andrei Volkov <zvo...@gmail.com> wrote:
I see the same issue with 2.6.1 -- the response actually arrives but is not getting dispatched correctly?
The last message I see in the log is:

DEBUG MassTransit.Context.ServiceBusReceiveContext - Dispatching message on rabbitmq://localhost/ip2 from thread 5

but my PublishRequest callback is not actually getting hit.
rolling back to 2.1.1 :(


On Wednesday, August 15, 2012 10:39:32 PM UTC-4, schaibaa wrote:
Hi Guys,

I updated to 2.6 today and am stuck on a weird issue --

I don't think it's related to 2.6 - but possible?

Anyway, do my request/response classes need to implement CorrelatedBy?

Also, should I be using Consumes<IConsumesContext<Type>>.All instead of .Consumes<Type>.All ?


The issue is that I have identical code on 2 aspx web form pages... creating the same request/response, etc... one of them works perfectly, the other waits until my timeout is reached -- it doesn't time out, it goes into Handle

I can't figure it out :)

Thanks!

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

Chris Patterson

unread,
Aug 29, 2012, 3:57:36 PM8/29/12
to masstrans...@googlegroups.com
Well, I'm thinking you should really be using the BeginPublishRequest() syntax, since the Wait is clearly going to block your synchronization context.

To unsubscribe from this group, send email to masstransit-dis...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/6nO5Bplu88sJ.

Andrei Volkov

unread,
Aug 29, 2012, 5:26:19 PM8/29/12
to masstrans...@googlegroups.com
Doesn't make any diff -- the EndPublishRequest still calls the same Wait(). I even tried PublishRequestAsync with the same result. 

It's not the syntax I use, it's the fact that I evidently can't wait for completion of a Request-Response on an ASP.NET thread, nor on the GUI thread of a WinForms app. I have to use an actual async pattern -- it does work fine then, I tried.

Chris Patterson

unread,
Aug 29, 2012, 11:43:29 PM8/29/12
to masstrans...@googlegroups.com
There is a Wait on the sync context, but it doesn't take normal handles. Not sure how you're supposed to yield a thread context. I wonder how else to handle this....

Andrei Volkov

unread,
Aug 30, 2012, 9:46:15 AM8/30/12
to masstrans...@googlegroups.com
I worked around the issue by wrapping a call to PublishRequestAsync into Stephen Cleary's AsyncContext (see http://stackoverflow.com/a/9343733/76859).

It still remains non-intuitive to me or any new user to have PublishRequest() deadlock, especially considering it used to work fine in MT 2.1. Need some guidance in the documentation IMO.


            AsyncContext.RunTask(() => serviceBus.PublishRequestAsync(
                eventObj,
                request => { request.Handle<XYZ>(msg => { ... }); }
            ).Task);

Chris Patterson

unread,
Aug 30, 2012, 10:32:43 AM8/30/12
to masstrans...@googlegroups.com
It used to work, but the problem is the message handler was calling back without the SynchronizationContext, which caused issues with ASP.NET and WinForms. That's why the context is now respected. It's clearly not working as intended, so I need to come up with something that makes more sense, or just force pure Async usage in those contexts. I'm not sure which is better.

Andrei Volkov

unread,
Aug 30, 2012, 10:45:01 AM8/30/12
to masstrans...@googlegroups.com
In certain scenarios the response handler may not need to interact with HttpContext or GUI controls, in which case it would be Ok to not sync back to the SynchronizationContext.

One option is to let the user choose whether they want to sync back to the original SynchronizationContext or not. Sort of like the new ConfigureAwait() in 4.5

Dawid Ciecierski

unread,
Aug 30, 2012, 12:57:28 PM8/30/12
to masstrans...@googlegroups.com
Andrei, Chris,

It's funny how I spent the last 2 hours trying to debug this while switching from 2.1.1 to 2.6.1, only to google the group for "SynchronizationContext" and voila, this discussion came up! Lesson learnt: always check the group before commiting more than 10mins to debugging!

Just as Andrei, was surprised that something that used to work with 2.1.1 stopped working after your July commit. Just out of curiosity, what were the ASP / Winforms issues when calling back without the SynchronizationContext? Interesting why the AspNetSynchronizationContext would not play nice with MassTransit, and only calls our handlers on timeout...

Will try to poke around a little but this may be way beyond my grasp of the way .Net handles threading.

Best regards,
Dawid Ciecierski

To unsubscribe from this group, send email to masstransit-discuss+unsubscribe...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/MaHqcH7BP8cJ.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/6nO5Bplu88sJ.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

Chris Patterson

unread,
Aug 30, 2012, 6:37:46 PM8/30/12
to masstrans...@googlegroups.com
In the meantime, I'm going to roll this change out for the next release to return to the 2.1.1 behavior.

To unsubscribe from this group, send email to masstransit-dis...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/2QOFm_kmxjwJ.

Dawid Ciecierski

unread,
Aug 31, 2012, 2:41:12 AM8/31/12
to masstrans...@googlegroups.com
Just want to confirm my findings with you to see if I understand MassTransit's behaviour in this context.

What I think happens is PublishRequest (from RequestResponseExtensions) publishes a request on the bus and then goes on to WaitOne on CompleteEvent (a ManualResetEvent), effectively blocking the ASP.NET virtual thread processing the page request.

In the meantime response arrives, and is being processed by the MassTransit receive loop, right until it gets to HandleResponse (ResponseHandlerBase). It then discovers that the response handler was created with an AspNetSynchronizationContext, and Posts a delegate (one that executes the actual handler you defined for response and informing others of success) to this context for "asynchronous" execution.

However, because AspNetSynchronizationContext guarantees that delegates execute one at a time, its Post is really synchronous. The delegate simply gets added on to the end of the "stuff to do" queue for the context processing the request - the one being blocked by WaitOne. Once WaitOne fails with timeout, the context finishes processing the page request - renders the page and sends it off to the browser. As soon as it does that it discovers that it has another job scheduled for execution... the one that executes the actual handler for response. (That is why the handler is executed in the end, just not when we want it to.)

What is interesting that according to this MSDN article, three out of the four default SynchronizationContext implementations (WindowsFormsSynchronizationContext, DispatcherSynchronizationContext used in WPF/Silverlight and AspNetSynchronizationContext) behave that way and guarantee delegate exclusivity - that they execute one at a time. And so for these three cases response will never get processed until waiting for response times out and the thread that was interested in getting the response completes.

I was thinking that perhaps standard events replacing ManualResetEvent would be of help here, but that would make this asynchronous from ASP's point of view and render the page before we process the response... It's a shame that there is no way of checking if a particular SynchronizationContext's Post is really synchronous or not!

Regards,
Dawid
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/6nO5Bplu88sJ.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsubscribe...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsubscribe...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsubscribe...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsubscribe...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsubscribe...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

Clay Anderson

unread,
Sep 4, 2012, 4:52:49 PM9/4/12
to masstrans...@googlegroups.com
I used the following code to work around the issue (using an extension method called BasicRequest):


public static class BusExtensions
{
/// <summary>
/// Sends a command and blocks while waiting for the result using a specified timeout.
/// </summary>
/// <param name="bus">The bus instance.</param>
/// <param name="command">The command to send.</param>
/// <param name="timeoutMilliseconds">The timout duration in milliseconds.</param>
public static void BasicRequest<TRequest>(this IServiceBus bus, TRequest command, TimeSpan timeOut) where TRequest : class
{
Thread t = new Thread(() => PerformRequest<TRequest>(bus, command, timeOut));
t.Start();
t.Join();
}

private static void PerformRequest<TRequest>(IServiceBus bus, TRequest command, TimeSpan timeOut) where TRequest : class
{
bus.PublishRequest(command, requestConfig =>
{
requestConfig.Handle<SuccessResponse>(message => { /* TODO: handle */ });
requestConfig.SetTimeout(timeOut);
});
}
}

To unsubscribe from this group, send email to masstransit-discuss+unsubscribe...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/MaHqcH7BP8cJ.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/masstransit-discuss/-/6nO5Bplu88sJ.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "masstransit-discuss" group.
To post to this group, send email to masstrans...@googlegroups.com.
To unsubscribe from this group, send email to masstransit-discuss+unsub...@googlegroups.com.

Chris Patterson

unread,
Sep 5, 2012, 7:17:46 PM9/5/12
to masstrans...@googlegroups.com
okay, so I rolled out that change and the develop branch now has the
original 2.1x behavior by default. As an option, you can specify a
synchronization context if you are using one and know what's up and
how to handle it, but by default it is no longer used.

Basically, if you need to hit up your synchronization context, it's on you. :)
>>>>>>>> masstransit-dis...@googlegroups.com.
>>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/MaHqcH7BP8cJ.
>>>>>>>>
>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "masstransit-discuss" group.
>>>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to
>>>>>> masstransit-dis...@googlegroups.com.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/6nO5Bplu88sJ.
>>>>>>
>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "masstransit-discuss" group.
>>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>>> To unsubscribe from this group, send email to
>>>>> masstransit-dis...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "masstransit-discuss" group.
>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>> To unsubscribe from this group, send email to
>>>> masstransit-dis...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>>
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "masstransit-discuss" group.
>>> To post to this group, send email to masstrans...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> masstransit-dis...@googlegroups.com.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>
>>
> --
> You received this message because you are subscribed to the Google Groups
> "masstransit-discuss" group.
> To post to this group, send email to masstrans...@googlegroups.com.
> To unsubscribe from this group, send email to
> masstransit-dis...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/masstransit-discuss/-/zvvZBL38-3IJ.

schaibaa

unread,
Sep 18, 2012, 11:47:07 PM9/18/12
to masstrans...@googlegroups.com
I think I am having some issues related to this change.

I have a request handler that no longer has access to the HTTP Context.

I am pretty sure it did before -- possibly not though.

I've tried .UseCurrentSynchronizationContext() - and also tried just setting it (retrieving it with SynchronizationContext.Current) -- which is what .UseCurrent seems to do ...


Any suggestions?

Thanks
>>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/MaHqcH7BP8cJ.
>>>>>>>>
>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "masstransit-discuss" group.
>>>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/6nO5Bplu88sJ.
>>>>>>
>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "masstransit-discuss" group.
>>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>>> To unsubscribe from this group, send email to
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "masstransit-discuss" group.
>>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>> To unsubscribe from this group, send email to
>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>>
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "masstransit-discuss" group.
>>> To post to this group, send email to masstrans...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>
>>
> --
> You received this message because you are subscribed to the Google Groups
> "masstransit-discuss" group.
> To post to this group, send email to masstrans...@googlegroups.com.
> To unsubscribe from this group, send email to

Clay Anderson

unread,
Sep 19, 2012, 11:39:38 AM9/19/12
to masstrans...@googlegroups.com
I could be mistaken, but I believe that is because it is coming from a different thread which is not part of the normal ASP.NET request thread.

Try capturing the HTTP Context in a local variable and use that
System.Web.HttpContext httpContext = System.Web.HttpContext.Current;
Bus.Instance.PublishRequest<YourRequest>(request, config =>
{
config.Handle<YourResponse>((response) =>
{
// do something with httpContext, not HttpContext.Curent.
});
});

schaibaa

unread,
Sep 19, 2012, 2:36:31 PM9/19/12
to masstrans...@googlegroups.com
Good call, I'll give this a shot.  That said, I think the usage of the synchronization context is supposed to get it back to the same thread .. 

schaibaa

unread,
Sep 19, 2012, 10:46:01 PM9/19/12
to masstrans...@googlegroups.com
This work-around was successful.. thanks Clay!

Chris Patterson

unread,
Sep 19, 2012, 11:26:04 PM9/19/12
to masstrans...@googlegroups.com
It could, but if your thread is blocked waiting for the request to
complete, the response handler can't run on your thread. That's why
the behavior was changed back to the 2.1.1 style, so it doesn't hang.
>>>> >>>>>>>> masstransit-dis...@googlegroups.com.
>>>> >>>>>>>> To view this discussion on the web visit
>>>> >>>>>>>>
>>>> >>>>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/MaHqcH7BP8cJ.
>>>> >>>>>>>>
>>>> >>>>>>>> For more options, visit
>>>> >>>>>>>> https://groups.google.com/groups/opt_out.
>>>> >>>>>>>>
>>>> >>>>>>>>
>>>> >>>>>>>
>>>> >>>>>>>
>>>> >>>>>> --
>>>> >>>>>> You received this message because you are subscribed to the
>>>> >>>>>> Google
>>>> >>>>>> Groups "masstransit-discuss" group.
>>>> >>>>>> To post to this group, send email to
>>>> >>>>>> masstrans...@googlegroups.com.
>>>> >>>>>> To unsubscribe from this group, send email to
>>>> >>>>>> masstransit-dis...@googlegroups.com.
>>>> >>>>>> To view this discussion on the web visit
>>>> >>>>>>
>>>> >>>>>> https://groups.google.com/d/msg/masstransit-discuss/-/6nO5Bplu88sJ.
>>>> >>>>>>
>>>> >>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>> >>>>>>
>>>> >>>>>>
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> --
>>>> >>>>> You received this message because you are subscribed to the Google
>>>> >>>>> Groups "masstransit-discuss" group.
>>>> >>>>> To post to this group, send email to
>>>> >>>>> masstrans...@googlegroups.com.
>>>> >>>>> To unsubscribe from this group, send email to
>>>> >>>>> masstransit-dis...@googlegroups.com.
>>>> >>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>> >>>>>
>>>> >>>>>
>>>> >>>>
>>>> >>>>
>>>> >>>> --
>>>> >>>> You received this message because you are subscribed to the Google
>>>> >>>> Groups "masstransit-discuss" group.
>>>> >>>> To post to this group, send email to masstrans...@googlegroups.com.
>>>> >>>> To unsubscribe from this group, send email to
>>>> >>>> masstransit-dis...@googlegroups.com.
>>>> >>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>> >>>>
>>>> >>>>
>>>> >>>
>>>> >>>
>>>> >>> --
>>>> >>> You received this message because you are subscribed to the Google
>>>> >>> Groups
>>>> >>> "masstransit-discuss" group.
>>>> >>> To post to this group, send email to masstrans...@googlegroups.com.
>>>> >>> To unsubscribe from this group, send email to
>>>> >>> masstransit-dis...@googlegroups.com.
>>>> >>> For more options, visit https://groups.google.com/groups/opt_out.
>>>> >>>
>>>> >>>
>>>> >>
>>>> >>
>>>> > --
>>>> > You received this message because you are subscribed to the Google
>>>> > Groups
>>>> > "masstransit-discuss" group.
>>>> > To post to this group, send email to masstrans...@googlegroups.com.
>>>> > To unsubscribe from this group, send email to
>>>> > masstransit-dis...@googlegroups.com.
>>>> > To view this discussion on the web visit
>>>> > https://groups.google.com/d/msg/masstransit-discuss/-/zvvZBL38-3IJ.
>>>> >
>>>> > For more options, visit https://groups.google.com/groups/opt_out.
>>>> >
>>>> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "masstransit-discuss" group.
> To post to this group, send email to masstrans...@googlegroups.com.
> To unsubscribe from this group, send email to
> masstransit-dis...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/masstransit-discuss/-/ahQHgOwZDy4J.
Reply all
Reply to author
Forward
0 new messages