在C#中使用带有rest的客户端代理

时间:2014-05-09 21:10:39

标签: c# web-services rest

尝试遵循示例程序的逻辑运行到块中。该示例用于演示创建合同,创建休息Web服务,然后使用其余服务。

让我失望的是我在合同中定义了接口

namespace ProductDetailsContracts
{
    [ServiceContract]
    public interface IProductDetails
    {
        [OperationContract]
        [WebGet(UriTemplate = "products/{productID}")]
        Product GetProduct(string productID);
    }
}

然后在网络服务中使用

using ProductDetailsContracts;
public class ProductDetails : IProductDetails
{
    public Product GetProduct(string productID)
    {
        //do something
    }
}

然后在客户端

中使用代码
using ProductDetailsContracts;
namespace ProductClient
{
    class ProductClientProxy : ClientBase<IProductDetails>, IProductDetails
    {
        public Product GetProduct(string productID)
        {
            return this.Channel.GetProduct(productID);
        }
    }
}

我觉得ClientBase<IProductDetails>是关键,但我不知道它是如何与网络服务ProductDetails相关联的。理解这一点的真正目标是运行一个可以在SQL Server中添加和更新记录的客户端应用程序。

1 个答案:

答案 0 :(得分:0)

您定义的界面是您传递给客户的合同,告知他们您提供的服务,在您提供GetProduct方法的情况下。

然后,您创建该合同的具体实现,因此当客户端代码调用您的接口时,它们将最终调用该具体实现,该实现可能会访问包含该产品的某些外部资源(数据库或文件)。

继承自ProductClientProxy的{​​{1}}负责设置允许客户端拨打您的服务的频道。 ClientBase是WCF基础结构的一部分,是实际从ClientBase<IProductDetails>读取设置的类,负责设置通信。

我建议您详细了解ClientBase,甚至查看source code