我知道有人问过这个问题的变体,但我已经尝试了所有建议的解决方案,但都无济于事。我们正在尝试连接到使用基本身份验证和传输安全性的 WCF 服务(不幸的是,这些事情无法更改)。我一直无法找到一种方法将我们的凭据添加到 WCF 调用中的 TRANSPORT;所有解决方案似乎都是围绕向消息添加 header 。
我们最新的尝试是使用附有凭据的 HttpWebClient 从服务器获取文本文件,然后进行 WCF 调用;我们希望身份验证会...我不知道,从 HttpWebClient 跳转到 WCF 客户端(使用服务引用生成)。虽然第一个调用确实有效,但我们在 WCF 调用上收到了 CommunicationException(如果我深入研究响应,状态描述设置为未授权)。
有没有办法让客户端共享从成功尝试返回的授权 token ?这是傻瓜的差事吗?有没有更简单的方法来做到这一点,我也看不见?
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("https://server/OGTE/api/WinPhone7.html"));
request.Credentials = new NetworkCredential(_userName, _password, _domain);
request.Method = "GET";
request.BeginGetResponse((beginGetResponseResult) =>
{
try
{
HttpWebRequest requestWhileResponding = (HttpWebRequest)beginGetResponseResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)requestWhileResponding.EndGetResponse(beginGetResponseResult);
try
{
using (StreamReader streamReader1 = new StreamReader(response.GetResponseStream()))
{
string info = streamReader1.ReadToEnd();
Dispatcher.BeginInvoke(() =>
{
textblock.Text = info;
});
}
_userDataService.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(_userDataService_GetDataCompleted);
_userDataService.GetDataAsync("0C5696BB-2D15-4EA7-B198-5C12B3E23B63");
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
},
request);
}
最佳答案
另一种解决方案可以让您在调用 REST 服务时更轻松,使用 RestSharp .他们有一个 HttpBasicAuthenticator,你也可以创建自己的验证器。它还可以更轻松地为 REST 资源构建 uris。 这是一个 blog post关于针对 WCF REST 服务进行身份验证。您可以看到使用 RestSharp 的客户端示例代码
关于wcf - 在 Windows Phone 7 上使用基于 SSL 的基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4146745/