【问题标题】:How to add/remove ports from WSDL service tag?如何从 WSDL 服务标签中添加/删除端口?
【发布时间】:2015-04-24 16:32:20
【问题描述】:

我使用 C# WCF 创建了一个 Web 服务,该服务通过 IIS 托管。是否有任何设置可以隐藏/删除端口并使服务标签看起来像这样?设置是在 IIS 服务器上,还是在 web 服务 web.config 文件中?

基本上,我该如何选择让它(或不让它)看起来像这样?

<wsdl:service name="GameService" />

澄清:我想知道在 IIS 或 web.config 中是否有允许完全隐藏或显示所有已配置端口的设置。

其他问题:WSDL 不读取 Web.Config 文件吗? IIS 生成 WSDL,还是服务生成?

进一步澄清:这是解决this question 的尝试,但没有得到答复。这个问题试图简化和改写,以便我真正得到可能的解决方案。

【问题讨论】:

  • 最简单的方法是让 IIS 提供 static WSDL,即您可以按照自己的方式自定义的文本文件。缺点是当您更改服务中的任何内容时,您必须记住保持静态 WSDL 同步。第二种选择是查看 WSDL 生成的扩展点,here's a starting point
  • 忘记添加了,静态 WSDL 文件在 web.config 中引用如下:&lt;serviceMetadata externalMetadataLocation="Path\To\YourCustom.wsdl" /&gt;
  • 重新考虑通过从 WSDL 中删除端口来解决的实际问题可能是值得的 - 这是一种不寻常的情况。也许这是XY problem
  • 感谢上下文告诉我我误解了这个问题(它 is XYish 恕我直言;)。我什至有一个有根据的猜测:在您链接的问题中,我发现了&lt;webHttpBinding&gt;。 IIRC 这是一个基于 REST 的绑定,而 WSDL 是 SOAP。如果有帮助,请检查此问题:stackoverflow.com/q/3040165/626761

标签: c# web-services wcf iis wsdl


【解决方案1】:

答案:基于 SOAP 的端点绑定在 WSDL 中列出,基于 REST 的没有。

端点绑定有两种不同的类型:SOAP 和 REST。您的服务可以将两者都包含在 web.config 文件中,只要它们具有不同的地址,但只有 SOAP 端点会在 WSDL 中列出。不需要额外的设置或配置,只要是受支持的类型,服务就会自动获取这些信息。

webHttpBinding 是一个基于 REST 的端点绑定。它适用于使用该服务的 JSON/JavaScript 客户端,但不会在 WSDL 中列出。

basicHttpBinding 是一个基于 SOAP 的端点绑定。它适用于 C# 客户端。如果您使用 Visual Studio 添加服务引用,它会自动将这些端点添加到您的 app.config 文件中,因为该信息已在 WSDL 中列出,所以它可以执行此操作。

感谢@nodots 让我指明了正确的方向。

【讨论】:

    【解决方案2】:

    根据MSDN

    ServiceDescription 实例映射到 wsdl:service 元素。一个 ServiceDescription 实例包含一组 ServiceEndpoint 实例,每个实例都映射到单独的 wsdl:port 元素。

    因此,您应该添加/删除 ServiceEndpoint 以影响生成的 WSDL 中的端口部分。

    Here 是 ServiceEndpoints 的描述,还有一个示例,您可以查看如何添加/删除它们。我不确定您是否可以在没有至少一个端口的情况下拥有功能服务。

    希望这会有所帮助。

    【讨论】:

    • 我认为这不能回答问题。问题是如何从 WSDL 中删除 &lt;wsdl:port&gt; 条目,而不是如何重命名服务。
    • 这仍然取决于他的情况下的实现。如果他修改注解以达到他想要的效果会更好,否则他每次都必须更新静态 WSDL。
    • @aherocalledFrog 在这里,我更新了它。对不起,我误会了。
    • @PlamentPetrov 感谢您的编辑和帮助!我在 Web.Config 文件中有功能服务端点,并且 IIS 处理寻址。链接的文章没有提到任何 .config 文件,而是在代码中创建端点。 WSDL 不读取 Web.Config 文件吗? IIS 是生成 WSDL,还是服务生成?
    • @aherocalledFrog - IIS 是处理通信的服务器。它为请求提供服务,但不处理 Web 服务和 WSDL 内部。在这种情况下,我认为 WSDL 是代码优先方法的产物。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多