我在我的ASP.NET页面中添加了一些web methods,如下所示,以便在我的应用程序的客户端启用AJAX calls using jQuery:
public partial class MyPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Page load logic...
}
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static string MyWebMethod()
{
// web method logic...
}
}
但是,我注意到使用调试器我的Web方法正在与我的ASP.NET页面的AppDomain不同的AppDomain处理,因此它们中的每一个都有自己的一组静态变量,这导致我麻烦。
所以我想知道是否有可能在同一个AppDomain上托管WebMethods(或Web服务)和ASP.NET应用程序,使它们都可以访问同一组静态变量?
提前致谢!
编辑1
我正在IIS 7.0上托管我的应用
编辑2
由于Jupaol的回答清楚地表明可以在同一个appDomain上托管WebMethods和ASP.NET页面,不过这是我在运行更多测试后发现的:
如果我的jQuery.ajax调用设置了这样的URL:
$.ajax({
url: "/MyFolder/MyPage.aspx/MyWebMethod",
contentType: "application/json; charset=utf-8",
success: AjaxSuccess,
error: AjaxError
});
IIS在我的网站上创建了两个appDomains(同一个web site key),一个用于页面请求,另一个用于WebMethod请求。他们的FriendlyNames如下所示:
但是,如果jQuery.ajax调用URL设置如下:
$.ajax({
url: "MyPage.aspx/MyWebMethod",
contentType: "application/json; charset=utf-8",
success: AjaxSuccess,
error: AjaxError
});
只创建一个appDomain来同时处理这两个请求:
不幸的是我无法找到这种行为的解释,我唯一能想到的可能与此问题有关的是我的网站在某些页面上使用https而在其他页面上没有
答案 0 :(得分:3)
您确定要比较AppDomain的ID ???
我刚做了一个实验,他们属于同一个AppDomain
如果您在代码中明确创建AppDomain,那么情况并非总是如此。
示例:(我刚刚更新了一个旧例子,专注于AppDomain.CurrentDomain.Id
)
protected void Page_Load(object sender, EventArgs e)
{
this.lblMessage.Text += "AppDomain ID: " + AppDomain.CurrentDomain.Id.ToString() + "<br/>";
}
[WebMethod]
public static string Execute1()
{
JavaScriptSerializer j = new JavaScriptSerializer();
string r = string.Empty;
var o = Observable.Start(() =>
{
Thread.Sleep(2000);
r = "My Name1: " + DateTime.Now.ToString() + " Background thread: " + Thread.CurrentThread.ManagedThreadId.ToString();
}, Scheduler.NewThread);
o.First();
r += " Main thread: " + Thread.CurrentThread.ManagedThreadId.ToString();
r += " AppDomain ID: " + AppDomain.CurrentDomain.Id.ToString();
r = j.Serialize(new { res = r });
return r;
}