我的项目中有以下内容。
WarehouseAPI.Core.dll //包含所有数据访问代码。
WCF服务//引用WarehouseAPI.Core.dll库。
当wcf客户端使用该服务时,它可以访问WarehouseAPI.Core.dll中的所有公共方法和类,但我只想授予对某些类和方法的访问权限。
我怎样才能做到这一点?
答案 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)
- 并且没有其他方法(因为在该服务上)合同,没有定义其他方法)