好的,我们已经坚持了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();
}
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服务在同一台机器上)给出:
当我们不使用cookieless模式或使用sessioneabled = false时,两者都能正常工作。但这不是我们所需要的 我还应该提到我们使用IIS 6.0& .NET 4.0。 最后一件事 - 如果我们直接转到Web服务链接(使用浏览器),它可以工作但返回XML(而不是json)。
关于如何使用cookieless = true 和 EnableSession = true的任何建议将非常赞赏。
谢谢。
答案 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网站上我无法找到这个场景...上面的页面是我唯一能找到的,有一个正常工作的代码示例...
富