【问题标题】:Way to keep the variable in the WebService without it resetting?如何在不重置的情况下将变量保留在 WebService 中?
【发布时间】:2015-11-05 09:01:55
【问题描述】:

我在 Web 服务中有一个字符串变量,它不在 [WebMethod] 中。

string emailAddress;

我用它来存储一个电子邮件地址,这很好,但是当我从 Web 服务返回网站,然后我回到 Web 服务,使用该变量时,我认为我更改的变量有被重置为无的原始值。有没有办法解决这个问题。

附:我对 WebService 很陌生,这是我第一次尝试使用它。

感谢

【问题讨论】:

  • 您能否确认该电子邮件是否是第一个网络方法的输入字段?你能解释一下有多少用户会同时使用这个网络方法吗?
  • 并包含有关您的 Web 服务的更多信息,例如包含 web.config 文件,以便人们了解它应该如何工作。
  • 电子邮件来自一个 txtbox,该 txtbox 已从网站传递到登录 [web 方法]。在那个方法中,我给变量赋值。一次只有一个用户会使用它。

标签: c# web-services


【解决方案1】:

Web 服务方法应被视为静态方法。这意味着它不会保留任何状态信息。即设置字段值。

如果情况是 1 个用户将使用 web 服务,那么保留该值的最简单方法是将变量设为静态,如下所示:

static string emailAddress;

但是,如果更多用户将使用 Web 服务,则此解决方案将不适合您。您可能需要考虑以下提供的内容:

// web service class
private static Dictionary<Guid, SessionObject> UserSessions = new Dictionary<Guid, SessionObject>();
private static object SessionLock = new object();

// session initialize method:
[WebMethod]
public Guid CreateNewUserSession()
{
     SessionObject userobject = new SessionObject();
     Guid SessionGuid = Guid.New();
     lock(SessionLock)
     {
         UserSessions.Add(SessionGuid, userobject);
     }
     return SessionGuid;
}

// set the email address    
[WebMethod]
public bool SetSessionEmail(Guid SessionGuid, string emailaddress)
{
     SessionObject temp;
     Lock(SessionLock)
     {
         if(!UserSessions.TryGetValue(SessionGuid, out temp))
         {
              return false;
         }
     }
     temp.EmailAddress = emailaddress;
     return true;
}

// sessionobject 
public class SessionObject
{
     public string EmailAddress {get; set;}
}

仅当 web 服务非常基础时,给定的示例才有效。即,它没有刷新或重新启动很多,并且它不是多个 Web 服务的一部分,其中每个 Web 调用都分配了一个随机 Web 服务。对于简单的功能,这应该可以工作。对于更复杂的功能,您应该考虑将任何会话存储在数据库中

阅读 app pool recycle 可能有助于理解 Web 服务

【讨论】:

  • 这个问题是任何工作进程重启都会删除所有会话。
  • 工作进程通常在设定的时间重新启动,默认情况下我认为每 29 小时重新启动一次。假设这被设置在像午夜这样的固定时间,重置应该不会干扰
  • 那些是特殊情况
  • 部署很常见。你的方法基本没问题,我并不反对。只是 大多数 用例无法接受它。顺便说一句,这也需要会话到机器的亲和力,这也可能会破坏交易。
  • 你能详细说明你的意思吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
相关资源
最近更新 更多