如何使用c#和Visual Studio 2010跨多层共享服务引用类型?
本文关键字:共享 服务 引用类型 2010 何使用 Visual Studio | 更新日期: 2023-09-27 18:15:04
我的项目分为服务层项目和实现层项目。两者都是使用Visual Studio 2010用c#编写的。服务层接受请求对象并将其传递给实现层。实现层操作该对象并将其传递给外部web服务。外部web服务的结果然后通过实现层和服务层传递回客户端。
相同的请求和响应对象跨每一层使用。
是否有一种方法可以在两个层之间使用共享引用,并使用相同的引用与外部web服务进行通信?如果不是,最简洁的方法是什么?
我宁愿避免必须维护特定于项目的服务引用,而是使用单个数据契约dll。然而,当我使用这种方法时,我发现我需要使用Webservice。请求而不是数据合约。与外部web服务方法通信时的请求
方法之一是创建一个由服务层和实现层共享的模型。当您收到来自web服务的响应时,您可以将该对象转换为您自己的模型并将其传递下去。当您需要通过web服务更新数据时,将您的模型转换回web服务所请求的模型。
你可以创建这样一个类:
public class MyCustomModel
{
public int Id { get; set; }
public string SomeValue { get; set; }
// etc.
}
然后您可以创建从WS转换到您的自定义模型的扩展方法
public static class MyExtensions
{
public static MyCustomModel ConvertToMyCustomModel(this MyCustomModel model, WebServiceModel wsModel)
{
var newModel = new MyCustomModel { Id = wsModel.Id, SomeValue = wsModel.SomeValue };
return newModel;
}
}
同样的方法可以用来将MyCustomModel转换为WebServiceModel。这样,如果你改变你的web服务,或者如果它指向另一个位置,你可以很容易地只更新一个位置,而不是改变服务和实现层。
不确定如何为您的服务创建代理。
下面的步骤是使用。
创建Visual Studio "Add Service Reference"特性- 将合同移到专用项目。只存储没有实现的联系人。
- 为服务和客户项目添加合同项目的引用。 使用合同中的合同在服务中实现服务,并运行服务。
- 在Service项目中添加Service Reference。确保选中"重用所有引用程序集中的类型"。
因此,您应该在整个解决方案中使用在合同项目中定义的类。
步骤2在这里是关键的。客户端需要有对Contracts.dll的引用,否则它不知道这些类型,将基于WSDL生成新的类型。