Der Remoteserver hat einen Fehler zurückgegeben: (400) Bad Request beim Verzehr eines WCF-Dienst

Bitte sehen Sie den unten angegebenen code ein. Während der debug-erreicht die Anfrage.GetResponse () - Anweisung wird der Fehler geworfen wurde.

Uri uri = new Uri(address);
string data = "<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><HasRole xmlns='http://tempuri.org/'><userName>" + sid + "</userName><role>" + role + "</role></HasRole></s:Body></s:Envelope>";

data.Replace("'", "\"");

//Create a byte array of the data we want to send  
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data);

if (uri.Scheme == Uri.UriSchemeHttps)
{
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
    request.Method = "POST";//WebRequestMethods.Http.Post;
    request.ContentLength = byteData.Length;
    request.ContentType = "application/soap+xml; charset=UTF-8"; //"text/xml; charset=utf-8";
    //request.ContentType = "application/x-www-form-urlencoded";

    //Stream requestStream = request.GetRequestStream();
    using (Stream writer = request.GetRequestStream())
    {
        writer.Write(byteData, 0, byteData.Length);
    }
    //writer.Close();

    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
        //Get the response stream  
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string tmp = reader.ReadToEnd();
        Response.Close();
        Response.Write(tmp);
    }
  • Darf ich Fragen, warum auf der Heiligen Erde, Sie sind mit einem HttpWebRequest und manuell Schmieden einen HTTP-request zu konsumieren, einen WCF-Dienst anstatt einen automatisch generierten, stark typisierte proxy (der eine generiert, indem mithilfe der Add Service Reference Funktion in Visual Studio)?
  • Dieser code hat viele Probleme. 1) Nicht über "Add Service Reference", aber anstatt das Rad neu erfinden - schlecht. 2) Nicht alle Ihre IDisposable-Objekten sind in using Blöcke. Die StreamReader muss diese, zum Beispiel. 3) Erstellen von XML durch string-manipulation statt durch LINQ to XML oder eine andere XML-API.
Schreibe einen Kommentar