2011-09-29 226 views
1

我一直在寻找无处不在,似乎没有任何工作。C#REST客户端示例?

我试图连接到我的REST(WCF)服务。它在Firefox中使用以下工作正常:

http://localhost:1337/WCF.IService.svc/rest/Services?CostCentreNo=1&Filter=1 

其中rest是端点地址; Services?CostCentreNo=1&Filter=1是带参数的模板

以下是服务器合同点。

[OperationContract] 
    [WebGet(UriTemplate = "/Services?CostCentreNo={CostCentreNo}&Filter={Filter}")] 
    List<Services> GetServices(Int32 CostCentreNo, Int32 Filter); 

我能连接到该请从C#的工作示例...

+2

创建一个客户端应用程序并添加服务参考? –

+0

您是否尝试过[消费WCF服务](http://msdn.microsoft.com/en-us/library/bb332338.aspx#msdnwcfhc_topic6) – Danny

+0

只要知道我只知道(我只是再次检查) 。我想测试REST的作品。 – Doomsknight

回答

2

尝试此JSON:

String resonse = String.Empty; 
HttpClient client = new HttpClient(); 

using (HttpResponseMessage httpResponse = client.Get("your_uri")) 
{ 
    response = httpResponse.Content.ReadAsString(); 
} 

此代码需要从该Microsoft.HttpMicrosoft.Http.Extensions的dll WCF Rest Toolkit - http://aspnet.codeplex.com/releases/view/24644

+0

干杯,伟大的作品。 ;) – Doomsknight

4

延长System.ServiceModel.ClientBase<IYourServiceContract>创建自己的代理。 REST服务上的每种方法都通过Channel属性公开,因此您可以将其包装。

[ServiceContract] 
public interface IMyServiceContract 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "/ping")] 
    string Ping(); 
} 

public class ProxyClient : ClientBase<IMyServiceContract>, IMyServiceContract 
{ 
    #region Implementation of IMyServiceContract 

    public string Ping() 
    { 
     return Channel.Ping(); 
    } 

    #endregion 
} 

public class Test 
{ 
    // This assumes you have setup a client endpoint in your .config file 
    // that is bound to IMyServiceContract. 
    var client = new Client(); 

    System.Console("Ping replied: " + client.Ping()); 
} 

不幸的是,这是针对WCF消费,不与REST完美地工作,即它不公开的HTTP标头,这是必要的一个RESTful的实现。

+0

我错过了[WebGet ....]属性。没有意识到这是客户需要的。 –