日期:2014-05-19  浏览次数:20770 次

再问超奇怪难题:winform异步调用webservice的Completed事件在有些机器上每次都被触发,在有些机器每次都没有触发。但是如果同步调用webs

再问超奇怪难题:winform异步调用webservice的Completed事件在有些机器上每次都被触发,在有些机器每次都没有触发。但是如果同步调用webservice,所有机器都成功返回。

具体情况如下:

有2台pc机:client001,client002,   同样的环境和同样的代码.
(.net   2.0   framework   +   WinXP   professional   环境)


client001   调用异步webservice,每次都失败(completed   event不触发,代码也没有报任何错误);   调用同步webservice,每次都成功返回.
client002   调用异步webservice,每次都成功返回;   调用同步webservice,每次都成功返回.

问题是client001   为什么会调用异步,每次都失败???

到底是:
1.   windowXP   问题?
2.   .net   framwork   问题?
3.   config文件配置问题?
4.   网络配置问题?
5.   还是其他软硬件问题?

这是我的一些研究线索:
1   我比较了很多这2台机器的各种参数和配置情况,也没有查出什么不同来。
2   我也跟踪了web   service   server端的反应,不管是client001还是client002,每次调用不管成功失败,server端的代码是肯定执行到的。


我的测试代码很简单,就是个HelloWorld例子。(如下)


//这是客户端代码   client.cs

//异步调用webservice
private   void   button6_Click(object   sender,   EventArgs   e)
                {
                        webservicetest.Service   service   =   new   webservicetest.Service();
                        service.Url   =   "http://d-sjn-khathi/webservicetest/Service.asmx ";

                        service.HelloWorldCompleted   +=   new   HelloWorldCompletedEventHandler(service_HelloWorldCompleted);

                        service.HelloWorldAsync();
                       
                       
                }

//异步调用webservice的事件处理
                void   service_HelloWorldCompleted(object   sender,   HelloWorldCompletedEventArgs   e)
                {

                        label1.Text   =   e.Result;
                }


//这是同步调用webservice
                private   void   button7_Click(object   sender,   EventArgs   e)
                {
                        webservicetest.Service   service   =   new   webservicetest.Service();
                        service.Url   =   "http://d-sjn-khathi/webservicetest/Service.asmx ";

                        label1.Text   =   service.HelloWorld();
                }


//这是web   service   服务器端代码   service.cs


using   System;
using   System.Web;
using   System.Web.Services;
using   System.Web.Services.Protocols;

[WebService(Namespace   =   "http://tempuri.org/ ")]
[WebServiceBinding(ConformsTo   =   WsiProfiles.BasicProfile1_1)]