我正在尝试创建一个WCF客户端,该客户端使用的不是基于Microsoft技术的http休息端点。我的WCF-foo是相当薄弱的,所以我不明白我在做什么错误......我已经创建了一个看起来像这样的服务合同......WCF与其他服务的互操作性,内容类型为text/html
[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个字节的响应为:......
现在,如果我只是尝试,并从Web浏览器访问这个(用不同的凭据),我得到的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;
}
}