http://bugzilla.novell.com/show_bug.cgi?id=619534
http://bugzilla.novell.com/show_bug.cgi?id=619534#c0 Summary: Message filter using BeforeSendReply from IDispatchMessageInspector does not work as in Microsoft NET Framework Classification: Mono Product: Mono: Class Libraries Version: 2.6.x Platform: Macintosh OS/Version: Mac OS X 10.6 Status: NEW Severity: Major Priority: P5 - None Component: WCF AssignedTo: atsu...@ximian.com ReportedBy: clovis.ribe...@myabcm.com QAContact: mono-bugs@lists.ximian.com Found By: --- Blocker: --- User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 If you create a message filter using IDispatchMessageInspector interface implementing BeforeSendReply and decide to completely replace the message inside, Mono ignores the replaced message. Example: If you write a message handler like the one below, the new message added to reply is ignored. public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)' { reply = Message.CreateMessage(reply.Version, reply.Headers.Action, String.Empty); } After looking at Mono sources, file MessageProcessingContext.cs, I realized there is an error in BeforeSendReply() (line 125) that is not updating the ReplyMessage after calling the message inspectors. I fixed the code by doing the following: public void BeforeSendReply () { Message toBeChanged = request_context.ReplyMessage; for (int i = 0; i < dispatch_runtime.MessageInspectors.Count; ++i) dispatch_runtime.MessageInspectors [i].BeforeSendReply (ref toBeChanged, msg_inspectors_states [i]); request_context.ReplyMessage = toBeChanged; } Note that I only added an extra line to write the toBeChanged back to request_context.ReplyMessage. This is exactly what is already being done in AfterReceiveRequest(). My final point here is: although we have not tested yet because we are using only one message filter, I believe you should add the request_context.ReplyMessage = toBeChanged inside the for() loop. If you don't do that, only the last inspector will work correctly. I say that for BeforeSendReply() AND AfterReceiveRequest(). Hope this helps and feel free to contact me as I have been digging inside this code for awhile. Reproducible: Always Steps to Reproduce: Create a message inspector by implementing IDispatchMessageInspector.BeforeSendReply() and completely replace the reply message inside BeforeSendReply() Actual Results: The new message is ignored. Expected Results: The new message should be sent back to the client. -- Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. _______________________________________________ mono-bugs maillist - mono-bugs@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-bugs