我有一个 MVC 解决方案,它为 Web API 服务提供了一些路由。在某些情况下,我会通过简单的 HTTP get 从 JavaScript 调用这些。在其他情况下,我想从一些 .NET 代码(可能是另一个 MVC 应用程序)中调用它们。
有没有办法向这些 Web API 端点添加服务引用,并让工具创建代理客户端和 CLR 类型,就像使用典型的 WCF 服务一样?我知道这里没有涉及 SOAP,但我确实读过它是可能的,只是不知道如何。
我有一个 MVC 解决方案,它为 Web API 服务提供了一些路由。在某些情况下,我会通过简单的 HTTP get 从 JavaScript 调用这些。在其他情况下,我想从一些 .NET 代码(可能是另一个 MVC 应用程序)中调用它们。
有没有办法向这些 Web API 端点添加服务引用,并让工具创建代理客户端和 CLR 类型,就像使用典型的 WCF 服务一样?我知道这里没有涉及 SOAP,但我确实读过它是可能的,只是不知道如何。
不,它是 REST 服务。REST 服务不公开用于通过服务引用创建代理的元数据(具有某些特殊形式的元数据的 WCF 数据服务除外)。使用 Web-API 的HttpClient
类来调用服务。
我们没有任何标准机制来做到这一点。REST 是关于构建允许客户端独立于服务器发展的系统。HTTP 定义了一个统一的 GET、PUT、POST、DELETE 等接口,因此不需要方法描述。出于这两个原因,没有 REST WSDL 等价物,或者我应该说没有在 REST 社区中真正获得动力的等价物(即有 WADL)。
REST 服务中的耦合点实际上是围绕媒体类型/正文格式。为此,我们确实支持强类型机制。在 Web API 中,我们发布了一个 HttpClient(Nuget 上的 HttpClient),它允许您采用 CLR 类型并转换为某种表示形式。开箱即用,它支持 XML 和 JSON。
因此,您可以创建一个 CLR 类型并与客户端共享它,然后在客户端上使用 HttpClient。
要创建类型本身,还有几个选项。
不是直接的,而是从我见过的几个示例中,使用 Web Api 涉及设置 ServiceContract。似乎如果您根据需要添加具有常规 OperationContract 和 DataContract 属性的第二个服务合同接口,那么您可以使用您选择的标准 WCF 绑定及其匹配的 MEX 端点创建一个端点。该服务将实现这两个接口,因此添加服务引用可以从标准 WCF 端点获取 WSDL 文档。