web-dev-qa-db-fra.com

500 erreur de serveur interne à GetResponse ()

J'ai une page de trafic lourd aspx appelant un service Web à la demande de chaque utilisateur comme suit.

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();

Tout fonctionne bien mais parfois j'obtiens l'erreur suivante.

Le serveur distant a renvoyé une erreur: (500) Erreur interne du serveur . sur System.Net.HttpWebRequest.GetResponse ()

Est-ce que quelqu'un a une idée de cette erreur ou quelqu'un peut-il me dire si je me trompe?.

21
Krishna

Enfin, je me débarrasse du message d'erreur du serveur interne avec le code suivant. Pas sûr s'il y a un autre moyen d'y parvenir.


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

Pour moi, cette erreur est due à deux actions de l'API Web ayant exactement la même signature et les mêmes verbes, HttpPost. J'ai modifié l'un des verbes (celui utilisé pour la mise à jour) en PUT. . Ce qui suit dans ma déclaration de capture a aidé à aller au fond du problème:

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

De cette erreur, je dirais que votre code est correct, du moins la partie qui appelle le service Web. L'erreur semble être dans le service Web réel.

Pour obtenir l'erreur du serveur Web, ajoutez un catch catch et attrapez une WebException. Une exception WebException a une propriété appelée Response qui est un HttpResponse. vous pouvez ensuite enregistrer tout ce qui est retourné et télécharger votre code. Revenez plus tard dans les journaux et voyez ce qui est réellement renvoyé.

21
FallenAvatar

Avez-vous essayé de spécifier UserAgent pour votre demande? Par exemple:

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

Pour moi, l'erreur était trompeuse. J'ai découvert la véritable erreur en testant le service Web erroné avec SoapUI.

0
Graham Laight

Dans mon cas, mon objet de requête hérité de l'objet de base. Sans sciemment, j'ai ajouté une propriété avec int? dans mon objet request et mon objet de base a également la même propriété (même nom) avec int datatype. J'ai remarqué cela et supprimé la propriété que j'avais ajoutée dans l'objet de requête et après cela fonctionnait correctement.

0
Ziggler

Dans mon cas, je supprime simplement l'instruction SoapAction de l'objet HttpWebRequest. Donc, je ne définis pas .Headers.Add("SOAPAction","someurl") dans les définitions HttpWebRequest et mon code fonctionne bien.

ResultXML est une XDocument.ResultString est une chaîne.

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;      
    }
}

en regardant tout d’abord votre message d’erreur, je vous suggère de recompiler l’ensemble de votre application. Assurez-vous que toutes les dll requises sont dans le dossier bin lorsque vous le recompilez.

0
Santhosh Legent