WebRequestクラスを使用して、別のサーバーでホストされているWebサービスに接続しようとしました。 Webサービスは、文字列を応答として返します。そうしているときにエラーが発生します:
「System.Net.Sockets.SocketException:ターゲットマシンが積極的に拒否したため、接続できませんでした」
System.Net.WebException:リモートサーバーに接続できません---> System.Net.Sockets.SocketException:ターゲットマシンがSystem.Net.Sockets.Socketで127.0.0.1:14012を積極的に拒否したため、接続できませんでした.DoConnect(EndPoint endPointSnapshot、SocketAddress socketAddress)at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure、Socket s4、Socket s6、Socket&socket、IPAddress&address、ConnectSocketState state、IAsyncResult asyncResult、Exception&exception)---内部例外スタックの終わりtrace --- System.Net.HttpWebRequest.GetRequestStream()でSystem.Net.HttpWebRequest.GetRequestStream(TransportContext&context)でLimoallover.InsertSoapEnvelopeIntoWebRequestUS(XmlDocument soapEnvelopeXml、HttpWebRequest webRequest)でLimoallover.dawUpdateDriverStatus(String apiId、String apiKey、String ripKey、 Limoallover.UpdateJobStatus(String Lat、String Lng、Int32 DriverID、Int32 nJobStatus、Int32 nJobId、String Company)のString tripCode、String statusCode) ID、String idTrip、String tripCode、String statusCode)
private HttpWebRequest CreateWebRequestUS(string url, string action)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Headers.Add("SOAPAction", action);
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
return webRequest;
}
private XmlDocument CreateSoapEnvelopeUS(string apiId, string apiKey, string idTrip, string tripCode, string statusCode)
{
XmlDocument soapEnvelop = new XmlDocument();
string xml = "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
xml = xml + @"<soap:Body>";
xml = xml + "<UpdateTripStatus xmlns=\"https://book.mylimobiz.com/api\">";
xml = xml + @"<apiId>" + apiId + "</apiId>";
xml = xml + @"<apiKey>" + apiKey + "</apiKey>";
xml = xml + @"<idTrip>" + idTrip + "</idTrip>";
xml = xml + @"<tripCode>" + tripCode + "</tripCode>";
xml = xml + @"<statusCode>" + statusCode + "</statusCode>";
xml = xml + @"</UpdateTripStatus>";
xml = xml + @"</soap:Body>";
xml = xml + @"</soap:Envelope>";
soapEnvelop.LoadXml(xml);
return soapEnvelop;
}
private static void InsertSoapEnvelopeIntoWebRequestUS(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest)
{
using (Stream stream = webRequest.GetRequestStream())
{
soapEnvelopeXml.Save(stream);
}
}
6日後、私は私を夢中にさせる答えを見つけました!答えはweb.configファイルでプロキシを無効にすることです:
<system.net>
<defaultProxy>
<proxy usesystemdefault="False"/>
</defaultProxy>
</system.net>
例外メッセージは、同じホスト(127.0.0.1)に接続しようとしているが、サーバーが別のホストで実行されていることを示していることを示しています。 URLに「localhost」が含まれるなどの明らかなバグや、DNS設定を確認したい場合もあります。
Fiddlerを起動すると、この問題はなくなりました。問題が発生する前に私のマシンで使用していました。おそらくFiddlerがプロキシである何か。
Visual Studio 2013でのデバッグでWCFベースの HttpSelfHostServer を実行しようとすると、同様の問題が発生しました。可能なすべての方向を試しました(ファイアウォールをオフにし、IIS localhostポートが他のサービスなどによって使用される可能性を排除するため)。
最終的に、「トリックをやった」(問題を解決した)ことは、VisualStudio 2013をAdministratorとして再実行することでした。
すごい。
以前は正常に動作していたサイトでも同じ問題が発生しました。 C:\WINDOWS\Microsoft.NET\Framework\v#.#.#####\Temporary ASP.NET Files\@proyectName\###CC##C\###C#CC
から一時ファイルを削除することで問題を解決しました
接続をブロックしているファイアウォールがあるか、サービスをホストしているプロセスがそのポートでリッスンしていない。または、別のポートでリッスンしています。
実行による一時ファイルの削除>%temp%
そして、管理者として実行してVS2015を開き、
わたしにはできる。
Fiddlerの実行中にこれがある場合-> Fiddlerで、「ルール」に移動して「自動認証」を無効にすると、再び機能するはずです。
config file transformsがある場合、パブリッシュプロファイル内で正しい構成が選択されていることを確認してください。 (公開>設定>構成)
同じ問題があった場合、Windowsファイアウォールが接続をブロックしていることが判明しました。 Windowsファイアウォールをしばらく無効にして、問題が解決するかどうか、必要に応じてポートを開くかどうかを確認してください。
Web要求を作成するプロキシ設定にnew WebProxy()を追加します。
例:-
string url = "Your URL";
System.Net.WebRequest req = System.Net.WebRequest.Create(url);
req.Proxy = new WebProxy();
System.Net.WebResponse resp = req.GetResponse();
req.Proxy = new WebProxy()プロキシ設定を処理し、コードが正常に機能するようにします。