Bonjour à tous !!!

Le cas que je vais vous exposer est assez atypique. Je galère depuis ce matin sur ça alors que je sais que je suis très proche de la fin de mon application.
Je développe sur iPhone une application native qui récupère des informations et des photos via l'interface que j'ai créé. Sur la dernière "vue" de mon interface j'envois ces données.
Jusque là tout va bien. Mes données sont bien envoyées et reçues par mon serveur asp.net.
Là où ça se corse c'est lors de la génération du document word.
J'ai tout d'abord testé en local (cad sur le serveur même). Et mon word est bien généré avec mes images.
Là où ça coince c'est quand j'essais de générer ce word directement de l'iPhone.
D'un point de vue fonctionnel, lorsque je clique sur le bouton d'envois, l'iPhone envoi des données (images et texte) sur mon serveur via la méthode POST.
Je peux donc aisément récupérer ces informations de l'autre côté. Mais apparement je ne peux pas correctement utiliser le "msWord" qui est sur le serveur.

Voici la fonction que j'appelle lorsque je génère mon word (et qui fonctionne très bien en local):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
public void generateDocument()
        {
            // Connexion à Word
            string pathTemplates = Server.MapPath("./templates/");
            string pathDocuments = Server.MapPath("./Documents/");
            string pathImgBefore = Server.MapPath("./Upload/imageBefore.jpg");
            Object myFalse = false ;
            Object myTrue = true ;
 
            Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
            msWord.Visible = true; // mettez cette variable à true si vous souhaitez visualiser les opérations.
            object missing = System.Reflection.Missing.Value;
 
 
            // Attribuer le nom
            object fileName = pathDocuments + "rapport.doc";
 
            Microsoft.Office.Interop.Word.Document nvDoc;
 
            // Tester s'il s'agit d'un nouveau document ou d'un document existant.
            if (System.IO.File.Exists((string)fileName))
            {
                // ouvrir le document existant
                nvDoc = msWord.Documents.Open(ref fileName, ref missing, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing);
            }
            else
            {
                // Choisir le template
                object templateName = pathTemplates + "template.dot";
                // Créer le document
                nvDoc = msWord.Documents.Add(ref templateName, ref missing, ref missing, ref missing);
            }
 
 
            // Les champs de formulaire définis dans le modèle se nomment "choix1" et "choix2".
            object field = "choix1";
 
            nvDoc.FormFields.get_Item(ref field).Result = choix1;
            field = "choix2";
            nvDoc.FormFields.get_Item(ref field).Result = choix2;
            field = "imgBefore";
            Object imgRange = nvDoc.FormFields.get_Item(ref field).Range;
 
            nvDoc.InlineShapes.AddPicture(pathImgBefore, ref myFalse, ref myTrue, ref imgRange);
 
            // Sauver le document
            nvDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing, ref missing,
                        ref missing);
 
            // Fermer le document
            nvDoc.Close(ref missing, ref missing, ref missing);
 
            // Fermeture de word
            msWord.Quit(ref missing, ref missing, ref missing);
        }
La première fois que j'ai testé ceci à partir de l'iPhone j'ai reçu cette erreur :

La récupération de la fabrique de classe COM pour le composant avec le CLSID {000209FF-0000-0000-C000-000000000046} a échoué en raison de l'erreur suivante : 80070005.
à la ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
J'ai donc pu en conclure qu'il y avait une histoire de permission dans tout ça. Je suis donc directement intervenu dans les services de composants afin de donner les droits au composant "Microsoft Word Application". Ce composant étant absent j'ai directement donné les droits (comme un sauvage) à toute l'entité (Mon serveur) pour qu'on puise accéder à ces composant depuis l'extérieur.

Depuis cela, je n'ai plus l'erreur ci dessus. Par contre, j'en ai une nouvelle :-) :
La référence d'objet n'est pas définie à une instance d'un objet.
Cette erreur se produit à cette ligne là :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
nvDoc.FormFields.get_Item(ref field).Result = choix1;
J'en conclu(après certains tests) que nvDoc est nul. Et c'est là où je coince ... je ne sais pas pouruoi nvDoc est nul alors que la variable msWord elle ne l'est pas ...

Est ce que quelqu'un aurait une idée ?? Je suis sur que c'est encore une histoire de permission ou quelque chose comme ça parce qu'en "local" ce script marche très bien et me génère un beau document word tout frais !!!

Merci d'avance pour vos idées ou toute autre aide !!!

MoKeS