【问题标题】:WCF routing and service metadataWCF 路由和服务元数据
【发布时间】:2012-11-03 10:23:36
【问题描述】:

我正在构建一个 WCF 路由器,它需要充当许多内部 Web 服务(WCF 和 ASMX)的代理。路由部分相当简单,但我不明白服务元数据交换在这个解决方案中是如何工作的。

换句话说:客户端如何为路由器后面的内部服务获取元数据?我是否需要手动向消费者提供 WSDL 文件?我可以以某种方式设置路由器以返回相应内部服务的元数据吗?

或者我的架构完全错误?

【问题讨论】:

  • 没有足够的信心将其发布为答案,但我确实相信手动提供 WSDL 文件是可行的方法; AFAIK 没有简单的方法可以直接路由元数据。有人问a smilar question on msdn 得到了类似的答案(也许你已经看到了)。
  • 是的,我已经看到了大部分答案。实际上,我已经成功地获得了直接从服务中提取元数据的附加路由,但这带来了新的困难——例如,从服务指向内部服务地址的 WSDL。我正在研究进一步的选择,一旦我有东西会在这里发布。

标签: wcf web-services soap wsdl wcf-routing


【解决方案1】:

我在这里看到 2 个选项:

  1. 如果您不想公开内部地址,可以选择创建“非透明”代理。优点是您可以做的不仅仅是路由消息(即此类代理可以充当“安全边界”,解开加密消息并将它们明文传递到内部端点)。它还可以提供“可互操作级别”,将 WCF 服务公开为使用相同数据类型/消息 XML 结构的简单 SOAP。缺点是您必须更新其代码以及代理服务
  2. 您可以实现 WSDL 重写器。有了它,您可以即时屏蔽内部服务 URL - 根据您的条件,简单的字符串替换可能就够了,也可能不够。

参考:

【讨论】:

  • 这如何帮助获取路由器后面的内部服务的元数据?您提供了不错的信息,但我不太明白这如何回答问题?
  • 我想说的是,您可以将内部端点替换为外部端点(这也适合所描述的架构 OP),或者您可以即时重写 WSDL ,在需要的地方用外部链接替换内部链接。您可以路由元数据,但是对于客户端仅连接到 WCF 路由器而不从原始服务中提取 WSDL,需要一些额外的步骤。
  • 实际上,IWsdlExportExtension 将是比消息检查器更好的方法。答案已编辑。
【解决方案2】:

同样的“路由器服务”也可以用来为路由器后面的内部服务获取单独的 WSDL。

查看this thread

【讨论】:

    【解决方案3】:

    您是否考虑过使用简单的 HTTP 代理?所有使用 REST 或 SOAP 的 WCF 都是其核心 HTTP 请求。似乎路由功能(我假设您基于主机名、URL 路径或参数)可以通过代理 HTTP 请求来执行,而无需了解内容。 ASP.Net 可以很好地自行清理传入的请求,但您始终可以根据需要添加额外的自定义过滤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 2011-09-11
      相关资源
      最近更新 更多