none
Wie rufe ich den SOAP Server per HttpClient auf?? RRS feed

  • Frage

  • Hallo,

    ich habe eben mein Projekt auf .NET 6t umgestellt und bekomme den Hinweis, dass WebRequest.Create(string) veraltet ist und ich HttpClient  nutzen soll. Bisher habe ich folgenden Code genutzt.

    var req = (HttpWebRequest)WebRequest.Create(_url);
    req.ContentType = "application/soap+xml;charset=utf-8;action=" + $"\"{action}\"";
    req.Accept = "application/soap+xml;charset=utf-8";
    req.Method = "POST";
    req.Timeout = TipSoapCalls.TimeOut == 0 ? 100000 : TipSoapCalls.TimeOut;
    req.Credentials = _credential;
    Stream stream = null;
    try
    {
        stream = req.GetRequestStream();
        using StreamWriter stmw = new StreamWriter(stream);
        stmw.WriteAsync(body);
        stream = null;
    
    }
    finally
    {
        if (stream != null)
            stream.Dispose();
    }
    var response = req.GetResponse();
    if (response != null)
    {
        using StreamReader sr = new StreamReader(response.GetResponseStream());
        back = sr.ReadToEnd();
    }

    Kann mir hier jemand helfen wie ich den HttpClient nutzen kann?

    Danke im voraus.

    Grüße Ingo


    Samstag, 13. November 2021 19:56

Antworten

  • Hi Ingo,
    probiere es mal so:

          try
          {
            // Create an HttpClientHandler object and set to use default credentials
            HttpClientHandler handler = new HttpClientHandler();
            handler.UseDefaultCredentials = true;
            //   
            HttpClient client = new HttpClient(handler);
            // 
            // set OAuth
            client.DefaultRequestHeaders.Add("X-RequestDigest", formDigestValue);
            // 
            // post url
            string uriString = ...;
            //  
            // content from JSon string
            var content = new StringContent("...", Encoding.UTF8, "application/json");
            // 
            // post to create item
            var response = await client.PostAsync(uriString, content);
            // 
            //Response
            Console.WriteLine($"--------PostData: Response Post mit HttpClient{Environment.NewLine}{response}");
          }
          catch (Exception ex)
          {
            Console.WriteLine($"--------PostData: Error mit HttpClient{Environment.NewLine}{ex.ToString()}");
          }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert Ingo Manthey Montag, 15. November 2021 17:40
    Samstag, 13. November 2021 20:19
  • Hi Ingo,
    mein Beispiel war ein Beispiel für den Zugriff auf SharePoint. Und da wird zur Authentifizierung im request header mittels OAuth eine Zeichenkette benötigt, die ich mir in der formDigestValue gespeichert habe. Wenn du nicht die Standard-Credentials nutzen willst, dann nimm HttpClientHandler.Credentials.

    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert Ingo Manthey Dienstag, 16. November 2021 19:15
    Montag, 15. November 2021 21:24

Alle Antworten

  • Hi Ingo,
    probiere es mal so:

          try
          {
            // Create an HttpClientHandler object and set to use default credentials
            HttpClientHandler handler = new HttpClientHandler();
            handler.UseDefaultCredentials = true;
            //   
            HttpClient client = new HttpClient(handler);
            // 
            // set OAuth
            client.DefaultRequestHeaders.Add("X-RequestDigest", formDigestValue);
            // 
            // post url
            string uriString = ...;
            //  
            // content from JSon string
            var content = new StringContent("...", Encoding.UTF8, "application/json");
            // 
            // post to create item
            var response = await client.PostAsync(uriString, content);
            // 
            //Response
            Console.WriteLine($"--------PostData: Response Post mit HttpClient{Environment.NewLine}{response}");
          }
          catch (Exception ex)
          {
            Console.WriteLine($"--------PostData: Error mit HttpClient{Environment.NewLine}{ex.ToString()}");
          }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert Ingo Manthey Montag, 15. November 2021 17:40
    Samstag, 13. November 2021 20:19
  • Hallo Peter,

    danke das werde ich mal probierten!!

    Eine offene Frage habe ich noch:

    Wo trage ich die NetworkCredential ein.

    Was sind formDigestValue ??

    Grüße Ingo

    Montag, 15. November 2021 17:40
  • Hi Ingo,
    mein Beispiel war ein Beispiel für den Zugriff auf SharePoint. Und da wird zur Authentifizierung im request header mittels OAuth eine Zeichenkette benötigt, die ich mir in der formDigestValue gespeichert habe. Wenn du nicht die Standard-Credentials nutzen willst, dann nimm HttpClientHandler.Credentials.

    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert Ingo Manthey Dienstag, 16. November 2021 19:15
    Montag, 15. November 2021 21:24
  • Hallo Peter,

    Danke.

    Grüße Ingo

    Mittwoch, 17. November 2021 11:01
  • Hallo Peter,
    ich habe versucht deinen Code wie folgt angepasst.

    HttpClientHandler handler = new HttpClientHandler();
    handler.Credentials = _credential;
    HttpClient client = new HttpClient(handler);
    client.Timeout = new TimeSpan(0, 0, 0, 0, TipSoapCalls.TimeOut == 0 ? 100000 : TipSoapCalls.TimeOut);
    var testResponse =  client.PostAsync(_url, content).GetAwaiter().GetResult();
    string responseBody =  testResponse.Content.ReadAsStringAsync().GetAwaiter().GetResult();

    Es läuft ohne Probleme!

    Danke noch einmal für Deine Hilfe!!

    Grüße Ingo


    Mittwoch, 17. November 2021 11:47