.aspx(代码隐藏)中的w-s尝试设置cookie但不能?

时间:2011-12-02 00:26:50

标签: c# asp.net web-services http cookies

我有一个网络服务,'AHandyWebService'在.aspx(。strongpx.cs中的)内实现。

我正在尝试在调用Web服务时在客户端上设置cookie。

我不确定这是否只是本质上不可能,或者它是否与我完成它的方式有关。

因为实现w-s的方法是静态的,所以我必须实现一个'page'的本地实例,我不确定它是否应该如此。

方法如下:

[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
public static SomeObj AHandyWebService()
{
    SomeObj mySomeObj;
    try
    {
        mySomeObj = getSomeObj();
        System.Web.UI.Page p = new Page();
        HttpCookie appCookie = new HttpCookie("FOOAPP");
        appCookie.Value = String.Format("Written: {0:yyyy-MM-dd}", System.DateTime.Now.ToUniversalTime());
        appCookie.Expires = System.DateTime.Now.ToUniversalTime().AddMinutes(1);
        appCookie.Path = "/FOO";
        p.Response.Cookies.Add(appCookie);

    }
    catch (Exception ex)
    {
        throw;
    }

    return mySomeObj;

}

顺便说一下,这里没有跨域问题 - w-s是从与w-s消费页面相同的域提供的。

欢迎提出建议/意见。

1 个答案:

答案 0 :(得分:0)

好的,这有点令人尴尬。经过大量尝试不同的事情,我发现支持w-s的方法实际上并不是我认为的方法! ...因此没有提供饼干!

与此同时,在其他新闻中,我遇到了这个StackOverflow question,它为我提供了一种更安全的方法,可以从静态方法中访问Response对象,因此我已经实现了它,现在它可以正常运行

如果它有用,这里是现在工作方法的副本:

[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
public static SomeObj AHandyWebService()
{

    SomeObj mySomeObj;

    try
    {
        mySomeObj = getSomeObj();
        HttpCookie appCookie = new HttpCookie("FOOAPP");
        appCookie.Value = String.Format("Written: {0:yyyy-MM-dd}", System.DateTime.Now.ToUniversalTime());
        appCookie.Expires = System.DateTime.Now.ToUniversalTime().AddMinutes(1);
        appCookie.Path = HttpContext.Current.Request.ApplicationPath;
        HttpContext.Current.Response.Cookies.Add(appCookie);
    }
    catch (Exception ex)
    {
        throw;
    }
    return mySomeObj;
}