我的印象是在配置文件中将端点定义为可能的客户端列表,但这没有任何意义(从某种意义上说,我认为它说什么计算机可以连接到服务)现在我收集它更多一个定义,那么有人可以解释一下终点对我来说是什么吗?我理解定义合同接口然后实施合同的概念,但我在这之间的某个地方迷路了,实际上有一些可用的东西。
在这种情况下,地址是什么?主机地址?
绑定是使用正确的通信方法/协议吗?
合同本质上是“共享对象”(是的,我知道这在技术上非常不正确,但在这里与我合作)
端点是服务公开的内容,在 WCF 术语中,它由三部分组成:
地址是可以到达端点的 URL。
绑定规定了所应用的转换以及发送到地址处合同实施的消息的形状(在某种程度上)。
合同规定了在该地址公开了哪些操作。这正是它所说的,它是一个合同,表明允许哪些调用。
大多数时候,人们记得它是 AB C。
需要注意的一些事项:
绑定通常是通道与应用行为的组合;通道是通道堆栈上的元素,它们在到达服务实现之前修改消息并执行操作。
虽然在 .NET 中通常由接口表示,但并不要求以这种方式表示合同。一些设计优先的倡导者将首先定义要为请求和响应发送的消息的架构,这就是 WCF 将 .NET Contract 接口转换成的内容。
我将在这里引用 Juval Lowy 的Programming WCF Services:
每个服务都与一个定义服务所在位置的地址、一个定义如何与服务通信的绑定以及一个定义服务做什么的合同相关联。这个管理服务的三巨头很容易记住作为服务的 ABC。
WCF 以端点的形式形式化了这种关系。端点是地址、合约和绑定的融合。
每个端点都必须具有所有三个元素,并且主机公开端点。
WCF 中的端点
WCF 服务是一个公开端点集合的程序。每个端点都是与世界交流的门户。端点由三个部分组成。
1)地址:
定义服务的位置
ex - http://www.test.com:8001/MyService
2)绑定:
指定客户端如何与端点通信的绑定。
ex - BasicHttpBinding、WSHttpBinding、WSDualHttpBinding 等
3)合同:
标识可用操作的合同
端点将在所创建服务的 web.config 文件中提及。
服务端点具有地址、绑定和合同。端点的地址是端点所在的网络地址。EndpointAddress 类表示 WCF 端点地址。端点的绑定指定端点如何与世界通信,包括传输协议(例如,TCP、HTTP)、编码(例如,文本、二进制)和安全要求(例如,SSL、SOAP 消息安全)。Binding 类表示 WCF 绑定。Endpoint 的 Contract 指定 Endpoint 通信的内容,本质上是一组消息,这些消息组织在具有基本消息交换模式 (MEP) 的操作中,例如单向、双工和请求/回复。ContractDescription 类表示 WCF 合同。
请参阅此处: 服务端点指定用于通信的地址、绑定和合同。
服务端点具有地址、绑定和合同。端点的地址是端点所在的网络地址。EndpointAddress 类表示 WCF 端点地址。端点的绑定指定端点如何与世界通信,包括传输协议(例如,TCP、HTTP)、编码(例如,文本、二进制)和安全要求(例如,SSL、SOAP 消息安全)。Binding 类表示 WCF 绑定。Endpoint 的 Contract 指定 Endpoint 通信的内容,本质上是一组消息,这些消息组织在具有基本消息交换模式 (MEP) 的操作中,例如单向、双工和请求/回复。ContractDescription 类表示 WCF 合同。
Endpoint 用于配置客户端应用程序和 WCF 服务之间的通信通道
终点样本
<endpoint address="http://localhost:3901/Service1.svc"
binding="basicHttpBinding"
contract="ServiceReference.IService1" bindingConfiguration="BasicHttpBinding_IService1"
name="BasicHttpBinding_IService1" />
Web 服务端点可以隐藏其中的部分或全部。并且基于 request 可以在内部决定 Request 的处理。
SRJTester 工具(可在 Github 上获得)非常适合在发出服务请求时指定端点、操作、协议等。