我添加了一个网站服务的网络参考,网址以 https 开头。并试图通过以下C#代码调用
testwebservices.BasicHttpBinding_GDataService webservice = new testwebservices.BasicHttpBinding_GDataService ();
Uri uri = new Uri(webservice.Url);
CredentialCache cache = new CredentialCache();
cache.Add(uri, "Negotiate", new NetworkCredential("username", "password", "domainName"));
webservice.Credentials = cache;
var response = webservice.GetMethods();
return response;
我收到以下错误
The request failed with HTTP status 401: Unauthorized.
我猜原因是“BasicHttpSecurityMode尚未设置为传输”(如果我添加为服务引用,则可能)。我找不到任何方法来设置它。或者这不可能实现?这是一个VS.Net 2005项目,
更新 我还添加了以下内容,但仍然有相同的错误
webservice.UseDefaultCredentials = true
var response = webservice.GetMethods();
工作版:以下代码开始起作用。感谢@ user469104
testwebservices.BasicHttpBinding_GDataService webservice = new testwebservices.BasicHttpBinding_GDataService ();
webservice.Credentials = new NetworkCredential("username", "password");
var response = webservice.GetMethods();
答案 0 :(得分:1)
您获得的错误与https本身无关。 401意味着无论通过服务器的任何凭证(如果有的话)都无权访问该服务。
我猜这是一个由IIS托管的网络服务?如果是这样,并且您可以控制它,请验证“集成身份验证”'已启用(我假设您正在尝试使用此功能,因为您指定了' negotiate')并确保您传递的是有效凭据。正如DJ KRAZE在评论中所说,如果您尝试传递域名凭据,请确保您也通过域名。