WinForms application fails making SOAP call on users desktop insidecorporate network.

J

JDeats

I'm in a situation where it's difficult to get on-site and
troubleshoot, so I'm looking for scenarios from those experienced on
what might be causing this problem.

I have a .NET 2.0 WinForms based application that that has a few web
references. The application makes the first web service/SOAP call when
the user first launches the app to submit product registration
information. The user is getting an generic "network error message"
that I've created to display when a general Exception is thrown, the
only thing I can confirm is the exception is being thrown when the web
service call is being made.

This application has been tested on many different systems with varied
configurations with no problems, so I assume it's something blocking
the application from port 80.

If you had to troubleshoot this issue without being able to "remote
in" or go on site and you could only use very little of the end users
time to troubleshoot the problem what would your approach be?
 
P

Pavel Minaev

JDeats said:
I have a .NET 2.0 WinForms based application that that has a few web
references. The application makes the first web service/SOAP call when
the user first launches the app to submit product registration
information. The user is getting an generic "network error message"
that I've created to display when a general Exception is thrown, the
only thing I can confirm is the exception is being thrown when the web
service call is being made.

This application has been tested on many different systems with varied
configurations with no problems, so I assume it's something blocking
the application from port 80.

If you had to troubleshoot this issue without being able to "remote
in" or go on site and you could only use very little of the end users
time to troubleshoot the problem what would your approach be?

I'd design the application so that it has a detailed log facility that could
be enabled easily (command-line switch, config file, or some checkbox in
Options->Advanced) in the first place, explain the end user how to enable
it, and ask for the logs :)

Seriously though, that's precisely why you should at least log details of
every exception that gets thrown, even if you don't show all the gory bits
to the user.

If you don't have the logs, then there isn't much that can be done there.
You could ask them to open the same web service URL in the browser, and see
if they get any error - if it's a connectivity or authentication issue, it
might clear things up.

Alternatively, you could quickly whip up a simple test client for the web
service that'd make the call and log every bit, give it to them, and ask to
run it.
 
A

Alberto Poblacion

JDeats said:
I'm in a situation where it's difficult to get on-site and
troubleshoot, so I'm looking for scenarios from those experienced on
what might be causing this problem.

I have a .NET 2.0 WinForms based application that that has a few web
references. The application makes the first web service/SOAP call when
the user first launches the app to submit product registration
information. The user is getting an generic "network error message"
that I've created to display when a general Exception is thrown, the
only thing I can confirm is the exception is being thrown when the web
service call is being made.

This application has been tested on many different systems with varied
configurations with no problems, so I assume it's something blocking
the application from port 80.

If you had to troubleshoot this issue without being able to "remote
in" or go on site and you could only use very little of the end users
time to troubleshoot the problem what would your approach be?

I presume that your program is connecting from inside the corporate
intranet to a server that sits on the Internet. The first question would be,
"Can the users navigate the Internet from their desktops?" In that case, how
is their browser configured? For instance, if the browser is configured to
go through a Proxy, you have to configure your web service client to go
through the same Proxy. And if the proxy requires the user's credentials,
your code has to provide the same credentials when using the proxy.
If they are going through a corporte firewall, maybe it only allows
access to a limited set of servers. Make sure that the firewall is not
blocking access to your server. You can verify this by way of instructing a
user to open a browser and navigate to a web page on the same server that
hosts the webservice. Unfortunately, if it doesn't work, there is nothing
you can do in your code to fix it; the network administrators on the client
site would need to get involved.
 
J

JDeats

I'd design the application so that it has a detailed log facility that could
be enabled easily (command-line switch, config file, or some checkbox in
Options->Advanced) in the first place, explain the end user how to enable
it, and ask for the logs :)

Seriously though, that's precisely why you should at least log details of
every exception that gets thrown, even if you don't show all the gory bits
to the user.

If you don't have the logs, then there isn't much that can be done there.
You could ask them to open the same web service URL in the browser, and see
if they get any error - if it's a connectivity or authentication issue, it
might clear things up.

Alternatively, you could quickly whip up a simple test client for the web
service that'd make the call and log every bit, give it to them, and ask to
run it.

Thanks, the application does have a log switch and I have buit small
test applications as the one you describe before to isolate the
problem.... The problem is I am not able to take these sort of steps
with this user.
 
J

JDeats

I presume that your program is connecting from inside the corporate
intranet to a server that sits on the Internet. The first question would be,
"Can the users navigate the Internet from their desktops?" In that case, how
is their browser configured? For instance, if the browser is configured to
go through a Proxy, you have to configure your web service client to go
through the same Proxy. And if the proxy requires the user's credentials,
your code has to provide the same credentials when using the proxy.
If they are going through a corporte firewall, maybe it only allows
access to a limited set of servers. Make sure that the firewall is not
blocking access to your server. You can verify this by way of instructing a
user to open a browser and navigate to a web page on the same server that
hosts the webservice. Unfortunately, if it doesn't work, there is nothing
you can do in your code to fix it; the network administrators on the client
site would need to get involved.

Thanks, good tips! While it seems an obvious No for security reasons,
I'm curious if there is a way to extract Proxy settings from Internet
Explorer programmaticly and then use those properties to set up my web
service? If not, the answer seems to be, build proxy server
configuration into the application and having someone from helpdesk/
support come to each user who installs the application and configure
proxy server settings.

The joys of corporate network infrastructure.
 
A

Alberto Poblacion

JDeats said:
I'm curious if there is a way to extract Proxy settings from Internet
Explorer programmaticly

I'm not aware of an API to get those values, but they get written into
the Windows Registry, so you could read them from there.
and then use those properties to set up my web
service?

Using them to set up your web service client should be easy. When you
create an instance of the class that acts as a proxy for your web service
(don't get confused by the fact that the class is called a "proxy" at the
same time that communications go through a "proxy" server), it has a
property called Proxy where you can assign a WebProxy constructed from the
configured values.
If not, the answer seems to be, build proxy server
configuration into the application and having someone from helpdesk/
support come to each user who installs the application and configure
proxy server settings.

Even if you are reading the default settings from the Registry, it would
still be a good idea to build a configuration tool into your application, in
case it needs to be configured differently than Internet Explorer (for
instance, if it needs to use a different proxy for security reasons, or if
you need to supply fixed user credentials rather than using the current
Windows user).
 
J

Jeff Dillon

JDeats said:
Thanks, good tips! While it seems an obvious No for security reasons,
I'm curious if there is a way to extract Proxy settings from Internet
Explorer programmaticly and then use those properties to set up my web
service? If not, the answer seems to be, build proxy server
configuration into the application and having someone from helpdesk/
support come to each user who installs the application and configure
proxy server settings.

The joys of corporate network infrastructure.

I support a similar application. It works just fine with no proxy
configuration here at work going through the corporate proxy, and at home,
going through my ISP. Either way it works. As suggested earlier, have the
end user open a browser and see if they can hit the web service wsdl.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top