Can't connect to a remote wcf service from IIS
I am able to connect to a remote WCF service from a console or a website/webapplication running on a VS dev server successfully. However, when I try to connect from an IIS hosted website I'm getting the following error. Any idea?
No connection could be made because the target machine actively refused it 12.11.121.12:80
开发者_如何学Python
This error:
No connection could be made because the target machine actively refused it
Means that a connection request successfully got through to the target machine (it isn't a firewall issue), on a given port and the target machine was not listening for incoming connections on that port, so the OS refused the connection attempt.
The rest of your error identifies the machine 12.11.121.12
and the port number 80
that the connection was attempted on.
The error indicates that a server isn't running on the target machine. If you know a server is running on the machine you're attempting to connect to, because you can connect to it from another application, then this suggests that your connection details are misconfigured in the website.
So, some things to check:
- Are there any differences between the app.config/web.config configuration details for the target webservice? Specifically, the machine name (12.11.121.12) and the port number (80) would seem potentials.
- Are you running the IIS hosted website on the same machine as the console/web application that works? If not, do both machines resolve the target server name (are you using
someserver.org
for example rather than12.11.121.12
and it is being resolved to a different IP because one server is external facing and the other is internal?
This sounds a lot like a permissions (authentication issue) since the app pool is running under a different user (machine) by default. Since WCF uses the authentication token, I will bet this is your issue. Try setting the identity of the pool to the same user as the console, and I bet it will work fine.
Strangely I got this error when useDefaultWebProxy was "true" from a Web App, but exactly the same code and settings worked ok in a unit test class.
It turns out that the Web App was using the web-browser proxy (corporate policy) of https://foo/bar:1234. When I set this explicitely using:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name=...
useDefaultWebProxy="false" proxyAddress="https://foo/bar:1234"
...
I got the error:
The ServicePointManager does not support proxies with the https scheme
So I changed the proxy address to http, not https, and it worked.
精彩评论