2010-10-02 56 views
1

我有2个合同(cA & cB)由具有2个端点(epA & epB)的单个WCF服务实现。通过端点形成WCF服务

这是出于安全目的,而纯粹是为了清晰/组织的原因,我想只有“看” ContractA的操作时,我发现通过endpointA服务;同样,只能通过endpointB查看ContractB的操作。

我不需要“保护”这些操作本身。这种情况是这样的,任何给定的客户端只需要服务的一个“方面”,而不是两个(但是,操作本身共享资源,因此具有单个服务而不是2个服务是有意义的)。

似乎任何给定的服务基本上都获得1个WSDL,所有操作都暴露给所有端点。这是它的工作方式,还是有办法通过阻塞未由端点合同定义的操作来“塑造”端点?

回答

1

默认情况下,您是对的 - 一个服务实现类获取一个WSDL,其中包含此服务类实现的所有服务方法(来自所有服务合同)。 (以我所知)以任何(简单)的方式“塑造”WSDL没有任何方法--WCF确实提供了进入创建WSDL(静态或动态)过程的方法,但是那些不是因为心灵的懦弱。将服务契约的实现分成两个单独的类,然后你将拥有两个单独的服务,单独的WSDL和所有的服务,将会容易得多。

1

Marc是绝对正确的。我只是添加为什么这发生在WCF中。在WCF中,所有与元数据相关的功能都基于服务元数据行为和mex端点。这两个功能都是在服务级别上定义的。所以你不能采取更高的粒度(除非你写了很多自定义代码)并为每个端点指定元数据。

WCF服务(类)直接映射到wsdl:service元素,它将每个合约公开为单独的wsdl:port(在WCF中称为端点)。这是回答你的问题的要点。如果你不想在你的第二个合同中使用wsdl:service,你不能在同一个类中实现它。

你已经提到你的服务合约共享资源。在这种情况下,您的WCF服务可能还包含业务逻辑。这是你的问题的原因。用于实现WCF服务的良好设计是仅将它们创建为独立业务逻辑类的包装。

+0

你说得对,我的WCF操作直接执行业务逻辑。我没有考虑将服务操作作为商业类的包装来实现,但我现在意识到这在很多方面会好很多,所以感谢这个建议。 – with 2010-10-03 19:58:11