我有2个合同(cA& cB)由单个WCF服务实现,有2个端点(epA和epB)。
出于安全目的,这不,但纯粹出于清晰/组织的原因,我只想在通过endpointA发现服务时“看到”ContractA的操作;同样,只能通过endpointB查看ContractB的操作。
我本身不需要“保护”这些操作。场景是这样的,任何给定的客户端只需要服务的一个“侧”,而不是两者(但是,操作本身共享资源,因此拥有单个服务而不是2个服务是有意义的)。
似乎任何给定的服务基本上都获得了1个WSDL,所有操作都暴露给所有端点。这是它的工作方式,还是有办法通过阻塞端点合同未定义的操作来“塑造”端点?
答案 0 :(得分:1)
默认情况下,您是对的 - 一个服务实现类获取一个WSDL,其中包含此服务类实现的所有服务方法(来自所有服务协定)。
没有任何方法(据我所知)以任何(简单)方式“塑造”WSDL - WCF确实提供了进入创建WSDL(静态或动态)的过程的方法,但这些方法不是对于胆小的人来说。将服务契约的实现分成两个单独的类,然后你就有了两个独立的服务,单独的WSDL和所有服务,这样会容易得多。
答案 1 :(得分:1)
WCF服务(类)直接映射到wsdl:service元素,它将每个合同公开为单独的wsdl:port(在WCF中称为端点)。这是回答问题的要点。如果您不希望在该wsdl:service中使用第二个合同,则无法在同一个类中实现它。
您已经提到过您的服务合同共享资源。在这种情况下,您的WCF服务可能还包含业务逻辑。这是你遇到问题的原因。实现WCF服务的良好设计是仅将它们创建为围绕单独的业务逻辑类的包装器。