1

我正在尝试创建一个 WCF 客户端,该客户端使用不基于 Microsoft 技术的 http rest 端点运行。我的 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 个字节是:...

现在,如果我只是尝试从 Web 浏览器(使用不同的凭据)访问它,我会得到我正在寻找的 xml 文档... https://sendgrid.com/api/filter.getavailable.xml?api_user=foo&api_key =酒吧

我做错了什么?

编辑:

这是最终的工作解决方案......

    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;
        }
    }
4

1 回答 1

2

在客户端,您使用的是 BasicHttpBinding,它是 SOAP 绑定而不是 REST 绑定。您应该尝试改用 WebClient 类

http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx

或 WebChannelFactory

http://msdn.microsoft.com/en-us/library/bb908674.aspx

于 2012-01-19T20:18:21.137 回答