我现在是这样的:是否可以在C#中创建有状态的Web服务?
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
}
...
}
是否有可能让有状态的web服务,这样我可以重用SomeObj so
并调用同一个对象的方法?
因此,将使用此服务的客户端将首先调用web方法,该方法将创建so
对象并返回一些ID。 然后在随后的调用中,Web服务将根据ID重用相同的so
对象。
编辑
这里是我的实际代码:
[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);
}
你可以存储在缓存中的所有对象或有什么限制吗? 我的对象包含与各种计算机的打开WMI连接。 – Primoz 2010-11-07 13:10:48
默认情况下,缓存存储在内存中,如果您开始在低内存上运行,它将自动被驱逐。所以是的,你可以随心所欲地存储,但你应该经常检查对象是否在缓存中,并且永远不要因为存储它而依赖它。 – 2010-11-07 13:13:00
@Darin Dimitrov,你应该通过使用锁来使你的解决方案类型安全。当一个请求正在执行“result = action();”行,这需要时间,任何其他请求也会看到缓存为空,并重复相同的“result = action();”线。见http://en.wikipedia.org/wiki/Double-checked_locking – Sklivvz 2010-11-07 13:22:25