none
怎样获得重载后返回的数据? RRS feed

  • 问题

  • 服务端:
            [WebMethod]
            public string test()
            {
                 return "ok";
            }

    SL端:
    string aa()
           {   
                string value = null;

                sunWeb.WebService1SoapClient ss = new sunWeb.WebService1SoapClient();
                ss.testAsync();
                //            ss.select_Completed += new EventHandler<Sunpro.sunWeb.testCompletedEventArgs>(ss_aa);

               return value;
            }

    问题是:

         当调用aa()时怎样让aa()返回"ok"  ?


    大家一般是用什么办法的?

    2009年11月27日 23:11

答案

  • 异步编写模式,明显同步执行不一样。增加了编程的复杂度。
    只能使用事件触发方式。而不能直接返回,SL采用这种异步方式,主要是防止远程调用时间过长,导致SL程序挂起。

    如果一定要这样的话,就要调用后阻塞到返回结果为止。不过一般是不推荐的。

    2009年12月1日 3:09

全部回复

  • 怎么会没人应对,这个问题应该大家都会碰到的呀,是我表达不清吗?

    2009年11月28日 10:57
  • 参见

    http://dotnet.aspx.cc/article/2fde980d-d8d9-485d-ae5d-20246d5f7207/read.aspx


    【孟子E章】
    2009年11月29日 7:35
    版主
  • 我遇到和你一样的问题。但经过反复研究试验,也解决不了。
    1)因为SL不支持同步模式,所以 aa 函数没办法直接返回服务器端的结果。只有通过事件来处理。
    2)如果你使用XmlHttp的同步模式来访问服务器端,实现你那个aa函数是完全可以的。
    ---------------------
    3)异步模式确实会给我们的程序逻辑搞得异常复杂。我是希望微软的SL也提供同步模式。
    ----------------------
    如果楼主能够很好地实现你的aa函数(注:不允许使用XmlHttp的同步模式访问服务器,因为我们既然用SL,就不要去用浏览器的对象,省得脱离浏览器运行时你的SL程序转不了)。请通知一声。


    2009年11月30日 10:22
  • 异步编写模式,明显同步执行不一样。增加了编程的复杂度。
    只能使用事件触发方式。而不能直接返回,SL采用这种异步方式,主要是防止远程调用时间过长,导致SL程序挂起。

    如果一定要这样的话,就要调用后阻塞到返回结果为止。不过一般是不推荐的。

    2009年12月1日 3:09
  • 1)关键是如何阻塞?能否给个例子?
    2)如果SL提供诸如DoEvents之类的函数,阻塞就好办。可是SL就是不提供,我真不知道如何阻塞。注:如果你打算设一个标志,做一个循环在那里等待,我可以告诉你,那将是一个死循环,你试验试验就知道了。
    3)我不知道你是否试验过如何阻塞SL的线程?
    4)我是研究了半天也办法实现那个aa函数。
    5)实现aa函数这种情况,如果是做着玩玩的程序,可能不需要,但在真正的应用开发中,非常需要!!!
    6)阻塞的思路似乎很好,但是不一定能在SL中实现(标准的.net很容易实现,SL的我办不到),希望能够实现aa函数类似的代码贴出来,让大家参考。
    2009年12月1日 5:48