Recevoir (et envoyer) XML via la POSTE avec ASP.NET
Je dois mettre en place un XML "web service" qui reçoit un POSTE où le " Content-type en-tête de préciser “text/xml”.'
Quelle est la façon la plus simple pour obtenir le code XML dans une XDocument
pour l'accès par VB.NET'axe des requêtes?
Je ne crois pas que le service web est garanti pour suivre tout le protocole (par exemple, le SAVON, etc); juste des balises et des sous-balises de diverses demandes, et il va utiliser l'Authentification de Base, donc je vais avoir besoin de traiter les en-têtes.
(Si c'est important:
* la version live va utiliser le protocole HTTPS, et
* la réponse sera également XML.)
Si WCF est la réponse, merci de l'ajouter comme une réponse. Je certainement n'avez pas nécessairement besoin d'être mis en œuvre à l'aide de la WCF.
OriginalL'auteur Mark Hurd | 2010-05-12
Vous devez vous connecter pour publier un commentaire.
Donné Steven est l'avertissement, la réponse peut-être à analyser
Request.InputStream
manuellement avec Tom Holland test en premier, suivi parXDocument.Load
dans lePage_Load
événement.Une recherche sur Google lancé avant j'ai posé la question, mais seulement vérifié après, trouvé cette, suggère aussi je suis sur la bonne voie.
Aussi j'allais poser la question implicite de mon point de que la réponse XML trop, pour ce qui est la meilleure façon de le faire, mais j'ai trouvé une réponse ici.
En résumé, le code final est:
et la ASP.NET la page web.aspx:
NB Jeter
HTTPException
n'est pas une solution finale pour les scénarios.Pour info, afin d'être en mesure d'obtenir l'authentification HTTP de base pour fonctionner comme ça, vous devez désactiver toutes les formes d'authentification à partir du répertoire/fichier dans le Gestionnaire des services IIS. Vous pouvez aussi définir la-tête WWW-Authenticate sur la réponse 401.
Vikram Lakhotia site web a disparu, mais il est encore dans la WayBackMachine: web.archive.org/web/20101231220015/http://...
OriginalL'auteur Mark Hurd
Je tiens à m'excuser à l'avance pour ne pas répondre à votre question ici, mais je veux donner un petit avertissement. Peut-être que c'est déjà quelque chose que vous êtes en prenant en compte, mais si vous ne prenez pas les mesures adéquates, votre système peut facilement être fermé à l'aide d'une attaque de déni de service, lors du traitement de données XML à partir d'une source inconnue (à la fois sur HTTP et HTTPS).
Il existe une technique appelée Entité XML attaques d'Extension. Regardez, par exemple, à cette innocente à la recherche de la paix de XML qui apportera à votre serveur à genoux lorsqu'il essaie de la traiter:
Ce petit document XML de moins de 500 octets fera de votre serveur tente d'allouer au moins 160 GO de mémoire.
Vous pouvez vous protéger contre cette par la validation des entrants XML avec une DTD) avant de les traiter.
Vous pouvez lire plus d'informations sur cette attaque, ici.
Bonne chance.
Vous êtes de droite. C'était de la paresse de ma part. J'ai changé le lien directement le point de Tom Hollander blog.
J'ai enlevé mon +1 vote pour cette "réponse" parce que elle a enlevé ma question à partir de la réponse de la vue. Steven, modifier à nouveau afin que je puisse vous donner en retour votre +1 🙂
+1 pour le headsup 🙂 Bien que je pense que ça a été patché?
Il ne peut pas être patché. C'est juste la façon dont
XmlDocument
œuvres. La solution est d'utiliserXmlReader
ou de valider le xml à l'encontre d'un XSD.OriginalL'auteur Steven
Lorsque vous créez un Service Web vous de définir le format du fichier XML que vous recevrez, et c'est à l'expéditeur pour répondre à vos format.
J'ai l'habitude de se moquer de l'information de mon web service recevra comme
DataTables
dans unDataSet
(depuis qui imite de près comment je peut les stocker dans une base de données), puis faire uneDataSet.getXML()
sur ma maquette,DataSet
(éventuellement aussi obtenir le schéma par défaut), afin de l'utiliser comme modèle pour le XML, je m'attends à être "publié" à mon service web.Puis, lors de mon service web reçoit un post, je peux tout simplement prendre le XML envoyé et l'utilisation de la
DataSet.readXML()
sur le XML posté ... et de traiter les informations envoyées dans lesDataSet
.La plupart de mon web service "retour" les valeurs sont des résultats de requêtes sur la base des informations affichées, donc je fais la même chose pour formater les valeurs de retour ... avoir les résultats de mon retour des données interrogées dans un
DataSet
,DataSet.getXML()
.. et retour.Ahh, je vois ce que tu veux dire - j'ai l'habitude de la désigner comme "aide" ou de "consommer" un service web ... juste de la terminologie. 🙂
OriginalL'auteur Ron Savage