2012-01-19 29 views
1

我正在嘗試創建一個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; 
     } 
    } 

回答