2

我是 WCF 的新手。我知道我们必须在服务端和客户端的配置文件中写入端点。假设我有多个端点

<services>
      <service name="YourNamespace.YourService" behaviorConfiguration="Default">
        <endpoint name="Default" 
            address="http://YourServer/Services/MyService" 
            binding="basicHttpBinding" 
            contract="YourNamespace.IYourService"/>
        <endpoint name="TCP" 
            address="net.tcp://YourServer/ServicesTCP/MyService" 
            binding="netTcpBinding" 
            contract="YourNamespace.IYourService"/>

        <endpoint name="Dual" 
            address="http://YourServer/Services/MyService/Dual" 
            binding="wsDualHttpBinding" 
            clientBaseAddress="http://localhost:8001/client/"
            contract="YourNamespace.IYourDualService"/>

        <endpoint name="mex" 
            address=""
            binding="mexHttpBinding" 
            contract="IMetadataExchange"/>
      </service>
    </services>

我们知道我们不能在客户端创建具有端点地址的代理,例如

http://YourServer/Services/MyService/Dual or
net.tcp://YourServer/ServicesTCP/MyService

相反,如果我们需要在客户端创建代理,那么我们需要提供 mex 端点地址。所以我只是不明白端点地址有什么用?

当我们在客户端创建代理并调用服务时,我们只是不明白我们的代理使用什么端点地址连接到服务?

这就是为什么我只想知道端点地址是如何发挥作用的?

我知道我们可以在配置文件中为 tcp 编写单独的 mex 端点,因此我们可以使用该 mex url 创建代理,结果当客户端连接到服务时,tcp 协议将用于通信,但对于其他 http 端点,一个 mex 端点工作正常。

我的重要问题是我真的很想知道假设我有 3 个端点,例如 basichttp、wshttp、wsdualbidning,然后一个 mex 端点适用于所有这些端点来创建代理。那么在这种情况下告诉我,当客户端连接到服务时,将使用哪个端点地址连接到该服务?

如果有人非常详细地讨论这个问题,并提供示例配置条目以及示例服务代码,这将是非常有帮助的吗?

更新部分

Tom Redfern 说......在内部使用的情况下不需要服务端点。假设我已经开发了一个托管在控制台应用程序中的服务,并且其他客户端需要连接到该服务。所以在这种情况下告诉我客户端如何在没有代理类的情况下连接到服务并调用各种服务方法。我只是想知道没有代理如何连接和调用 wcf 服务的各种方法。请为客户端提供一些示例代码,以展示我如何以编程方式连接和调用 wcf 服务的各种方法而无需代理。

4

1 回答 1

0

端点需要一种解决方法。这既是基本的,也是合理的。

您关于客户端只需要元数据端点地址来解析实际服务端点的论点仅在您公开元数据端点(这绝不是必需的)并且消费者没有其他方式使用服务时才成立(也许该服务是公开的)。

大多数服务是为内部使用而开发的,其中通过引用共享类型程序集(而不是通过服务代理)直接绑定到端点的能力很常见。绝对需要了解这些实例中的端点地址。

如果您了解UDDI的历史,那么它被设计为一种将服务元数据分发给不需要了解有关服务的任何其他内容的消费者的方法。但是,您多久看到一次 UDDI 服务器?我已经看到它在一家公司中使用过(我总共在大约 20 家公司工作过)。

于 2013-01-09T09:05:09.627 回答