如果URL以.svc结尾并且应该运行SOAP Web服务,我该如何从中获取一些数据?
我试过了:
在所有情况下,我都会收到超时错误:
wall_time_sec
这是否意味着Web服务不起作用,或者我做错了方法?
答案 0 :(得分:1)
重要的是 - "服务不活跃" (并且我认为端口80上没有监听器),并且#34;端口未在防火墙中打开"。
如果问题只是你没有在端口80上监听服务,那么你就会得到像#34;连接重置"或"连接被拒绝"作为一个错误。
相反,您似乎已经超时,这意味着来自客户端的SYN无法到达服务器,或者来自服务器的SYN / ACK无法到达客户端。 [您可以通过在客户端和服务器上对端口80执行数据包捕获来验证这一点]
我很想检查服务器前面的任何防火墙,看看它是否允许来自客户端的80端口流量。
答案 1 :(得分:0)
如果没有更多细节,很难说,但考虑到你的超时错误:
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服务交互,可以使用许多命令行工具,以及您尝试过的选项,包括:
正如您所说它是一个SOAP Web服务,如果您有wsdl的URL,您通常可以使用Powershell SOAP WebService Proxies来与其进行交互。
wsdl位置有所不同,但通常位于类似于。
的网址如果配置正确,只需在浏览器中加载网址,就会显示一个包含指向wsdl的链接的页面。
一般的想法是:
$URI="http://hostname/path.svc?wsdl"
$Proxy = New-WebserviceProxy $URI –Namespace X
$Proxy | get-member -MemberType Method
这将返回代理上可以作为powershell方法调用的方法列表。在wsdl中定义的任何类型的参数,或从方法返回的类型都将在命名空间X中可用。调用方法将代理请求到服务,负责序列化参数并将结果序列化为powershell对象。