4

Given a URL that ends with .svc and that is supposed to run a SOAP web service, how can I get some data from it?

I tried:

  • to access it via a web browser
  • to access it via the Python's library Zeep
  • to access it via the Microsoft utilitary svcutil.exe

In all cases, I get a timeout error:

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.

Does it mean that the web service does not work, or that I do things the wrong way?

Arnaud
  • 4,884
  • 17
  • 54
  • 85

2 Answers2

1

Diagnosing Connectivity Issues

Without more details it is difficult to say, but given your timeout error:

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.

This indicates a network connectivity error at the TCP level, so it is likely web service is not active on the port your are using (default of 80 for http, 443 for https).

In a comment you said you pinged the URL and it responded normally - I assume this means you pinged the hostname. If this is responding normally it means the server is active, but that doesn't tell you anything about the availability of the web service on that server.

telnet %hostname% %port%

where %port% is 80 for http or 443 for https, or something else if there is a port number in the URL you are using (e.g. http://somehost.somewhere.com:port/path.scv)

If ping works and telnet does not connect, then the service is not active.

I suspect this is the case. If the service was active and it was simply that you requesting the data incorrectly, I believe you'd get a different error message - e.g. a valid HTTP response with status code 500 or 404 or similar.

Getting Data from a Web Service

As to your original question as to how to get data from it - once you verify that the service is active, the method to get the data will depend on the specification of the service - i.e.:

  1. which HTTP methods (GET, POST, etc.) does it support
  2. what parameters it requires
  3. what format it requires the parameters in
  4. are the parameters in the query string or POST body.

To interact with a web service there are many command line tools that can be used, as well as the options you have tried, including:

Getting Data from a SOAP Web Service

As you have said it is a SOAP web service, if you have the URL for the wsdl, you can often interract with it using Powershell SOAP WebService Proxies.

The wsdl location varies, but is often at a URL that looks something like.

Also if it's configured correctly, just loading the URL in a browser will present a page with a link to the wsdl.

The general idea is:

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

This will return a list of methods on the proxy that you can invoke as powershell methods. Any types defined in the wsdl that are needed for arguments, or returned from methods will be available within the namespace X. Invoking the methods will proxy the request to the service, taking care of serializing parameters and serializing results into powershell objects.

Chris Simon
  • 6,185
  • 1
  • 22
  • 31
1

Importantly - there is a big distinction between "service not active" (and by that I mean no listener on port 80), and "port not open in firewall".

If the problem were simply that you didn't have a service listening on port 80, you would have gotten something like "connection reset" or "connection rejected" as an error.

Instead, you appear to have gotten a timeout, which implies that either the SYN from the client doesn't reach the server, or the SYN/ACK from the server doesn't reach the client. [ You could verify this by doing a packet capture for port 80 on both client and server ]

I would be tempted to check any firewall in front of the server to see that it's letting port 80 traffic through from your client.

Kevin
  • 1,120
  • 6
  • 13