https://bugzilla.novell.com/show_bug.cgi?id=633945
https://bugzilla.novell.com/show_bug.cgi?id=633945#c0 Summary: [Windows] some async HttpWebRequest or its underlying layer fails to invoke callback Classification: Mono Product: Mono: Class Libraries Version: SVN Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: P5 - None Component: System AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] CC: [email protected] Found By: --- Blocker: --- I noticed that on Windows some HttpWebRequest, async delegate or something else does not work as it does on Linux. HttpWebRequest fails to invoke AsyncCallback before timeout, probably BeginGetStream() callback is not invoked. What is interesting is that it sends the actual request *after* the timeout happens. Repro server and client (client matters): // ---- server ---- using System; using System.ServiceModel; using System.ServiceModel.Channels; using System.Threading; public class Test { public static void Main () { var b = new BasicHttpBinding (); var cl = b.BuildChannelListener<IReplyChannel> (new Uri ("http://localhost:8989")); cl.Open (); var ch = cl.AcceptChannel (); ch.Open (); var rc = ch.ReceiveRequest (); Console.WriteLine ("Request received"); Console.WriteLine (rc.RequestMessage); var msg = Message.CreateMessage (MessageVersion.Soap11, "http://tempuri.org/EchoResponse", "echo"); rc.Reply (msg); Thread.Sleep (3000); } } // ---- client ---- using System; using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Description; public class Test { public static void Main () { var cf = new ChannelFactory<ITestService> ( new BasicHttpBinding (), new EndpointAddress ("http://localhost:8989")); var ch = cf.CreateChannel (); //ch.Echo ("test"); // works. (error) ch.EndEcho (ch.BeginEcho ("test", null, null)); } } [ServiceContract] public interface ITestService { [OperationContract] // sync string Echo (string input); [OperationContract (AsyncPattern = true)] IAsyncResult BeginEcho (string input, AsyncCallback cb, object state); string EndEcho (IAsyncResult result); } -------- Another couple of working cases are: - Sync operation. By using "Echo" instead of "BeginEcho" / "EndEcho", it works fine. - A simpler client example that does not involve client "proxy" just works (in async operation), so it's not simply HttpWebRequest issue as a standalone. Example below: // ---- working client ---- using System; using System.ServiceModel; using System.ServiceModel.Channels; using System.Threading; public class Test { public static void Main () { var b = new BasicHttpBinding (); var cf = b.BuildChannelFactory<IRequestChannel> (); cf.Open (); var ch = cf.CreateChannel (new EndpointAddress ("http://localhost:8989")); ch.Open (); var msg = Message.CreateMessage (MessageVersion.Soap11, "urn:foo", "echo"); ch.EndRequest (ch.BeginRequest (msg, null, null)); } } -------- It's looking like some threading issue regarding async delegate invocation, but I could only identify the issue to this extent so far. CCing Gonzalo as he might have some inputs. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
