没有进入'有状态服务是坏'讨论......你如何创建一个?
由于缺乏有用的搜索结果..似乎我正在寻找错误的条款或者它正在积极劝阻。我能找到的最佳链接是this one on MSDN
简要介绍我当前应用的外观。Rails Web App => ASP.Net Xml webservice => Legacy C#/C++ code
到目前为止一切顺利。现在事实证明,当我向WebMethod发出第一个请求时,它需要启动一些在每次调用时创建use-dispose都很昂贵的进程/资源。所以我正在考虑重复使用这些资源。
首先,我尝试将它们变成成员变量 - 只是为了让每个请求都由MyWebService
类的新实例提供服务,并在另一个线程上提供服务。
链接表明这样做的方法是
问题:
我的Web服务类看起来像这样..
[WebService(Namespace = "http://Walkthrough/XmlWebServices/",
Description="A temperature conversion xml web service")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class TemperatureConverter : System.Web.Services.WebService, IDisposable
{
[WebMethod(Description = "This method converts celsius to fahrenheit")]
public double convert_fahrenheit_to_celsius(double temp_in_fahrenheit)
{
/// code
}
}
更新 我还在努力学习Q#2。有一些奇怪的行为
protected void Application_Start(object sender, EventArgs e) // global.asax.cs
{
Application["UserName"] = "Gishu";
}
myWebMethod // MyWebService.cs
{
if (Application["myKey"] == null)
LoadHeavyObjectsAndCacheKeys(); // set Application["myKey"] between Application.Lock() Unlock() calls.
...
}
“UserName”键写入成功 - 它存在于散列中。但是,我在Web方法中编写的键值对不能在当前的Web请求中存活。在下一个请求中,哈希表仍然只有一个项目 - “UserName”。由于这是ApplicationState,我假设我没有必要将EnableSession属性设置为true。
答案 0 :(得分:1)
是的,您应该对每个会话数据使用Session
状态,对应用程序范围的数据使用Application
状态。
您的网络服务操作需要具有[WebMethod(EnableSession=true)]
属性。