gpt4 book ai didi

c# - 动态执行基于 SOAP 的 Web 服务而不生成代理

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:51 25 4
gpt4 key购买 nike

在我的应用程序中,最终用户可以从任何基于 SOAP 的 Web 服务获取数据并在应用程序中使用它。该应用程序提供了一个选项来动态注册服务。应用程序检查服务,显示可用操作和参数,最后执行选定的操作并使用响应,当然一切都在运行中。为了实现这一目标,需要遵循几个步骤:

  1. 通过 WSDL 发现服务
  2. 检查并选择一种方法
  3. 构建所需的参数值
  4. 执行服务
  5. 处理响应

我能够使用一些 WCF 类(如 DiscoveryClientProtocol、WsdlImporter、ServiceDescription、ServiceContractGenerator 等)即时发现服务。现在,我想执行它们并获取 SOAP 体内可用的响应 XML。

我能够通过使用上述库在运行时生成程序集来执行它,并通过反射执行方法。如果我必须在一个盒子上一次性完成所有操作,这个解决方案就可以正常工作。但是当我们横向扩展时它会增加复杂性。这意味着,一台服务器生成代理,另一台服务器使用代理并使用服务。

是的,我们可以将新生成的程序集保存在共享位置的某个地方并使用它们。但我想避开他们。我们希望将服务定义本地保存在 DB 中的某个位置,执行它而不生成程序集,并且只使用 SOAP 体内可用的 XML。

提前感谢有关如何实现此目标的建议?

最佳答案

要在没有代码生成的情况下与 WCF 服务通信,您可以使用 ChannelFactory< T >其中 T 是服务接口(interface)。

显然,在您的情况下,服务接口(interface)在编译时是未知的,因此您的目标是动态生成此类型,或者更好的是使用不依赖强类型并允许您动态调用方法的自定义 ChannelFactory 实现或编程方式。

您可以使用 WsdlImporter在运行时导入 WSDL,它可以为您提供 ContractDescription秒。从那里你可以使用 ContractType作为您的服务界面,但我不确定。您可能需要编写自己的 ChannelFactory...

关于c# - 动态执行基于 SOAP 的 Web 服务而不生成代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24731733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com