2010-10-27 25 views
0

J'ai un problème lors de la publication de données XML à l'aide de HttpWebRequest. En fait, je veux Post 3 variables de formulairePublication de données XML avec certains champs Utilisation de .net HttpWebRequest

2 d'entre eux sont pour les informations d'identification et le troisième est pour les données XML à une API, L'API va authentifier et traiter les données XML, et retournera le succès si aucune erreur trouvée.

Voici ce que dit la documentation.

Les données seront transmises à la passerelle via un message HTTPS FORM et une valeur de chaîne "succès" sera renvoyée lors de la réception des données. Trois variables FORM au total seront affichées, dont deux contiendront des informations d'identification et la troisième contiendra les données HR-XML. Une valeur de chaîne "error" sera retournée si l'envoi échoue pour une raison quelconque.

Les champs integration_field1 = 1234, integration_field2 = 2345pwd, HRXML = champ de formulaire contenant l'ordre HR-XML (string)

Voici ce que je Codé ..

string strId = "123"; 
     string strName = "test"; 
     StreamReader sr2 = File.OpenText(Server.MapPath("~/App_Data/XMLFile.xml")); 
     string xml = sr2.ReadToEnd(); 
     sr2.Close(); 

     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.LoadXml(xml); 
     xml = HttpUtility.UrlEncode(xmlDoc.OuterXml); 

     System.Text.UTF8Encoding encoding = new UTF8Encoding(); 
     string postData = "xmldata=" + xml; 

     byte[] data = encoding.GetBytes(postData); 

     // Prepare web request... 
     HttpWebRequest myRequest = 
      (HttpWebRequest)WebRequest.Create("http://localhost:1994/TestXMLPost/PostData.aspx"); 
     myRequest.Method = "POST"; 
     myRequest.ContentType = "application/x-www-form-urlencoded"; 
     myRequest.ContentLength = data.Length; 
     Stream newStream = myRequest.GetRequestStream(); 
     // Send the data. 
     newStream.Write(data, 0, data.Length); 

     newStream.Close(); 

     WebResponse res = (HttpWebResponse)myRequest.GetResponse(); 
     StreamReader sr = new StreamReader(res.GetResponseStream()); 
     string str = sr.ReadToEnd(); 
     sr.Close(); 

Sur PostData. aspx, je l'ai fait à des fins de test

if (Request.Form.Count > 0) 
    { 
     Response.Write(Request.Form["xmldata"] + ""); 

     } 

Je n'ai rien reçu dans la réponse. Seule l'erreur "Le serveur distant a renvoyé une erreur: (500) Erreur interne du serveur." Voici le formulaire HTML que je veux simuler en utilisant HttpWebRequest.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>testing</title> 
</head> 

<body> 
<form action="https://myurl.com/samplepage.cfm" method="post" > 
integration_id<input type="text" name="integration_id" value="id" /><br /> 
integration_pwd<input type="text" name="integration_pwd" value="pwd" /><br /> 
<textarea name="hrxml" style="height: 404px; width: 593px"> 
<?xml version="1.0" encoding="UTF-8"?> 
<BackgroundCheck account="test" userId="test" password="test"> 
    <BackgroundSearchPackage> 
    <ReferenceId> 
     <IdValue>12345678</IdValue> 
    </ReferenceId> 
    <PersonalData> 
     <PersonName> 
     <GivenName>TEST</GivenName> 
     <FamilyName primary="undefined">TEST</FamilyName> 
     </PersonName> 
     <DemographicDetail> 
     <GovernmentID countryCode="US" issuingAuthority="SSN">00000000000000</GovernmentID> 
     <DateOfBirth>1901-01-01</DateOfBirth> 
     </DemographicDetail> 
    </PersonalData> 
    </BackgroundSearchPackage> 
</BackgroundCheck> 
</textarea> 
<input type="submit" /> 

</form> 
</body> 
</html> 

Merci

+0

... et? Quel est le problème? Qu'avez-vous essayé? – RPM1984

Répondre

0

Utilisez fiddler pour voir ce qui se passe réellement sur le fil.

Vous pouvez également écrire une copie de ce que vous envoyez sur le disque. En plus de ce qui précède, vous pouvez également vérifier la visionneuse d'événement de l'ordinateur cible pour une entrée liée à l'erreur (si aucune journalisation alternative des erreurs n'est en place).

En résumé, vous devez savoir ce qui se passe.

+0

Merci pour votre suggestion. Cela m'a vraiment aidé. Je suis allé voir l'Observateur d'événements et surpris de voir que la page où les données XML sont post, se plaint de la demande de demande potentiellement dangereux. Et nous savons tous que la page Asp.net valide chaque demande entrante. Donc, quand j'ai défini l'attribut Page ValidateRequest = "false". Le problème est maintenant résolu. Merci mon pote ... :) –