wake-up-neo.net

500 interner Serverfehler bei GetResponse ()

Ich habe eine Aspx-Seite mit starkem Datenverkehr, die einen Webservice auf Anfrage jedes Benutzers aufruft.

string uri = "Path.asmx";
string soap = "soap xml string";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Headers.Add("SOAPAction", "\"http://xxxxxx"");
request.ContentType = "text/xml;charset=\"utf-8\"";
request.Accept = "text/xml";
request.Method = "POST";

using (Stream stm = request.GetRequestStream())
{
    using (StreamWriter stmw = new StreamWriter(stm))
    {
        stmw.Write(soap);
    }
}
WebResponse response = request.GetResponse();
response.close();

Alles funktioniert gut, aber manchmal bekomme ich den folgenden Fehler.

Der Remote-Server hat einen Fehler zurückgegeben: (500) Interner Serverfehler . bei System.Net.HttpWebRequest.GetResponse ()

Hat jemand eine Ahnung von diesem Fehler oder kann mir jemand sagen, ob ich etwas falsch mache?.

21
Krishna

Schließlich werde ich die interne Serverfehlermeldung mit dem folgenden Code los. Nicht sicher, ob es einen anderen Weg gibt, um es zu erreichen.


string uri = "Path.asmx";
string soap = "soap xml string";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Headers.Add("SOAPAction", "\"http://xxxxxx"");
request.ContentType = "text/xml;charset=\"utf-8\"";
request.Accept = "text/xml";
request.Method = "POST";

using (Stream stm = request.GetRequestStream())
{
    using (StreamWriter stmw = new StreamWriter(stm))
    {
        stmw.Write(soap);
    }
}

using (WebResponse webResponse = request.GetResponse())
{
}
4
Krishna

Bei mir trat dieser Fehler auf, weil ich zwei Web-API-Aktionen hatte, die genau die gleichen Signaturen hatten und beide die gleichen Verben hatten, nämlich HttpPost. Ich habe eines der Verben (das zur Aktualisierung verwendete) in PUT geändert und der Fehler wurde entfernt . Die folgenden Informationen in meiner catch-Anweisung halfen, das Problem an der Wurzel zu finden:

catch (WebException webex)
{
                WebResponse errResp = webex.Response;
                using (Stream respStream = errResp.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(respStream);
                    string text = reader.ReadToEnd();
                }
}
40

Aufgrund dieses Fehlers würde ich sagen, dass Ihr Code gut ist, zumindest der Teil, der den Webservice aufruft. Der Fehler scheint im eigentlichen Webservice zu liegen.

Um den Fehler vom Webserver zu erhalten, fügen Sie einen try catch und eine WebException hinzu. Eine WebException hat eine Eigenschaft namens Response, die eine HttpResponse ist. Sie können dann alles, was zurückgegeben wird, protokollieren und Ihren Code hochladen. Schauen Sie später in den Protokollen nach und sehen Sie, was tatsächlich zurückgegeben wird.

21
FallenAvatar

Haben Sie versucht, UserAgent für Ihre Anfrage anzugeben? Zum Beispiel:

request.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
5
Roman Gudkov

Für mich war der Fehler irreführend. Ich habe den wahren Fehler entdeckt, als ich den fehlerhaften Webservice mit SoapUI getestet habe.

0
Graham Laight

In meinem Fall wurde mein Anfrageobjekt vom Basisobjekt geerbt. Ohne wissentlich habe ich eine Eigenschaft mit int hinzugefügt? in meinem Anforderungsobjekt und meinem Basisobjekt hat auch dieselbe Eigenschaft (gleicher Name) mit int-Datentyp. Ich bemerkte dies und löschte die Eigenschaft, die ich im Anforderungsobjekt hinzugefügt hatte. Danach funktionierte es einwandfrei.

0
Ziggler

In meinem Fall entferne ich einfach die SoapAction-Anweisung aus dem HttpWebRequest-Objekt. Also definiere ich .Headers.Add("SOAPAction","someurl") nicht in HttpWebRequest Definitionen und mein Code funktioniert einwandfrei.

ResultXML ist eine XDocument.ResultString ist eine Zeichenfolge.

try
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url);
    //req.Headers.Add("SOAPAction", "http://tempuri.org/IWebService/GetMessage");
    req.ProtocolVersion = HttpVersion.Version11;
    req.ContentType = "text/xml;charset=\"utf-8\"";
    req.Accept = "text/xml";
    req.KeepAlive = true;
    req.Method = "POST";        

    using (Stream stm = req.GetRequestStream())
    {
        using (StreamWriter stmw = new StreamWriter(stm))
            stmw.Write(soapStr);
    }
    using (StreamReader responseReader = new StreamReader(req.GetResponse().GetResponseStream()))
    {
        string result = responseReader.ReadToEnd();
        ResultXML = XDocument.Parse(result);
        ResultString = result;      
    }
}

wenn Sie Ihre Fehlermeldung zuerst ansehen, würde ich Ihnen vorschlagen, Ihre gesamte Anwendung neu zu kompilieren. Stellen Sie sicher, dass sich alle erforderlichen DLLs im Ordner bin befinden, wenn Sie sie neu kompilieren.

0
Santhosh Legent