2011-08-31 61 views
1

我有一个tcpbinding服务。我有一个接口有20个方法。我有不同类型的客户端。其中一个可以访问这20个方法中的10个,我有另一个客户端可以访问所有20个方法,另一个只能访问15个。那么我怎样才能实现这个?我怎么去认证操作契约?哪个属性?有没有其他方法可以实现这一点?我们可以通过很多方式实现这一目Wcf不同的客户端不同的方法相同的接口

回答

5

您可以将任何服务和的所有方法暴露在您喜欢的任何类型的协议绑定上。

不能但是只显示您的一些方法 - 例如,您将不能使用与20个方法签订单一服务合同,然后只将其中的10个公开给某些客户端。

基本上,您需要为要公开的每组方法创建一个服务接口。

然后你可以做的是有一个服务类实现前10个方法,并将该服务公开给所有可以访问这10个方法的客户端。

然后,您可以使用另外5个方法获得第二个服务接口,并且拥有第二个服务实现类,它为总共15个方法实现第一个和第二个接口 - 并将该服务通过一些绑定展示给另一个客户 - 等等......

+0

因此,如果您有多个组合,我们需要去执行许多服务合同并通过多次编写相同的实现代码来实现它们......这是实现这一目标的唯一方法吗?我们可以设置对方法的保护吗?我们用操作合同编写任何属性来单独检查我们服务的客户端的认证信息? –

+0

您需要拥有尽可能多的**服务契约**,因为您需要不同的功能集,而且您可能需要多个服务实现类 - 但这些服务实现**当然**可以共享大部分代码!你只需要有不同的“外墙”。无需重复编写相同的代码! –

-1

今天我遇到了同样的问题,它实际上很简单。基本上你有N个不同的接口,有N个不同的.svc文件。 主要代码位于具有所有功能的interface/svc中。在其他interfaces/svc文件中,你必须声明方法和实现,你可以简单地声明主对象,然后调用它的方法。例如:

主界面/ SVC - IMainInterface - Main.svc

class MainSVC 
{ 
    public void functionA() 
    { 
     //code 
    } 

    public void functionB() 
    { 
     //code 
    } 
} 

在其他接口只声明你需要什么: 客户接口/ SVC - ICustomer - Customer.svc

class MainSVC 
{ 
    public void functionA() 
    { 
     Main main = new Main(); 
     main.functionA(); 
    } 
} 

当然,您的客户必须使用Customer.svc而不是Main.svc,否则他可以使用所有方法。

相关问题