限制WCF客户端访问某些公共类和方法

时间:2017-02-02 23:54:42

标签: c# asp.net wcf

我的项目中有以下内容。

  

WarehouseAPI.Core.dll //包含所有数据访问代码。

     

WCF服务//引用WarehouseAPI.Core.dll库。

当wcf客户端使用该服务时,它可以访问WarehouseAPI.Core.dll中的所有公共方法和类,但我只想授予对某些类和方法的访问权限。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

这个答案非常通用,但是......创建WarehouseAPI_WCF.Core.dll,它只包含你想要显示的公共方法,并且它们调用WarehouseAPI.Core.dll。将您的WCF服务指向WarehouseAPI_WCF.Core.dll

根据您的类的结构,您可以使用继承并创建隐藏公共方法的私有方法。

答案 1 :(得分:0)

当您为WCF服务定义合约([ServiceContract] public interface IService1 { [OperationContract] public void DoSomething(); [OperationContract] public void DoSomethingElse(); [OperationContract] public void DoSomethingTotallyDifferent(); } 样式界面)时,连接到该服务的任何客户端都将看到该服务合同中定义的所有方法:

IService1

这是设计,而且是好事

因此,如果您的[ServiceContract] public interface IService1Core { [OperationContract] public void DoSomething(); } [ServiceContract] public interface IService1Extended : IService1Core { [OperationContract] public void DoSomethingElse(); [OperationContract] public void DoSomethingTotallyDifferent(); } 界面暴露太多,那么您需要将其分解为更小的“核心”和更大的“扩展”版本(---> adhering)面向对象设计的接口隔离原则

然后,您可以单独公开这两个服务,并允许某些客户端仅连接到“核心”服务:

IService1Extended

由于IService1Core来自IService1Core,最后,“扩展”服务仍将提供所有原始服务的功能。但是现在您可以拥有公开DoSomething()合同的端点,从而限制连接到该端点的客户端仅调用sess = tf.Session() input = tf.placeholder(tf.float32, [None, 3]) w1 = tf.contrib.layers.fully_connected(input, 1) w2 = tf.contrib.copy_graph.get_copied_op(w1, sess.graph) - 并且没有其他方法(因为在该服务上)合同,没有定义其他方法)