如何使用c#和Visual Studio 2010跨多层共享服务引用类型?

本文关键字:共享 服务 引用类型 2010 何使用 Visual Studio | 更新日期: 2023-09-27 18:15:04

我的项目分为服务层项目和实现层项目。两者都是使用Visual Studio 2010用c#编写的。服务层接受请求对象并将其传递给实现层。实现层操作该对象并将其传递给外部web服务。外部web服务的结果然后通过实现层和服务层传递回客户端。

相同的请求和响应对象跨每一层使用。

是否有一种方法可以在两个层之间使用共享引用,并使用相同的引用与外部web服务进行通信?如果不是,最简洁的方法是什么?

我宁愿避免必须维护特定于项目的服务引用,而是使用单个数据契约dll。然而,当我使用这种方法时,我发现我需要使用Webservice。请求而不是数据合约。与外部web服务方法通信时的请求

如何使用c#和Visual Studio 2010跨多层共享服务引用类型?

方法之一是创建一个由服务层和实现层共享的模型。当您收到来自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"特性
  1. 将合同移到专用项目。只存储没有实现的联系人。
  2. 为服务和客户项目添加合同项目的引用。
  3. 使用合同中的合同在服务中实现服务,并运行服务。
  4. 在Service项目中添加Service Reference。确保选中"重用所有引用程序集中的类型"。

因此,您应该在整个解决方案中使用在合同项目中定义的类。

步骤2在这里是关键的。客户端需要有对Contracts.dll的引用,否则它不知道这些类型,将基于WSDL生成新的类型。