调用https Web服务方法

时间:2014-08-18 15:53:12

标签: c# web-services visual-studio-2005 web-reference credentialscache

我添加了一个网站服务的网络参考,网址以 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();

1 个答案:

答案 0 :(得分:1)

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

我猜这是一个由IIS托管的网络服务?如果是这样,并且您可以控制它,请验证“集成身份验证”'已启用(我假设您正在尝试使用此功能,因为您指定了' negotiate')并确保您传递的是有效凭据。正如DJ KRAZE在评论中所说,如果您尝试传递域名凭据,请确保您也通过域名。