【问题标题】:How to change web-service URL at runtime when using ATL library?使用 ATL 库时如何在运行时更改 Web 服务 URL?
【发布时间】:2012-11-30 20:53:09
【问题描述】:

我正在尝试使用另一家公司的现有网络服务,但在寻找解决方案以从不同位置使用相同网络服务时遇到了麻烦。

现有的 Web 服务可在地址 http://url.to.A/webservice/ 获得,我可以使用来自 ATL toolssproxy.exe 为该服务生成 C++ 代理类。

使用该类,我可以毫无问题地使用网络服务。

现在我需要从另一个 URL(比如http://url.to.B/webservice/)使用相同的 Web 服务,并且之前创建的代理类不起作用。方法代理之一中的SendRequest 方法总是返回错误的HRESULT 代码。专门为第二个服务生成一个新代理提供了一个可行的解决方案顺便说一句。

当我说服务相同时,我的意思是它们公开完全相同的方法,因此它们各自的 wsdl 定义文件仅在服务 URL 上有所不同。

我尝试更改生成的代理类实例的URL 属性,但没有帮助。

鉴于我被绑定到使用非托管 C++ 作为消费部分,并且我希望能够在运行时指定服务端点,是否有可行的解决方案来解决我的问题?

感谢您的帮助。

【问题讨论】:

    标签: c++ web-services unmanaged atl


    【解决方案1】:

    为每个服务器/服务生成一个单独的代理类。

    然后对生成的代码进行比较。这应该让您知道有什么区别。

    【讨论】:

    • 谢谢。差异仅与在类的不同位置硬编码的服务的 URL 有关,但在某些 ATL 结构的const 成员中...
    • 那么区别就在于服务器。也许是权限问题。可以用浏览器访问服务器吗?
    • 是的,“不幸的是”我可以通过浏览器访问这两个 URL...谢谢你的提示顺便说一句。
    • 不确定您是否正确,但我确实只有一个应用程序。它适用于两个代理。但我想知道它是否只能使用一个代理,因为最终网络服务位置应该是可配置的......感谢您的帮助。
    【解决方案2】:

    最终发现,使用sproxy.exe 生成一个可以动态分配给Web 服务端点的类是不可能的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多