回 帖 发 新 帖 刷新版面

主题:求助:初学web服务,关于设置字段值的问题

我在vs 2005中创建了一个asp.net web service,代码如下:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    private string id;

    public Service () {

        //如果使用设计的组件,请取消注释以下行 
        //InitializeComponent(); 
    }

    [WebMethod]
    public void SetID(string id)
    {
        this.id = id;
    }

    [WebMethod]
    public string GetID()
    {
        return id;
    }
    
}

可为什么我在调用SetID("abc")后,用GetID获得的仍是null?调用的程序如下:
static void Main(string[] args)
        {
            Service s = new Service();
            s.SetID("abc");
            Console.WriteLine(s.GetID()==null);
            Console.ReadLine();
          
        }

回复列表 (共4个回复)

沙发

Service s = new Service();
得到的是客户端的实例。

而你每次调用Web服务,服务器端的实例是不同的。
你应该将服务器端的
private string id;
改为静态的

板凳

那就是说,所有的非静态变量都是在客户端产生的,但所有的非静态变量是在服务器端产生的,而且每一个请求这个服务的客户端都在服务器端对应着不同的静态id变量。不知道我的理解是不是正确的?

3 楼

是服务器会为每个客户端的请求生成一个实例,每次创建实例,非静态字段都会恢复默认值

4 楼

那静态字段是为每个客户端都分配一套,还是为所有的客户端都分配同一套?

我来回复

您尚未登录,请登录后再回复。点此登录或注册