2010-11-08 7 views
1

J'ai quelques données XML. J'ai fait un webservice basé sur le savon d'asp.net qui prend le xml pendant qu'un tampon d'octet applique la transformation xsl et le convertit en un dossier de docx. Mais quand je retourne le fichier docx en utilisant l'objet de réponse, j'obtiens une erreur que le client a trouvé réponse du type application/vnd-word mais attendait text/xml.Asp.net Webservice renvoyant le fichier docx

service Snippet pour pousser fichier de document après transformation xsl

Context.Response.Clear();

Context.Response.ClearHeaders();

Context.Response.ContentType = "application/vnd.openxmlformats-officiel.wordprocessingml.document";

Context.Response.AddHeader ("Content-Disposition", "pièce jointe; nom_fichier =" + "test.docx"); Context.Response.Flush();

Contexte.Réponse.End();

Répondre

1

Est-ce via un appel de service Web? Si vous appelez via un client proxy webservice, alors il attend une réponse SOAP et non un flux binaire. Vous devrez modéliser une réponse compatible SOAP que l'appelant peut comprendre. La définition du type de contenu et de la disposition du contenu permet à un navigateur de faire la bonne chose (ouvrir la boîte de dialogue d'enregistrement de fichier) mais les clients personnalisés (httpwebclient, proxy de service Web, etc.) n'ont pas ces comportements intégré de sorte que vous devrez ajouter ce qui manque.

+0

Que dois-je ajouter aux en-têtes de savon? –

+0

parce que tout va bien en dehors de ce problème de réponse ... –

0

Où écrivez-vous réellement les données?

oh et essayer ... (si votre .docx est un fichier OpenXML de bureau bien formé)

Response.Clear(); 
    Response.ContentType = "application/msword"; 
    Response.AppendHeader("Content-Type", "application/msword"); 
    Response.AppendHeader("Content-disposition", String.Format("attachment; filename={0}", FileName)); 
    Response.BinaryWrite(DataBytes); 
    Response.End(); 

    Response.Flush(); 
+0

et qu'est-ce que les octets de données? –

+0

Je reçois cette erreur lorsque j'utilise votre approche. Le type de contenu de réponse trouvé par le client est 'application/msword', mais attendu 'text/xml'. –

+0

le fichier est déjà fait et je viens de choisir le fichier et l'attacher à l'en-tête MIME de la disposition de contenu –

0
Context.Response.Clear(); 
Context.Response.ContentType = "application/msword"; 
Context.Response.AddHeader("Content-Type", "application/msword"); 
Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + "test.docx"); 
Context.Response.End(); 
Context.Response.Flush(); 
Questions connexes