会话启用和cookieless与身份验证有什么关系?

时间:2010-09-19 17:20:33

标签: web-services

好的,我们已经坚持了2天,并且还没有线索。

我们有.asmx网络服务(配置为cookieless =“true”):   

    [WebMethod(EnableSession =true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string SimplestWebService()
    {
        return "Simplest web service works";
    }

我们尝试从两个:c#form application中调用它,如下所示:


 private void button1_Click(object sender, EventArgs e)
        {
            string url = "http://192.168.5.223:8989/MyAPI.asmx/SimplestWebService";
            HttpWebRequest req = (HttpWebRequest) WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/json; charset=utf-8";
            req.UseDefaultCredentials = true;
            req.PreAuthenticate = false;
            req.ContentLength = 0;
            var result = new StringBuilder();
            using (HttpWebResponse res = (HttpWebResponse) req.GetResponse())
            {
                StreamReader sr = new StreamReader(res.GetResponseStream());
                result.Append(sr.ReadToEnd());
            }
            label1.Text = result.ToString();
        }

还有Jquery,就像这样:

 function simplestMethod() {
var callParams = "{}" $.ajax({ type: "POST", url: "http://192.168.5.223:8989/MyAPI.asmx/SimplestWebService", data: callParams, contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { alert(data.d); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("Error Occured!" + " | " + XMLHttpRequest.responseText + " | " + textStatus + " | " + errorThrown); } }); }

Forms应用程序产生以下错误:
远程服务器返回错误:(401)未经授权。
但是当删除contentType行时 - 返回有效的输出 - 但是在XML中(而不是json ...这很明显)。

Jquery(与Web服务在同一台机器上)给出:
alt text

当我们不使用cookieless模式或使用sessioneabled = false时,两者都能正常工作。但这不是我们所需要的 我还应该提到我们使用IIS 6.0& .NET 4.0。 最后一件事 - 如果我们直接转到Web服务链接(使用浏览器),它可以工作但返回XML(而不是json)。

关于如何使用cookieless = true EnableSession = true的任何建议将非常赞赏。

谢谢。

1 个答案:

答案 0 :(得分:0)

我在找到一些代码后得到了这个:

http://ardentdev.com/cookieless-session-with-aspnet-ajax-and-web-services/

更具体地说,以下调用对我有用,因为我无法得到我在页面中看到的第一个为我工作的例子。它通过URL中的SessionId正确生成服务的URL,因此服务器可以正确地查找您的会话......

Sys.Net.WebServiceProxy.invoke('WebService.asmx','HelloWorld',false,{},SucceededCallback,null,“User Context”,1000000);

有关此电话的信息,请访问:http://msdn.microsoft.com/en-us/library/bb383814.aspx

令人遗憾的是,在MSDN网站上我无法找到这个场景...上​​面的页面是我唯一能找到的,有一个正常工作的代码示例...