2017-01-17 10 views
1

を返し続ける:C#のSOAPコールは、この1いくつかの調査をやって、それについていくつかの記事を読んだ後、特に500エラー

私は次のコードを思いついた:

RequestingXMLData = @"<?xml version=""1.0"" encoding=""UTF-8""?> 
        <soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:urn=""urn:iaso-com:cloud:mansvc:15.12.0""> 
         <soapenv:Header/> 
         <soapenv:Body> 
          <urn:Authenticate> 
           <request> 
            <partnerName>XXX</partnerName> 
            <userName>XXX</userName> 
            <password>XXX</password> 
           </request> 
          </urn:Authenticate> 
         </soapenv:Body> 
        </soapenv:Envelope>"; 

//Retrieves XML Data from API link/service, optional to spit XML to a given file location 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ApiCallPath); 
request.Method = "POST"; 
request.ContentType = "text/xml;charset=\"utf-8\""; 
request.ContentLength = RequestingXMLData.Length; 
using (Stream webStream = request.GetRequestStream()) 
using (StreamWriter requestWriter = new StreamWriter(webStream, System.Text.Encoding.ASCII)) 
{ 
    requestWriter.Write(RequestingXMLData); 
} 

try 
{ 
    WebResponse webResponse = request.GetResponse(); 
    using (Stream webStream = webResponse.GetResponseStream()) 
    { 
     if (webStream != null) 
     { 
      using (StreamReader responseReader = new StreamReader(webStream)) 
      { 
       response = responseReader.ReadToEnd(); 
      } 
     } 
    } 
} 
catch (WebException e) 
{ 
    var resp = new StreamReader(e.Response.GetResponseStream()).ReadToEnd(); 

} 

return response; 

私はthe WebResponse webResponse = request.GetResponse();部分に500のエラーが発生し続けます。私がやった

Request Count: 1 
Bytes Sent:  85  (headers:85; body:0) 
Bytes Received: 107  (headers:107; body:0) 
Tunnel Sent:  1.740 
Tunnel Received: 4.900 

ACTUAL PERFORMANCE 
-------------- 
ClientConnected: 11:03:28.895 
ClientBeginRequest: 11:03:28.900 
GotRequestHeaders: 11:03:28.900 
ClientDoneRequest: 11:03:28.901 
Determine Gateway: 0ms 
DNS Lookup:   0ms 
TCP/IP Connect: 12ms 
HTTPS Handshake: 0ms 
ServerConnected: 11:03:28.916 
FiddlerBeginRequest: 11:03:28.916 
ServerGotRequest: 11:03:28.916 
ServerBeginResponse: 00:00:00.000 
GotResponseHeaders: 00:00:00.000 
ServerDoneResponse: 00:00:00.000 
ClientBeginResponse: 11:03:28.917 
ClientDoneResponse: 11:03:28.917 

    Overall Elapsed: 0:00:00.017 

RESPONSE BYTES (by Content-Type) 
-------------- 
~headers~: 107 

次のものが取得しようとしていた:私はフィドラーをダウンロードして(私はオフにすることができても、それを経験していない)私はそれから得る応答が正常に見えるいくつかの記事で示唆したように

WebExceptionこれは、返すものです: enter image description here

SOAP UIでテストしました。そこには、Javaエラーを修正したので(認証データも正しい)、動作しているようです。 。

いくつかの追加情報:私は理解/読みするのは非常に難しい見つけ= https://cloud.iaso.com/manserv

  • API情報https://www.iaso.com/kb/article.php?url=IASOARTICLE38
  • 呼ば

    • SOAPリンクは、私が何かをやったことがないことに注意してくださいSOAPを使用する前に、問題が明白に見える場合は、私のお詫びをお寄せください:)

    +1

    '新しいのStreamWriter(webStream、System.Text.Encoding.ASCII))' '後System.Text.Encoding.UTF8' – Stefan

    +0

    をお試しください(StreamWriter requestWriter = new StreamWriter(webStream、System.Text.Encoding.UTF8))例外: '要求が中止されました:リクエストがキャンセルされました。 ' – Nicolas

    +0

    うーん、それは奇妙なもう一度チェックしてみましょう – Stefan

    答えて

    4

    まずはあなたが言う:

    request.ContentType = "text/xml;charset=\"utf-8\""; 
    

    Translation: Hey, I've got a message, it's in the form of XML and UTF8 byte encoding.

    次に、あなたがこっそりとやる:

    using (StreamWriter requestWriter = 
          new StreamWriter(webStream, System.Text.Encoding.ASCII)) 
    
    ので

    Translation: Passing some dark ancient mysterious (clay)tablet, containing some ASCII.

    は、あなたの約束と使用に固執:

    using (StreamWriter requestWriter = 
          new StreamWriter(webStream, System.Text.Encoding.UTF8)) 
    

    ところで、UTF8ですあなたがSOAPやHTMLのようなXMLベースのものをやっているときに行く方法。

    中止された例外は、接続が事前に処理されているようです。 あなたが使用してブロック内のあなたのtry文を配置しようとする場合があります

    HttpWebRequest request = (HttpWebRequest) WebRequest.Create("") 
    
    request.Method = "POST"; 
    request.ContentType = "text/xml;charset=\"utf-8\""; 
    request.ContentLength = RequestingXMLData.Length; 
    using (Stream webStream = request.GetRequestStream()) 
    using (StreamWriter requestWriter = new StreamWriter(webStream, System.Text.Encoding.UTF8)) 
    { 
        requestWriter.Write(RequestingXMLData); 
    
        try 
        { 
         WebResponse webResponse = request.GetResponse(); 
         using (Stream webStream = webResponse.GetResponseStream()) 
         { 
          if (webStream != null) 
          { 
           using (StreamReader responseReader = new StreamReader(webStream)) 
           { 
            response = responseReader.ReadToEnd(); 
           } 
          } 
         } 
        } 
        catch (WebException e) 
        { 
         var resp = new StreamReader(e.Response.GetResponseStream()).ReadToEnd(); 
    
        } 
    } 
    
    +0

    コードを最後に更新されたコード部分に変更すると、いくつかのエラーが返されます。 'use(Stream webStream = webResponse.GetResponseStream()) 'のウェブストリームは、' webstream 'とは異なる意味を持つため、このスコープでは宣言できません。 'webstream2'に変更すると、エラーが発生します。 '[Begin] GetResponseを呼び出す前に、リクエストストリームにContentLengthバイトを書き込む必要があります。 – Nicolas

    関連する問題