tôi có bây giờ cái gì đó như thế này:Có thể tạo dịch vụ web đầy đủ trong C# không?
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
}
...
}
Có thể làm cho dịch vụ web statefull để tôi có thể tái sử dụng SomeObj so
và chỉ cần gọi phương pháp trên cùng một đối tượng?
Vì vậy, khách hàng sẽ sử dụng dịch vụ này trước tiên sẽ gọi phương thức web sẽ tạo đối tượng so
và trả lại một số ID. Và sau đó trong các cuộc gọi tiếp theo, dịch vụ web sẽ tái sử dụng cùng một đối tượng so
dựa trên ID.
EDIT
Đây là mã thực tế của tôi:
[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);
}
Bạn có thể lưu trữ tất cả đối tượng trong bộ nhớ cache hoặc có bất kỳ hạn chế? Các đối tượng của tôi bao gồm các kết nối WMI mở tới các máy tính khác nhau. – Primoz
Theo mặc định bộ nhớ cache được lưu trữ trong bộ nhớ và nếu bạn bắt đầu chạy trên bộ nhớ thấp, bộ nhớ sẽ tự động bị xóa. Vì vậy, có, bạn có thể lưu trữ nhiều như bạn muốn nhưng bạn nên luôn luôn kiểm tra xem đối tượng có trong bộ nhớ cache và không bao giờ dựa vào nó đang ở đó bởi vì bạn đã lưu trữ nó. –
@ Dimitrov, bạn nên làm cho giải pháp của bạn loại an toàn bằng cách sử dụng một khóa. Trong khi một yêu cầu đang thực thi "result = action();" dòng, cần có thời gian, bất kỳ yêu cầu nào khác cũng sẽ thấy bộ nhớ cache là rỗng và lặp lại cùng một "result = action();" hàng. Xem http://en.wikipedia.org/wiki/Double-checked_locking – Sklivvz