2

我正在 VS 2010 中创建一个 C# Web 服务,以将数据从另一个软件程序传递给服务使用者。由于过于复杂而无法在此详述的原因,我正在编写的 Web 服务应该在会话期间跟踪一些信息。该数据与其他软件程序相关联。我已将信息作为成员变量放在 WebService 类中。我在另一个程序中创建了 Webservice 类的对象,并保留了这些对象。不幸的是,Webservice 对象中的数据不会持续超出当前函数的范围。这是我所拥有的:

/* the Web service class */
public class Service1 : System.Web.Services.WebService
{
    protected string _softwareID;
    protected ArrayList _softwareList;

    public Service1()
    {
        _softwareID= "";
        _softwareList = new ArrayList();
    }

    [WebMethod]
    public int WebServiceCall(int request)
    {
        _softwareID = request;
        _softwareList.Add(request.ToString());
        return 1;
    }

    /* other Web methods */
}

/* the form in the application that will call the Web service */
public partial class MainForm : Form
{
    /* the service object */
    protected Service1 _service;

    public MainForm()
    {
        InitializeComponent();
        _service = null;
    }

    private void startSoftware_Click(object sender, EventArgs e)
    {
        //initializing the service object
        _service = new Service1();
        int results = _service.WebServiceCall(15);
        /* etc., etc. */
    }

    private void doSomethingElse_Click(object sender, EventArgs e)
    {
        if (_service == null)
        {
            /* blah, blah, blah */
            return;
        }
        //The value of service is not null
        //However, the value of _softwareID will be a blank string
        //and _softwareList will be an empty list
        //It is as if the _service object is being re-initialized
        bool retVal = _service.DoSomethingDifferent();
    }
}

我可以做些什么来解决这个问题或采取不同的方法来解决它?提前感谢任何提供帮助的人。我是创建 Web 服务的新人。

4

1 回答 1

2

假设您正在调用 WebService,Service1将在每次调用期间使用默认构造函数进行初始化。这是设计的一部分。

如果您需要在方法调用之间持久化数据,则需要以某种方式持久化它,而不是更新类。

有几种方法可以做到这一点,哪种方法最好取决于您的需求:

  • 数据库,可能是最安全的并提供永久持久性
  • 带有传递给每个调用的键的静态字典,或使用 IP 地址作为键
  • HTTP Session 对象(我不确定它如何与 WebServices 交互)
于 2013-05-30T20:22:22.120 回答