尝试遵循示例程序的逻辑运行到块中。该示例用于演示创建合同,创建休息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中添加和更新记录的客户端应用程序。
答案 0 :(得分:0)
您定义的界面是您传递给客户的合同,告知他们您提供的服务,在您提供GetProduct
方法的情况下。
然后,您创建该合同的具体实现,因此当客户端代码调用您的接口时,它们将最终调用该具体实现,该实现可能会访问包含该产品的某些外部资源(数据库或文件)。
继承自ProductClientProxy
的{{1}}负责设置允许客户端拨打您的服务的频道。 ClientBase是WCF基础结构的一部分,是实际从ClientBase<IProductDetails>
读取设置的类,负责设置通信。
我建议您详细了解ClientBase,甚至查看source code