-2

我添加了一个 Web 服务的Web 引用,该 Web 服务的 url 以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();
4

1 回答 1

1

您收到的错误与 https 本身无关。401 意味着任何通过服务器的凭据(如果有)都无权访问该服务。

我猜这是由 IIS 托管的 Web 服务?如果是这样,并且您可以控制它,请验证是否启用了“集成身份验证”(我假设这是您尝试使用的,因为您指定了“协商”)并确保您传递了有效的凭据。正如 DJ KRAZE 在他的评论中所说,如果您尝试传递域凭据,请确保您也传递了域。

于 2014-08-18T16:28:14.143 回答