我正在开发一个使用wcf webapi将其所有功能公开为Web服务的项目。然后我用各种视图消费这些(现在两个)。其中一个观点是一个遗留的asp.net 2.0项目,一旦这个新项目具有特征奇偶校验,最终将逐步淘汰。我试图通过向项目添加服务引用来使用这些服务,但无法使其工作,因为wcf api使用基本的http auth,我无法在向导中配置它。如何手动将服务引用添加到我的asp.net项目?
谢谢!
答案 0 :(得分:2)
使用WCF Web API时,不要使用服务引用,而是使用新的HttpClient,例如:
var client = new HttpClient();
var byteArray = Encoding.ASCII.GetBytes(userName + ":" + password);
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
var task = client.GetAsync("http://webapi/contact/1");
var contact = task.ContinueWith(
t => {
return t.Result.Content.ReadAsAsync<Contact>();
}).Unwrap().Result;
如果您需要使用.NET 2.0,您可以使用HttpWebRequest(HttpClient示例依赖于.NET 4.0,因为它是WCF Web API的一部分):
Uri myUri = new Uri("http://webapi/contact/1");
WebRequest myWebRequest = HttpWebRequest.Create(myUri);
HttpWebRequest myHttpWebRequest = (HttpWebRequest)myWebRequest;
NetworkCredential myNetworkCredential =
new NetworkCredential(username, password);
CredentialCache myCredentialCache = new CredentialCache();
myCredentialCache.Add(myUri, "Basic", myNetworkCredential);
myHttpWebRequest.PreAuthenticate = true;
myHttpWebRequest.Credentials = myCredentialCache;
WebResponse myWebResponse = myWebRequest.GetResponse();
Stream responseStream = myWebResponse.GetResponseStream();