【问题标题】:Sharing Interfaces that are implemented in WCF Service在 WCF 服务中实现的共享接口
【发布时间】:2010-09-02 08:11:22
【问题描述】:

我有 wcf 网络服务。 Serice 当然实现了带有 ServiceContract 属性的接口。它还实现了另一个没有 ServiceContract 属性并存储在外部 dll 中的接口。当我生成代理时,我没有在代理对象中实现第二个接口。有没有办法让 svcutil 生成实现它的代理,或者我需要手动添加该代码?

问候

【问题讨论】:

    标签: web-services wcf


    【解决方案1】:

    如果您在将包含代理的项目中添加对包含接口定义的程序集的引用,则代理生成工具将使用已知接口而不是生成自己的接口。

    【讨论】:

    • 问题是代理生成工具会跳过没有标记任何属性的实现接口
    【解决方案2】:

    这没有意义。如果接口未标记为 ServiceContract,则它不会在服务上公开,也无法从代理调用。如果您希望代理也实现接口,您还必须在代理中编写接口的实际实现(客户端!)=从服务中复制代码。最好的方法是不在服务中实现接口,而是使用帮助类,并在客户端和服务器之间共享这个类。您将只有一个实现,并且您将共享它。

    【讨论】:

      【解决方案3】:

      那是不可能的。实施会是什么样子?它应该只是从原始类中复制粘贴实现吗?如果要将方法公开为 Web 服务,则必须将它们放在具有 ServiceContract 属性的类或接口中。

      假设原始服务类如下所示:

      public class MyService : IServiceContract, IOtherInterface
      {
          ...
      
          public ObjectFromServiceAssembly MethodFromOtherInterface()
          {
              Console.WriteLine("Create instance of some object.");
              return new ObjectFromServiceAssembly();
          }
      }
      

      MethodFromOtherInterface 在生成的代理端看起来如何?它不能简单地从服务端复制您的实现。

      【讨论】:

      • 问题是代理生成工具会跳过没有标记任何属性的实现接口
      • stackoverflow 中的一个错误 - 为之前的答案添加了评论 - 在此期间出现了新的答案并且评论转到了错误的答案
      • 对此的评论:这是服务:类 EchoImplementation : IEchoContract, Interface1 { public EchoMessage Echo(EchoMessage Message) { EchoMessage _returningMessage = new EchoMessage(); _returningMessage.ReturnMessage = Message.OutMessage;返回_returningMessage; } #region Interface1 成员 public void dummy() { } #endregion }
      • 这是合约 [ServiceContract] 公共接口 IEchoContract { [OperationContract] EchoMessage Echo(EchoMessage Message);这是附加接口: public interface Interface1 { void dummy(); }
      • ..这是生成的代理(在 vb 中)(仅实现 IEchoContract): _ 部分公共类 EchoContractClient 继承 System.ServiceModel.ClientBase(Of Proxy.IEchoContract) 实现 Proxy.IEchoContract Public Sub New() MyBase.New End Sub
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2011-02-08
      • 2012-06-13
      • 2016-06-29
      • 2011-01-09
      相关资源
      最近更新 更多