如何连接到SVC端点?

时间:2016-08-12 10:43:39

标签: soap wsdl svcutil.exe

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

我试过了:

  • 通过网络浏览器访问
  • 通过Python的库Zeep
  • 访问它
  • 通过Microsoft utilitary svcutil.exe
  • 访问它

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

wall_time_sec

这是否意味着Web服务不起作用,或者我做错了方法?

2 个答案:

答案 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服务获取数据

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

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

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

    从SOAP 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对象。