我担心这很明显,但有人会介意确认WebServices的私有字段是线程安全的吗?具体地,
1)在下面的代码中,每个线程都将获得ReportService类的新实例
protected void Page_Load(object sender, EventArgs e)
{
// Client side scripting
ScriptManager scriptManager = ScriptManager.GetCurrent(this);
scriptManager.Services.Add(new ServiceReference("~/WebServices/ReportService.asmx"));
}
2)由于(1),“ReportService”中的每个WebMethod都可以安全地操作和引用私有字段,如下所示:
[System.Web.Script.Services.ScriptService]
public class ReportService : : System.Web.Services.WebService
{
private string _protocol = null;
private string _reportType = null;
[WebMethod]
public string GetReport(string protocol, string reportType, string reportId)
{
_protocol = protocol;
_reportType = reportType;
return GetCustomReport(reportId);
}
}
为了说明的目的,上面的方法是愚蠢的。 MSDN上有一个使用私有字段的示例,但私有字段_xmlStr未被操作,导致线程安全问题模糊不清。
http://msdn.microsoft.com/en-us/library/bb398995.aspx
谢谢,
- 布雷特
答案 0 :(得分:1)
是的,这是线程安全的,但我建议您避免在Web服务中使用私有字段。只需将protocol
和reportType
参数添加到GetCustomReport
方法即可。这样您就不再需要这些字段了。