J'ai maintenant quelque chose comme ceci:Est-il possible de créer un service Web statefull en C#?
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string Method1()
{
SomeObj so = SomeClass.GetSomeObj(); //this executes very long time, 50s and more
return so.Method1(); //this exetus in a moment
}
[WebMethod]
public string Method2()
{
SomeObj so = SomeClass.GetSomeObj(); //this executes very long time, 50s and more
return so.Method2(); //this exetus in a moment
}
...
}
Est-il possible de rendre le service Web statefull afin que je puisse réutiliser SomeObj so
et juste appeler des méthodes sur le même objet?
Ainsi, le client qui utilisera ce service appellera d'abord une méthode web qui créerait un objet so
et renverrait un identifiant. Ensuite, lors des appels suivants, le service Web réutilisera le même objet so
en fonction de l'ID.
EDIT
Voici mon code actuel:
[WebMethod]
public List<ProcInfo> GetProcessList(string domain, string machineName)
{
string userName = "...";
string password = "...";
TaskManager tm = new TaskManager(userName, password, domain, machineName);
return tm.GetRunningProcesses();
}
[WebMethod]
public bool KillProcess(string domain, string machineName, string processName)
{
string userName = "...";
string password = "...";
(new TaskManager(userName, password, domain, machineName);).KillProcess(processName);
}
Pouvez-vous stocker tous les objets dans le cache ou il y a des limites? Mes objets incluent des connexions WMI ouvertes à divers ordinateurs. – Primoz
Par défaut, le cache est stocké en mémoire et si vous commencez à fonctionner avec peu de mémoire, il sera automatiquement expulsé. Alors oui, vous pouvez stocker autant que vous le souhaitez mais vous devez toujours vérifier que l'objet est dans le cache et ne jamais compter sur lui étant là parce que vous l'avez stocké. –
@Darin Dimitrov, vous devez sécuriser votre solution en utilisant un verrou. Tandis qu'une requête exécute le "result = action()" line, qui prend du temps, toute autre requête verra également le cache comme étant nul et répétera le même "result = action();" ligne. Voir http://en.wikipedia.org/wiki/Double-checked_locking – Sklivvz