2011-11-11 3 views
0

J'utilise une application ASP.NET avec un service Web et, pour une raison quelconque, l'une des méthodes de service Web est ignorée. Je suis sûr que c'est un problème assez simple, mais ça m'a bloqué pendant plus d'une journée. Suis-je mettre l'appel de la méthode dans la mauvaise méthode, je suppose que OnPreRender gérerait tout avant le chargement des fins de la page. Je suis assez confiant que le problème est dans cette zone, si je définissez le ImageLoc de l'objet de formulaire à une URL lorsqu'il est instancié il charge dans la page ASP.NET très bien.Méthode de service Web ignorée?

Je ne pense pas avoir omis de code pertinent, mais si vous avez besoin de voir quelque chose d'autre laissez-moi savoir. L'objet de formulaire est juste quelques propriétés avec get/set donc je l'ai omis. Veuillez également noter que les paramètres de chaîne seront changés en quelque chose d'autre, j'essaie simplement de mettre en place le travail de base.

.aspx.cs:

 localhost.MobileFormServices wsMobile = new localhost.MobileFormServices(); 

    protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 
     //Call the web service to pass image URL 
     wsMobile.NewForm("parameters"); 
     FormImage.ImageUrl = wsMobile.FormProperties().ImageLoc; 
    } 

méthodes de service Web:

//new form object instance 
    private FormLibrary.Form form = new FormLibrary.Form(); 

    //adds the image location to the form object 
    [WebMethod] 
    public void NewForm(String parameters) 
    { 
     form.ImageLoc = "http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg"; //breakpoint here, never hit 
    } 

    [WebMethod] 
    public FormLibrary.Form FormProperties() 
    { 
     return this.form; 
    } 

Répondre

1

L'appel

FormImage.ImageUrl = wsMobile.FormProperties().ImageLoc; 

bien que ces utilisations même instance d'objet sur votre page appelle par exemple complètement différent du côté du service Web que lorsque la méthode

wsMobile.NewForm("parameters"); 

a été appelé. A cause de cela

private FormLibrary.Form form = new FormLibrary.Form(); 

est appelée à chaque appel de service Web.

À chaque appel de service Web, une nouvelle instance de service Web traitant l'appel est créée. Donc, dans votre exemple.

  1. wsMobile.NewForm ("paramètres") - nouvelle FormLibrary.Form est créé lorsque par exemple la manipulation de cet appel est créé.

  2. dans cet appel que vous définissez form.ImageLoc - mais cette forme est locale à cette instance

  3. FormImage.ImageUrl = wsMobile.FormProperties() ImageLoc;. - encore une fois nouveau FormLibrary.Form est créé par exemple la gestion de cet appel

  4. vous revenez ImageLoc de nouveau FormLibrary.Form créé. Pas ce que vous avez précédemment défini.

+0

Cela a du sens pour moi, mais comment recommanderiez-vous de corriger cela? – turbo

+0

Je l'ai pensé, passerait un objet de forme à l'application asp.net, l'utilisant/le modifiant, puis le renvoyant par le service Web le résoudre? Je vais essayer ça maintenant. – turbo

+1

Vous pouvez stocker FormLibrary.Form comme statique, mais cela se terminerait dans toutes les pages partageant le même formulaire qui est probablement mauvais mais dépend de chaque projet. L'autre façon est de le stocker dans la session ou dans une base de données de magasin externe. Ou si vous utilisez vraiment deux appels dans votre application, vous devriez peut-être en faire un? Dans cet exemple, le second appel n'a pas de sens. Le premier appel devrait renvoyer ce dont vous avez besoin. Si vous trouvez cette réponse utile s'il vous plaît upvote :) –

0

Pouvez-vous essayer d'utiliser l'événement OnPreRenderComplete au lieu de OnPreRender.

+0

Essayé cela, avait le même problème. – turbo

0

Parfois, le débogueur est confus. Essayez ceci (et faire Reconstruire tout):

[WebMethod] 
public void NewForm(String parameters) 
{ 
    System.Diagnostics.Debugger.Break(); 
    form.ImageLoc = "http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg"; //breakpoint here, never hit 
} 
+0

Ne le fait toujours pas ici, donc cela signifie qu'il n'est pas appelé de manière définitive? – turbo

+0

Recevez-vous un message d'erreur? Assurez-vous que IIS est arrêté et redémarré (ou quel que soit le serveur) entre les tests? Essayez de supprimer et de rajouter le proxy. –

+0

Pas de message d'erreur, fondamentalement je vais utiliser le service web pour accéder à certaines images générées par un autre programme (pas encore fait, c'est pourquoi j'utilise une image aléatoire). J'essaie de transmettre cette image à mon application asp.net pour l'afficher. J'ai essayé de redémarrer le serveur que j'utilise. Voulez-vous dire la classe proxy? J'ai aussi essayé ça. J'ai fait quelques lectures et j'ai pensé qu'il s'agissait peut-être d'un problème d'analyse XML lorsque vous passez des objets à partir de webservices, mais la solution n'a rien changé pour moi (suppression de la classe de formulaire dans le proxy et ajout de FormLibrary) – turbo

0

Essayez de déplacer votre code OnPreRender() à OnInit(). Etes-vous sûr que le service Web n'est pas appelé?

+0

change, ignore toujours le point d'arrêt et ne fonctionne pas comme prévu. – turbo

+0

Pourquoi cela changerait-il quelque chose? –

Questions connexes