la mise en œuvre de demande XML en .NET application web
J'ai eu de la lecture et de la lecture, mais je viens d'obtenir plus confuse, les autres je m'en vais. Je suis de la construction d'une ASP.NET 4.0 application web en C#. Je suis en train de mettre en œuvre de traitement de carte de crédit. La société que j'utilise a fourni un exemple XML SOAP de demande et de réponse, mais je ne suis pas sûr de quoi faire avec ça. Je suis un novice développeur et je suis nouveau à tout cela. Je ne sais même pas par où commencer. Toute aide est grandement appréciée, j'ai aussi envoyer sur SSL mais c'est sans doute une toute autre question.
Voici la requête SOAP
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<v1:SendTranRequest xmlns:v1="http://postilion/realtime/merchantframework/xsd/v1/">
<v1:merc>
<v1:id>9000</v1:id>
<v1:regKey>RegistrationKey</v1:regKey>
<v1:inType>1</v1:inType>
<v1:prodType>5</v1:prodType>
</v1:merc>
<v1:tranCode>1</v1:tranCode>
<v1:card>
<v1:pan>411111******1111</v1:pan>
<v1:xprDt>1312</v1:xprDt>
</v1:card>
<v1:contact>
<v1:id>1234567</v1:id>
<v1:fullName>John Doe</v1:fullName>
<v1:coName>Ajax Intl.</v1:coName>
<v1:title>CEO</v1:title>
<v1:phone>
<v1:type>3</v1:type>
<v1:nr>5555555555</v1:nr>
</v1:phone>
<v1:addrLn1>123 1st St.</v1:addrLn1>
<v1:city>Somewhere</v1:city>
<v1:state>CO</v1:state>
<v1:zipCode>80021</v1:zipCode>
<v1:ctry>US</v1:ctry>
<v1:email>[email protected]</v1:email>
<v1:ship>
<v1:fullName>John Doe</v1:fullName>
<v1:addrLn1>123 1st St.</v1:addrLn1>
<v1:city>Somewhere</v1:city>
<v1:state>CO</v1:state>
<v1:zipCode>80021</v1:zipCode>
<v1:phone>5555555555</v1:phone>
<v1:email>[email protected]</v1:email>
</v1:ship>
</v1:contact>
<v1:reqAmt>099</v1:reqAmt>
<v1:usrDef>
<v1:name>firstname</v1:name>
<v1:val>John</v1:val>
</v1:usrDef>
<v1:indCode>1</v1:indCode>
<v1:tranFlags>
<v1:dupChkTmPrd>6000</v1:dupChkTmPrd>
<v1:convFeeAcptd>N</v1:convFeeAcptd>
</v1:tranFlags>
<v1:tax>
<v1:idcr>0</v1:idcr>
</v1:tax>
</v1:SendTranRequest>
</soapenv:Body>
</soapenv:Envelope>
Voici ma demande de créer et de lire la réponse
WebRequest webRequest = WebRequest.Create("url");
HttpWebRequest httpRequest = (HttpWebRequest)webRequest;
httpRequest.Method = "POST";
httpRequest.ContentType = "text/xml; charset=utf-8";
httpRequest.Headers.Add("SOAPAction: http://tempuri.org/");
httpRequest.ProtocolVersion = HttpVersion.Version11;
httpRequest.Credentials = CredentialCache.DefaultCredentials;
//build xml
var xmlWriterSettings = new XmlWriterSettings
{
NewLineHandling = NewLineHandling.None,
Encoding = Encoding.ASCII
};
using (var requestStream = httpRequest.GetRequestStream())
using (var writer = XmlWriter.Create(requestStream, xmlWriterSettings))
{
xml.WriteTo(writer);
}
//Get the Response
HttpWebResponse wr = (HttpWebResponse)httpRequest.GetResponse();
StreamReader srd = new StreamReader(wr.GetResponseStream());
string resulXmlFromWebService = srd.ReadToEnd();
- Ce fournisseur de paiement que vous utilisez? Si ils ne donnent pas d'exemple dans l'ASP.NET je serais surpris.
Vous devez vous connecter pour publier un commentaire.
Je recommande de regarder la
HttpWebRequest
et laHttpWebResponse
classes. LeHttpWebRequest
classe vous permettra de définir le corps, en-têtes, les informations d'identification, et d'autres choses pour faire la demande. Et leHttpWebResponse
devrait vous permettre de lire dans toutes les informations dont vous avez besoin.Espère que cela aide certains, mais votre question est un peu claire de ce que vous devez faire. Mais le code suivant va télécharger un document XML à partir d'un point de terminaison que vous avez posté la demande de XML.
Aussi loin que de faire des trucs sur SSL/TLS, vous avez de la chance, .NET prendra soin de cela pour vous, vous juste besoin de spécifier
https
surhttp
dans l'URL de votre fournir àHttpWebRequest.Create
.Il y a un certain nombre de façons de construire votre XML, est un moyen d'utiliser le
XElement
,XAttribute
, etXNamespace
objets à l'intérieur de laSystem.Xml.Linq
espace de noms. Qui, si vous ne pouvez pas utiliser au moins .NET 3.5, je vous recommandons d'utiliser. Depuis la création de la demande dans APS.NET 4.0 cela ne devrait pas être un problème.Lorsque vous créez un
XElement
et vous devez spécifier un espace de noms, vous devrez d'abord créer unXNamespace
objet.Cela se traduira dans le code XML suivant:
Cependant, vous devez être en mesure de spécifier un préfixe d'espace de noms. Pour ce faire, vous aurez besoin d'ajouter un
XAttribute
objet de laXElement
de la première utilisation du préfixe et de spécifier le préfixe par le constructeur.Cela se traduira dans le code XML suivant:
Ici est une partie de votre XML construit à l'aide de ces objets.
Cette résultats dans le fichier XML suivant:
Pour inclure les données XML dans le corps de votre
HttpWebRequest
faire:Une chose à noter ici est la création de la
XmlWriter
avec leXmlWriterSettings
, cela vous permet de n'inclure aucun espace entre les éléments XML. Si vous avez besoin d'espace, vous pouvez créer leXmlWriter
simplement en appelantXmlWriter.Create(stream)
Si vous ne pouvez pas utiliser .NET 3.5 ou supérieur, vous pouvez utiliser le
XmlDocument
etXmlElement
objets dans leSystem.Xml
espace de noms.Pour vos besoins, la construction de l'XML souhaitée sera facile avec la
XmlDocument
etXmlElement
mais il sera plus code. Pour créer unXmlElement
vous aurez besoin d'unXmlDocument
pour créer l'objet. LeXmlDocument.CreateElement
fonction a une surcharge qui permet de spécifier le préfixe d'espace de noms et l'espace de noms, ce qui est un peu plus simple.Une chose à noter, avec l'aide de
XmlDocument
etXmlElement
est que vous devez ajouter manuellement leXmlElement
à l'objet approprié après il a été construit. Une autre chose est que vous ne pouvez pas spécifier le corps d'unXmlElement
cours de construction, donc qui devra être fait après la création en tant que bien.L'ordre des opérations pour la construction de l'XML de cette manière n'a pas d'importance. C'est principalement de s'assurer que vous êtes en y ajoutant le
XmlElement
à la bonne mère, et le réglage de laInnerText
sur le droitXmlElement
objet.Cette résultats dans le même XML comme ci-dessus.
Lors de l'utilisation d'un
XmlDocument
pour construire votre requête XML, il y a deuxXmlDocument.Enregistrer
fonctions que vous pouvez utiliser pour vos besoins. On accepte uneStream
l'autre accepte unXmlWriter
. Si vous pouvez omettre les espaces utilisez la surcharge qui accepte unXmlWriter
et en l'ajoutant à laHttpWebRequest
serait:Si vous avez besoin d'inclure les espaces d'utilisation:
httpRequest.Headers.Add("SOAPAction: http://tempuri.org/");
An existing connection was forcibly closed by the remote host
sur la getresponse appelusing
blocs sur laHttpWebResponse
,StreamReader
, et laStream
dewr.GetResponseStream()
objets. Je vous recommande également à l'aide deHttpWebRequest.Create
surWebRequest
pour éviter le casting. Mais ces choses ne devraient pas arrêter la requête en cours de traitement.