如何连接到 SVC 端点?

How to connect to a SVC endpoint?

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

我试过:

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

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.

这是否意味着网络服务无法正常工作,或者我做事的方式不对?

诊断连接问题

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

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)。

在评论中,您说您对 URL 执行了 ping 操作,并且它正常响应 - 我认为这意味着您对主机名执行了 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 string or POST body中的参数。

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

从 SOAP Web 服务获取数据

正如您所说,它是一个 SOAP 网络服务,如果您有 wsdl 的 URL,您通常可以使用 Powershell SOAP WebService Proxies.

与其交互

wsdl 位置各不相同,但通常在 URL 看起来像。

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

大意是:

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

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

重要的是 - "service not active"(我的意思是端口 80 上没有侦听器)和 "port not open in firewall".

之间有很大区别

如果问题只是您没有在端口 80 上侦听的服务,您会收到类似 "connection reset" 或 "connection rejected" 的错误。

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

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