【问题标题】:How to connect to a SVC endpoint?如何连接到 SVC 端点?
【发布时间】:2016-12-19 08:31:28
【问题描述】:

给定一个以 .svc 结尾并且应该运行 SOAP Web 服务的 URL,我如何从中获取一些数据?

我试过了:

  • 通过网络浏览器访问它
  • 通过 Python 的库 Zeep 访问它
  • 通过 Microsoft 实用程序 svcutil.exe 访问它

在所有情况下,我都会收到超时错误:

Failed to establish a new connection: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time.

这是否意味着网络服务不工作,或者我做错了事情?

【问题讨论】:

  • 如果您尝试 ping URL 会发生什么?
  • 网址正常响应。 (对不起,我不能给你网址,因为它是机密信息)

标签: soap wsdl svcutil.exe


【解决方案1】:

重要的是 - “服务未激活”(我的意思是端口 80 上没有侦听器)和“端口未在防火墙中打开”之间存在很大区别。

如果问题仅仅是因为您没有服务在端口 80 上进行侦听,那么您会收到类似“连接重置”或“连接被拒绝”这样的错误消息。

相反,您似乎遇到了超时,这意味着来自客户端的 SYN 没有到达服务器,或者来自服务器的 SYN/ACK 没有到达客户端。 [您可以通过在客户端和服务器上对端口 80 进行数据包捕获来验证这一点]

我很想检查服务器前面的任何防火墙,看看它是否允许来自您的客户端的端口 80 流量通过。

【讨论】:

    【解决方案2】:

    诊断连接问题

    没有更多细节很难说,但考虑到你的超时错误:

    Failed to establish a new connection: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time.

    这表示 TCP 级别的网络连接错误,因此很可能 Web 服务在您使用的端口上未激活(http 的默认值为 80,https 的默认值为 443)。

    在评论中您说您 ping 了 URL 并且它正常响应 - 我认为这意味着您 ping 了主机名。如果它正常响应,则表示服务器处于活动状态,但这并不能告诉您有关该服务器上 Web 服务可用性的任何信息。

    telnet %hostname% %port%
    

    其中 %port% 对于 http 是 80,对于 https 是 443,或者如果您正在使用的 URL 中有端口号(例如 http://somehost.somewhere.com:port/path.scv

    如果 ping 正常但 telnet 未连接,则服务未激活。

    我怀疑是这种情况。如果服务处于活动状态并且只是您错误地请求数据,我相信您会收到不同的错误消息 - 例如状态码为 500 或 404 或类似的有效 HTTP 响应。

    从 Web 服务获取数据

    关于如何从中获取数据的原始问题 - 一旦您验证服务处于活动状态,获取数据的方法将取决于服务的规范 - 即:

    1. 它支持哪些 HTTP 方法(GET、POST 等)
    2. 需要什么参数
    3. 需要什么格式的参数
    4. query stringPOST body中的参数。

    要与 Web 服务交互,可以使用许多命令行工具,以及您尝试过的选项,包括:

    从 SOAP Web 服务获取数据

    正如您所说,它是一个 SOAP Web 服务,如果您有 wsdl 的 URL,您通常可以使用 Powershell SOAP WebService Proxies 与它进行交互。

    wsdl 的位置各不相同,但通常位于类似的 URL。

    此外,如果配置正确,只需在浏览器中加载 URL 就会显示一个带有 wsdl 链接的页面。

    大体思路是:

    $URI="http://hostname/path.svc?wsdl"
    $Proxy = New-WebserviceProxy $URI –Namespace X
    $Proxy | get-member -MemberType Method
    

    这将返回代理上的方法列表,您可以将其作为 powershell 方法调用。 wsdl 中定义的参数所需或从方法返回的任何类型都将在命名空间 X 中可用。调用方法会将请求代理到服务,负责将参数序列化并将结果序列化为 powershell 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      相关资源
      最近更新 更多