WebClient Lost My Session - PullRequest
       4

WebClient Lost My Session

1 голос
/ 27 декабря 2010

У меня проблема, прежде всего, посмотрите на мой метод веб-службы:

[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;
}

Как вы можете видеть, что мой метод веб-службы читает и буферизирует страницу с его локального хоста, он работает, и я использую его для добавления некоторых функций ajax на мой веб-сайт, он работает нормально, но моя проблема в том, что Client.DownloadString (..) потерял весь сеанс потому что мои сеансы все нулевые, которые связаны с этой страницей для более подробного описания. при загрузке страницы на странице, которую я хочу загрузить из моего веб-сервиса, я устанавливаю сессию:

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

но когда я нажимаю кнопку на странице, этот сеанс становится пустым, я имею в виду, что сеанс не может быть передан.

Как я могу решить эту проблему? мой веб-сервис обрабатывается с помощью некоторого кода 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
});

Веб-клиент приводит к потере сеанса, и файлы .js не могут работать, как я могу использовать другую вещь вместо веб-клиента с тем же практическим приложением?

1 Ответ

0 голосов
/ 27 декабря 2010

Вам необходимо включить сеанс (используя WebMethodAttribute.EnableSession), измените это:

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

Кому:

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

Редактировать : Извините, не видел, что вы используете WebClient. Это не будет работать, потому что WebClient работает на стороне сервера и поэтому использует сеанс, отличный от пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...