2017-09-07 5 views
0

Asp.net Web APIからのPOSTリクエストとしてXMLペイロードを持つサードパーティ製のレガシーサービスを呼び出す必要がありますが、例外があります。どのようにこれを達成するための任意のアイデアは大いに感謝されます。 SubmitRequest(のコード行 ストリームデータストリーム= webRequest.GetRequestStream())の実行にWebRequest.GetRequestStreamがAP.Net WebAPIから呼び出すときに例外をスローする

例外: は、基礎となる接続が閉じられました:予期しないエラーが送信で発生しました。 内部例外:トランスポート接続からデータを読み取ることができません:既存の接続がリモートホストによって強制的に閉じられました。

これをテストするには、WebRequest.Create行の有効なURLを使用して、HomeRequestアクションからSubmitRequest()プライベートメソッドを呼び出しただけです。

私は質問に実際のものの代わりに偽のURL(https://test.legacy3rdparty.com/API/API.aspx)を入れました。しかし、それは "https" URLです。

private static void SubmitRequest(string request) 
{ 
byte[] dataToSend = Encoding.UTF8.GetBytes(request); 

// Change the following URL to point to production instead of integration 
WebRequest webRequest = WebRequest.Create("https://test.legacy3rdparty.com/API/API.aspx"); 
webRequest.Method = "POST"; 
webRequest.ContentLength = dataToSend.Length; 
webRequest.ContentType = "text/xml"; 
try 
{ 
    Stream dataStream = webRequest.GetRequestStream(); //THIS LINE CAUSES THE EXCEPTION 
    dataStream.Write(dataToSend, 0, dataToSend.Length); 
    dataStream.Close(); 

    string response = string.Empty; 

    try 
    { 
     WebResponse apiResponse = webRequest.GetResponse(); 


     using (StreamReader sr = new StreamReader(apiResponse.GetResponseStream())) 
     { 
      response += sr.ReadToEnd(); 
     } 
    } 
    catch (WebException wex) 
    { 
     HttpWebResponse httpResponse = wex.Response as HttpWebResponse; 
     using (Stream responseStream = httpResponse.GetResponseStream()) 
     using (StreamReader reader = new StreamReader(responseStream)) 
     { 
      response = reader.ReadToEnd(); 
     } 
    } 
} 
catch (Exception ex) 
{ 

    throw; 
} 
// Call Parse Function for the XML response 
//ParseResponse(response); 
} 

答えて

0

これはTLSハンドシェイクと関係があります。だから、Web.configファイルの.netランタイムターゲットフレームワークを4.6に更新したとき、それは機能しました。

<system.web> 
<httpRuntime targetFramework="4.6" /> 
</system.web> 
関連する問題