按端点形成WCF服务

时间:2010-10-02 19:57:40

标签: wcf wsdl wcf-endpoint

我有2个合同(cA& cB)由单个WCF服务实现,有2个端点(epA和epB)。

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

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

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

2 个答案:

答案 0 :(得分:1)

默认情况下,您是对的 - 一个服务实现类获取一个WSDL,其中包含此服务类实现的所有服务方法(来自所有服务协定)。

没有任何方法(据我所知)以任何(简单)方式“塑造”WSDL - WCF确实提供了进入创建WSDL(静态或动态)的过程的方法,但这些方法不是对于胆小的人来说。将服务契约的实现分成两个单独的类,然后你就有了两个独立的服务,单独的WSDL和所有服务,这样会容易得多。

答案 1 :(得分:1)

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

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

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