是否可以在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);
}
没有找到相关结果
已邀请:
3 个回复
很缴
哩翔购
请注意,这仅在每次为每个客户端进行一次呼叫时才有效。 选项2 您可以按原样保留类,但以不同方式使用WebMethod。如果从.Net生成的类调用,则会为这些事件提供
方法。基本上,您调用Method1开始请求方法并在执行完成时获得回调。您可能需要调整Web服务客户端类的超时参数,以使其工作。 选项3 您可以使用SixPack库的缓存功能轻松完成此操作! ;-) [评论后编辑]选项1中现在有两个静态字段,允许两个不同的实例,每个方法一个,如请求的那样。 [进一步说明后编辑]使用Session使调用成为有状态。 请参阅:http://msdn.microsoft.com/en-us/library/aa480509.aspx 还添加了选项3。
凸晴
更改为:
并在您的类上添加以下属性:
有关更多信息和示例,请参阅http://msdn.microsoft.com/en-us/library/system.servicemodel.sessionmode.aspx。