WebClient丢失了我的会话

时间:2010-12-27 06:49:15

标签: c# asp.net jquery web-services session

我有一个问题首先看看我的网络服务方法:

[WebMethod(EnableSession = true), ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetPageContent(string VirtualPath)
{
    WebClient client = new WebClient();
    string content=string.Empty;
    client.Encoding = System.Text.Encoding.UTF8;
    try
    {
        if (VirtualPath.IndexOf("______") > 0)
            content = client.DownloadString(HttpContext.Current.Request.UrlReferrer.AbsoluteUri.Replace("Main.aspx", VirtualPath.Replace("__", ".")));
        else content = client.DownloadString(HttpContext.Current.Request.UrlReferrer.AbsoluteUri.Replace("Main.aspx", VirtualPath));
    }
    catch { content = "Not Found"; }
    return content;
}

正如你可以看到我的web服务方法读取和缓冲页面从它的localhost它工作,我用它来添加一些ajax功能到我的网站它工作正常但我的问题是Client.DownloadString(..)丢失所有会话因为我的会话都是空的,与此页面相关以获得更多描述。在我想要从我的Web服务加载的页面加载页面我设置会话:

HttpContext.Current.Session[E_ShopData.Constants.SessionKey_ItemList] = result;

但是当我单击页面中的一个按钮时,此会话为空,我的意思是它无法传输会话。

我如何解决这个问题? 我的Web服务由一些jquery代码处理,如下所示:

$.ajax({ type: "Post",
    url: "Services/NewE_ShopServices.asmx" + "/" + "GetPageContent",
    data: "{" + "VirtualPath" + ":" + mp + "}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    complete: hideBlocker,
    success: LoadAjaxSucceeded,
    async: true,
    cache: false,
    error: AjaxFailed
});

Web客户端导致丢失会话而.js文件无法运行我如何使用其他东西代替具有相同实际应用程序的Web客户端?

1 个答案:

答案 0 :(得分:0)

您需要启用会话(使用WebMethodAttribute.EnableSession),更改此内容:

[WebMethod(), ScriptMethod(ResponseFormat = ResponseFormat.Json)]

要:

[WebMethod(EnableSession = true), ScriptMethod(ResponseFormat = ResponseFormat.Json)]

编辑:抱歉,没有看到您使用的是WebClient。 这不起作用,因为WebClient运行服务器端,因此使用来自用户的不同会话。