首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

web service中的方法返回类型可以是void 吗?解决方案

2013-01-25 
web service中的方法返回类型可以是void 吗?可以吗可以吗?[解决办法]测试了一下,是完全可以的[WebService(

web service中的方法返回类型可以是void 吗?
可以吗可以吗?
[解决办法]
测试了一下,是完全可以的


[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{

    [WebMethod]
    public string HelloWorld(ref string hi)
    {
        hi = " I'm " + hi;
        return "Hello World. " + hi;
    }

    [WebMethod]
    public void HelloWorldVoidRef(ref string hi)
    {
        hi = "Void I'm " + hi;
    }

    [WebMethod]
    public void HelloWorldVoid()
    {
        // do something
    }
}


客户端使用添加服务引用的方式生成代理类,使用同步方法

[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
WpfApplication15.ServiceReference1.HelloWorldResponse WpfApplication15.ServiceReference1.WebService1Soap.HelloWorld(WpfApplication15.ServiceReference1.HelloWorldRequest request) {
    return base.Channel.HelloWorld(request);
}
        
public string HelloWorld(ref string hi) {
    WpfApplication15.ServiceReference1.HelloWorldRequest inValue = new WpfApplication15.ServiceReference1.HelloWorldRequest();
    inValue.Body = new WpfApplication15.ServiceReference1.HelloWorldRequestBody();
    inValue.Body.hi = hi;
    WpfApplication15.ServiceReference1.HelloWorldResponse retVal = ((WpfApplication15.ServiceReference1.WebService1Soap)(this)).HelloWorld(inValue);
    hi = retVal.Body.hi;
    return retVal.Body.HelloWorldResult;
}
        
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
WpfApplication15.ServiceReference1.HelloWorldVoidRefResponse WpfApplication15.ServiceReference1.WebService1Soap.HelloWorldVoidRef(WpfApplication15.ServiceReference1.HelloWorldVoidRefRequest request) {
    return base.Channel.HelloWorldVoidRef(request);
}
        
public void HelloWorldVoidRef(ref string hi) {
    WpfApplication15.ServiceReference1.HelloWorldVoidRefRequest inValue = new WpfApplication15.ServiceReference1.HelloWorldVoidRefRequest();
    inValue.Body = new WpfApplication15.ServiceReference1.HelloWorldVoidRefRequestBody();
    inValue.Body.hi = hi;
    WpfApplication15.ServiceReference1.HelloWorldVoidRefResponse retVal = ((WpfApplication15.ServiceReference1.WebService1Soap)(this)).HelloWorldVoidRef(inValue);
    hi = retVal.Body.hi;


}
        
public void HelloWorldVoid() {
    base.Channel.HelloWorldVoid();
}


看到最后一个 HelloWorldVoid() 比别人少生了一个 HelloWorldVoidResponse 类型,因为没有返回值,也没有ref参数。

调用代码,同步方法,没写try...catch

private void button1_Click(object sender, RoutedEventArgs e)
{
    ServiceReference1.WebService1SoapClient client = new ServiceReference1.WebService1SoapClient();
    string hi = "Bill Gates";
    MessageBox.Show( client.HelloWorld(ref hi) );
    MessageBox.Show(hi);

    hi = "Bill Gates";
    client.HelloWorldVoidRef(ref hi);
    MessageBox.Show(hi);

    client.HelloWorldVoid();
    MessageBox.Show("OK");
}


其实,让WebService 定义 void 方法也是可以理解的嘛,就像是返回 bool 或 int 一样嘛,关键是让 WebService 被调用了,干了它该干的事了,至于干完的结果要不要返回,这是业务定义上的事了,
而,WebService 方法在执行完了之后,客户端是会收到通知的,至于这个通知含不含返回值和ref 参数,则是另一回事了。 

热点排行