可移植类库 - 无法在服务引用上使用Windows身份验证

时间:2013-12-20 11:20:27

标签: c# web-services portable-class-library dotnet-httpclient service-reference

我正在尝试使用可移植类库连接到需要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);
}

此方法的问题在于它需要基本身份验证,因此不适用于我当前的要求

  • Microsoft.Net.Http

我发现这个库实际上允许我使用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;
}
  • 尝试在服务参考上设置NetworkCredentials

没有明显的方法可以做到,而且似乎无法做到


我非常感谢这个主题的帮助,并提前感谢您查看我的问题!

0 个答案:

没有答案