Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 限制WCF客户端访问某些公共类和方法_C#_Asp.net_Wcf - Fatal编程技术网

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

C# 限制WCF客户端访问某些公共类和方法,c#,asp.net,wcf,C#,Asp.net,Wcf,我的项目中有以下内容 WarehouseAPI.Core.dll//包含所有数据访问代码 WCF服务//引用WarehouseAPI.Core.dll库 当wcf客户端使用该服务时,它可以访问WarehouseAPI.Core.dll中的所有公共方法和类,但我只想只授予对某些类和方法的访问权 我怎样才能做到这一点呢?这个答案非常笼统,但是。。。创建WarehouseAPI_WCF.Core.dll,它只包括您希望显示的公共方法,它们调用WarehouseAPI.Core.dll。将WCF服务指向

我的项目中有以下内容

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

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

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


我怎样才能做到这一点呢?

这个答案非常笼统,但是。。。创建WarehouseAPI_WCF.Core.dll,它只包括您希望显示的公共方法,它们调用WarehouseAPI.Core.dll。将WCF服务指向WarehouseAPI_WCF.Core.dll


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

当您为WCF服务定义契约(IService1样式接口)时,任何连接到该服务的客户端都将看到该服务契约中定义的所有方法:

[ServiceContract]
public interface IService1
{ 
    [OperationContract]
    public void DoSomething();

    [OperationContract]
    public void DoSomethingElse();

    [OperationContract]
    public void DoSomethingTotallyDifferent();
}
这是故意的,这是件好事

因此,如果您的
IService1
接口暴露太多,则需要将其分解为较小的“核心”和较大的“扩展”版本(-->遵循面向对象设计的接口隔离原则)

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


由于
IService1Extended
是从
IService1Core
衍生而来,因此最终,“扩展”服务仍将提供原始服务的所有功能。但是现在您可以拥有一个只公开
IService1Core
契约的端点,从而限制连接到该端点的客户端只调用
DoSomething()
——而不调用其他方法(因为在该服务契约上,没有定义其他方法)

我不确定问题是什么-WCF服务将只访问WarehouseAPI.Core.dll中它需要访问的方法和类,使用该服务的任何人都只能访问该服务公开的方法,
[ServiceContract]
public interface IService1Core
{ 
    [OperationContract]
    public void DoSomething();
}

[ServiceContract]
public interface IService1Extended : IService1Core
{ 
    [OperationContract]
    public void DoSomethingElse();

    [OperationContract]
    public void DoSomethingTotallyDifferent();
}