【问题标题】:Consuming WCF service (without metadata) on a non-.net platform在非 .net 平台上使用 WCF 服务(无元数据)
【发布时间】:2013-04-23 13:20:10
【问题描述】:

我创建了一个 WCF 服务并通过自托管来托管它。此服务没有发布任何元数据。

第一个问题

  1. 我可以通过 Visual Studio 添加服务参考来使用它吗?希望不会。
  2. 我可以通过创建手动代理来使用它吗,即ChannelFactory<ServiceContract>....?希望可以。

现在在第二种情况下,客户端必须是.Net,对吧?

所以这意味着,要在非.net 平台上使用 wcf 服务,我们必须公开其元数据?

WCF 服务不能没有元数据,不能由 Ajax 客户端消费,或者说是 Java 客户端吗??

【问题讨论】:

    标签: wcf metadata


    【解决方案1】:

    使用 WCF 服务有 3 个选项:

    1. 如果服务公开 WSDL,请使用 VS(或其他平台的等效项)中的“添加服务引用”。请注意,如果您不想公开 WSDL,您可以暂时公开它,将 WSDL 保存在一个文件中,然后将其发送给任何平台中的用户以从中生成代理。您可以在保存 WSDL 后立即关闭它。另请注意,即使 WSDL 未公开,您仍需要保护 Web 服务免受未经授权的访问。

    2. 如果这是一个 .Net 客户端,它可以使用相同的 Service Contract 程序集进行编译并使用 ChannelFactory 等。

    3. 任何平台都可以向服务发送原始肥皂消息(例如 XML)。当然,他们需要知道什么是正确的格式。 WSDL 可以提供帮助,但即使没有它,如果他们有一个工作示例,他们也可以模仿它。

    【讨论】:

    • 默认情况下,WSDL 暴露在 GET 端点上,例如 localhost/Service.svc?WSDL。如果你没有改变它,它就在那里。您可以在 ServiceBehavior 元素的 serviceMetadata 元素中更改它。 Mex 不是必需的 - 它只是使用某些协议公开 WSDL 的一种奇特方式,默认 GET 就可以了
    【解决方案2】:

    WCF 提供 REST(表示状态传输)支持,以便非 .NET 客户端(如 JavaScript (AJAX)、java、Objective C、Web 浏览器等)使用它...

    基本上,WCF REST 是通过 HTTP 协议公开方法和传输数据,它支持所有 HTTP 操作(GET、POST、PUT 和 DELETE)。此功能使其独立于平台,并且不需要公开元数据。

    请参阅以下链接以获取有关 WCF REST 的更多信息:

    An Introduction To RESTful Services With WCF

    WCF REST Programming Model Overview

    WCF Rest vs. WCF SOAP

    Create RESTful WCF Service API: Step By Step Guide

    【讨论】:

    • 仅供参考,任何客户端都可以使用基于 SOAP 的 WCF。互操作性仅取决于所使用的传输协议。尽管您的回复与我的观点不符,但您的链接帮助了我
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2011-10-14
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多