【问题标题】:Single WCF Service for all functionality所有功能的单一 WCF 服务
【发布时间】:2014-08-26 17:18:54
【问题描述】:

我已经创建了 wcf 服务,我想为所有功能创建单个服务。

所以我使用了部分类并尝试像这样实现它。

文件名:-IMainService.cs

[ServiceContract]
public interface IMainService
{       
    [OperationContract]
    void DoWork();
}

文件名:-MainService.svc

 public partial class MainService : IMainService
{
    public void DoWork()
    {
        throw new NotImplementedException();
    }
}

文件名:-IProductService.cs

[ServiceContract]
public interface IProductService
{       
    [OperationContract]
    void GetProducts();
}

文件名:-ProductService.svc

 public partial class MainService : IProductService
    {
        public void GetProducts()
        {
            throw new NotImplementedException();
        }
    }

当我在应用程序中引用服务时,我可以看到两个客户端,MainServiceClient 和 ProductServiceClient。我根据文件名猜测这些名称,并且都包含属于那里的文件的方法,例如:MainServiceClient 有 Dowork 和 ProductServiceClient 有 GetProducts。

我相信我走错了路,有人可以建议我如何实现单一服务概念。

编辑:

  • 多个接口和服务文件背后的想法是 可维护性。
  • 我们有很多方法(100+)所以我不想把所有东西都放在一个上 服务文件,所以我将其拆分。

【问题讨论】:

  • 那你为什么有2个接口呢?我想你可以只有一个界面和一个服务,但我怀疑这不是个好主意。
  • 为什么你的两种方法都没有一个 WCF 服务?
  • 多接口多文件背后的理念是可维护性。
  • 部分课程怎么样?您可以拥有一个包含完整接口定义的代码文件,然后实现该类,以便为每个方法拥有一个代码文件...

标签: c# wcf


【解决方案1】:

我将创建一个新的服务接口,其中包括其他两个服务接口。然后服务类实现连接的接口。

类似这样的:

public interface IJoinedService : IProductService, IMainService
{
}

public class JoinedService : IJoinedService
{
   private ProductService _productService;
   public void GetProducts()
   {
     _productService.GetProducts();
   }
}

【讨论】:

  • 我会跳过 IJoinedService 并让 JoinedService 直接从两者继承
  • 在 ProductService 中,我应该也实现 IProductService 吗?
  • 在 JoinedService 中,我必须声明所有服务对象(如 ProductService、OrderService 等)在哪里初始化它们?
【解决方案2】:

为什么不这样:

public class MainService : IProductService, IMainService
{
  MainService mMain = new MainService();
  ProductService mProduct = new ProductService();

  public void ImplementedMainServiceFunction()
  {
    mMain.DoSomething();
  }

  public void ImplementedProductServiceFunction(string s)
  {
    if (!string.IsNullOrEmpty(s))
      mProduct.DoSomething();
  }
}

像这样,有一个实现类负责参数检查,实际逻辑可以假设参数已经过检查,从而为您提供更清晰/更短的代码。并且逻辑也被划分为多个文件。

【讨论】:

  • 感谢您的回复,我正在寻找拆分未合并的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 2011-04-09
  • 2014-09-12
  • 1970-01-01
相关资源
最近更新 更多