【问题标题】:How to restrict public class in WCF?如何限制 WCF 中的公共类?
【发布时间】:2011-11-21 09:30:58
【问题描述】:

我是 WCF 新手;到目前为止,我的 WCF 项目引用了一个包含许多公共类的 DLL 库。

我创建了一个 .net 4.0 WCF 项目,其中包含一个简单的接口类和一个实现该接口的 .SVC 文件。我没有看到 app.config 的任何部分或我可以用来限制共享对象的任何其他内容。

如何限制 WCF 服务,以便 WCF 客户端只能使用某些公共类?还是不能这样做?

更新:在下面添加了我的意图。

我试图通过 WCF 服务公开一些函数 + 类以供某些客户端使用,但这些类存储在此 DLL 中。我不想共享 dll 中的所有类,而只想共享一个子集。

更新 2:问题已解决

我知道这听起来很愚蠢……但不知何故,问题就消失了。我不确定重启是否成功,但我不再遇到这些问题了。

但我确实了解了一些关于 WCF 的知识;某处的一些文章强调了一个好的做法是超越接口和 .SVC 设计,实际上使用不同的程序集来遵循关注点分离模式。

【问题讨论】:

  • 客户端将消耗的唯一项目是操作以及您公开的任何数据合约或故障合约。我看不到客户端如何广泛访问底层 DLL,除非您对这些 DLL 中的每个方法都有操作。
  • 我使用“C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\SvcUtil.exe”localhost/WcfService/Service.svc?wsdl /out:D:/Service.cs /config:app。配置生成cs文件,我也可以在这个文件中看到公共类。所以...有什么想法吗?
  • SvcUtil 生成一个代理供客户端使用 - 所以它必须是公开的。我不确定我是否完全理解您的担忧?
  • 好吧,基本上我正在尝试公开一个 wcf 供某些客户端使用,但是该类存储在这个 dll 中,所以我不想共享 dll 中的所有类,但只有一个子集,所以我试图弄清楚如何做到这一点。
  • 显示一些例子。您的描述确实不清楚。

标签: c# wcf public sharing


【解决方案1】:

你的问题的简短答案是

1) 您可以控制通过端点公开的内容

2) 您使用授权在您的服务方法实现中设置了进一步的限制 (登录用户执行什么操作)

MSDN 阅读这篇文章的长答案,它解释了您的问题和许多类似的问题,例如

任何客户端都可以调用该服务还是您想控制谁可以调用 服务?

任何客户端都可以调用服务的任何方法吗? 想控制哪些客户端可以调用哪些方法?

任何客户端都可以执行方法中的所有代码还是您想控制什么 客户端可以执行什么代码?

更新:来自您的更新

您需要在 dll 中分离合同,然后与客户端和服务共享该 dll。 客户将无法访问您的实施,而只能访问合同。

【讨论】:

    【解决方案2】:

    假设您有一个 DLL,它有几十个方法,而您只想公开其中的 6 个。

    您开发了一个具有六种方法的 WCF 服务,并且该服务的实现引用了 DLL。

    在您的服务实现中,您可能会有这样的情况:

    public class MyService : IService
    {
    
        MyDll myDll = new MyDll();
    
        public void Method1()
        {
    
            myDll.Method1();
        }
    
        public string Method2(int someValue)
        {
    
            return myDll.Method2(someValue);
        }
    
        // and so on
    }
    

    接口 (IMyService) 可能如下所示:

    [ServiceContract]
    public interface IMyService
    {
    
        [OperationContract]
        void Method1();
    
        [OperationContract]
        string Method2(int someValue);
    
        // and so on
    }
    

    基本思想是 WCF 服务充当底层 DLL 的包装器,并且只公开接口中指定的那些方法/类。

    当您通过 SvcUtil 生成代理时,您只会看到服务中指定的内容,而不是底层 DLL 中的所有内容 - 事实上,您不应该看到底层 DLL 中的任何内容,因为它是由服务包装的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多