2012-01-19 9 views
1

Microsoftテクノロジに基づいていないhttp restエンドポイントで動作するWCFクライアントを作成しようとしています。私の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

私は間違って何をしていますか?

編集:

このだった最終作業溶液...あなたは拘束力はないRESTのSOAPバインディングでBasicHttpBindingを使用しているクライアント側で

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

答えて