вызов службы wcf webapi с базовой аутентификацией из проекта asp.net 2.0 - PullRequest
1 голос
/ 22 декабря 2011

Я работаю над проектом, который использует wcf webapi для предоставления всей своей функциональности в качестве веб-сервисов. Я тогда потребляю их с различными взглядами (хорошо два пока). Одним из таких представлений является унаследованный проект asp.net 2.0, который в конечном итоге будет прекращен, как только этот новый проект получит паритет функций. Я пытаюсь использовать эти сервисы, добавляя сервисную ссылку в проект, но не могу заставить его работать, потому что API wcf использует базовую аутентификацию http, и я не могу настроить это в мастере. Как вручную добавить сервисную ссылку в мой проект asp.net?

Спасибо!

1 Ответ

2 голосов
/ 22 декабря 2011

При работе с WCF Web API вы не используете ссылки на службы, а вместо этого новый HttpClient, например ::100100

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, поскольку он является частью веб-API WCF):

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();
...