我正在尝试使用可移植类库连接到需要Windows身份验证的WebService。 我环顾四周,但到目前为止,我仍然没有找到办法做到这一点。
以下是我已经尝试过的内容:
标头上的基本身份验证
WPService.WPTestSoapClient myclient = new WPService.WPTestSoapClient();
myclient.WP2_GetEncomendasClienteCompleted += myclient_WP2_GetEncomendasClienteCompleted;
using (OperationContextScope contextScope = new OperationContextScope(myclient.InnerChannel))
{
HttpRequestMessageProperty reqMessage = new HttpRequestMessageProperty();
reqMessage.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes("Domain\\User:Password"));
OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, reqMessage);
myclient.WP2_GetEncomendasClienteAsync(cliente.Id);
}
此方法的问题在于它需要基本身份验证,因此不适用于我当前的要求
我发现这个库实际上允许我使用NetworkCredentials并成功验证服务。 问题是,我不知道如何使用它,因为当我调用代码时它默认返回Webservice的定义(xml文件),我没有找到任何地方如何使用它来调用方法给定的Web服务。
到目前为止,我所做的代码是:
var credentials = new NetworkCredential("user", "password", "domain");
var handler = new HttpClientHandler { Credentials = credentials };
using (var httpClient = new HttpClient(handler))
{
var content = new FormUrlEncodedContent(new[] {new KeyValuePair<string, string>("", "")});
content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
var response = await httpClient.PostAsync("http://ServiceURL", content);
var responseBodyAsText = await response.Content.ReadAsStringAsync();
return responseBodyAsText;
}
没有明显的方法可以做到,而且似乎无法做到
我非常感谢这个主题的帮助,并提前感谢您查看我的问题!