Я пытаюсь создать клиент WCF, который работает с конечной точкой отдыха http, не основанной на технологиях Microsoft.Мой WCF-foo довольно слабый, поэтому я не понимаю, что делаю неправильно ... Я создал сервисный контракт, который выглядит следующим образом ...
[ServiceContract]
public interface IFilters
{
[OperationContract]
[WebGet(UriTemplate = "/api/filter.getavailable.xml?api_user={username}&api_key={password}")]
String GetAvailableFilters(String username, String password);
}
Который я пытаюсь запуститьвот так ...
public String Run(String username, String password)
{
var binding = new BasicHttpBinding();
binding.MessageEncoding = WSMessageEncoding.Text;
binding.Security.Mode = BasicHttpSecurityMode.Transport;
var endpointAddress = new EndpointAddress("https://sendgrid.com");
IFilters proxy = ChannelFactory<IFilters>.CreateChannel(binding, endpointAddress);
var result = "";
using (proxy as IDisposable)
{
result = proxy.GetAvailableFilters(username, password);
}
return result;
}
Когда я запускаю этот код, я получаю исключение, которое говорит ...
Тип содержимого text / html;charset = utf-8 ответного сообщения не соответствует типу содержимого привязки (text / xml; charset = utf-8).При использовании пользовательского кодировщика убедитесь, что метод IsContentTypeSupported реализован правильно.Первые 1024 байта ответа были: ...
Теперь, если я просто попытаюсь получить доступ к нему из веб-браузера (с другими учетными данными), я получу искомый документ xml... https://sendgrid.com/api/filter.getavailable.xml?api_user=foo&api_key=bar
что я делаю неправильно?
Редактировать:
Это было окончательное рабочее решение ...
public Filters Run(String username, String password)
{
var binding = new WebHttpBinding(WebHttpSecurityMode.Transport);
var endpointAddress = new EndpointAddress("https://sendgrid.com");
var factory = new ChannelFactory<IFilters>(binding, endpointAddress);
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
var proxy = factory.CreateChannel();
using (proxy as IDisposable)
{
var results = proxy.GetAvailableFilters(username, password);
return results;
}
}