Je développe actuellement un webservice dont une webmethod prend en
argument un objet initialiser coté serveur (initialisation fonction du
web.config). Pour ce faire, le client du webservice appelle une seconde
webmethod qui renvoie cet object initialisé. Le client peut ensuite le
modifier et l'utiliser pour appeler la webmethod initiale.
Mon problème est que toutes les modifications effectuées par le client
sur l'objet sont perdues lors de l'appel de la webmethod initiale.
Celui-ci est toujours reçu avec ses valeurs par défaut.
Savez-vous d'où cela peut venir ? Ma classe ne contient qu'un
constructeur (le constructeur par défaut) qui va extraire du web.config
les éléments nécessaires à son initialisation... Cela a-t-il un lien ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Delf
Stephane wrote:
Mon problème est que toutes les modifications effectuées par le client sur l'objet sont perdues lors de l'appel de la webmethod initiale. Celui-ci est toujours reçu avec ses valeurs par défaut.
Si je comprends bien, tu dois ajouter l'attribut :
[EnableSession=true] à ta WebMéthode pour permettre l'état de session pour les utilisateurs (cf. MSDN).
-- Delf
Stephane wrote:
Mon problème est que toutes les modifications effectuées par le
client sur l'objet sont perdues lors de l'appel de la webmethod
initiale. Celui-ci est toujours reçu avec ses valeurs par défaut.
Si je comprends bien, tu dois ajouter l'attribut :
[EnableSession=true] à ta WebMéthode pour permettre l'état de session
pour les utilisateurs (cf. MSDN).
Mon problème est que toutes les modifications effectuées par le client sur l'objet sont perdues lors de l'appel de la webmethod initiale. Celui-ci est toujours reçu avec ses valeurs par défaut.
Si je comprends bien, tu dois ajouter l'attribut :
[EnableSession=true] à ta WebMéthode pour permettre l'état de session pour les utilisateurs (cf. MSDN).
-- Delf
Delf
Stephane wrote:
[...]
Exemple à l'arrache (et non testé :p)
[WebMethod(EnableSession=true)] public void Initialization() { int iValue Convert.ToInt32( System.Configuration.ConfigurationManager.AppSettings["WebConfigValue"]);
Session["Value"] = iValue; }
[WebMethod(EnableSession=true)] public int IncrementAndReturn() { // if (Session["Value"] == null) ...
int newValue = (int)Session["Value"] + 1;
Session["Value"] = newValue;
return newValue ; }
Ca fonctionne ?
-- Delf
Stephane wrote:
[...]
Exemple à l'arrache (et non testé :p)
[WebMethod(EnableSession=true)]
public void Initialization()
{
int iValue Convert.ToInt32(
System.Configuration.ConfigurationManager.AppSettings["WebConfigValue"]);
Session["Value"] = iValue;
}
[WebMethod(EnableSession=true)]
public int IncrementAndReturn()
{
// if (Session["Value"] == null) ...
[WebMethod(EnableSession=true)] public void Initialization() { int iValue Convert.ToInt32( System.Configuration.ConfigurationManager.AppSettings["WebConfigValue"]);
Session["Value"] = iValue; }
[WebMethod(EnableSession=true)] public int IncrementAndReturn() { // if (Session["Value"] == null) ...
int newValue = (int)Session["Value"] + 1;
Session["Value"] = newValue;
return newValue ; }
Ca fonctionne ?
-- Delf
Stephane
Merci pour ces indications mais cela ne change rien... L'objet envoyé par le client à la webmethod n'est toujours pas celui reçu par le webservice.
ex : Le client appelle la web method initobjetA qui lui renvoie une instance de l'objet A dont la propriété nom vaut "" (valeur par défaut). Le client modifie la propriété nom de l'objet A et lui associe "Moi". Le client appelle la webmethod obtenirinfo en lui passant comme argument l'objet A modifié La webmethod s'exécute comme si elle avait reçu un objet où la propriété nom vaut "", sa valeur par défaut ????
Je ne comprends pas ce fonctionnement... Avez-vous d'autres pistes à me fournir
Merci
Delf a écrit :
Stephane wrote:
Mon problème est que toutes les modifications effectuées par le client sur l'objet sont perdues lors de l'appel de la webmethod initiale. Celui-ci est toujours reçu avec ses valeurs par défaut.
Si je comprends bien, tu dois ajouter l'attribut :
[EnableSession=true] à ta WebMéthode pour permettre l'état de session pour les utilisateurs (cf. MSDN).
Merci pour ces indications mais cela ne change rien... L'objet envoyé
par le client à la webmethod n'est toujours pas celui reçu par le
webservice.
ex :
Le client appelle la web method initobjetA qui lui renvoie une instance
de l'objet A dont la propriété nom vaut "" (valeur par défaut).
Le client modifie la propriété nom de l'objet A et lui associe "Moi".
Le client appelle la webmethod obtenirinfo en lui passant comme argument
l'objet A modifié
La webmethod s'exécute comme si elle avait reçu un objet où la propriété
nom vaut "", sa valeur par défaut ????
Je ne comprends pas ce fonctionnement... Avez-vous d'autres pistes à me
fournir
Merci
Delf a écrit :
Stephane wrote:
Mon problème est que toutes les modifications effectuées par le
client sur l'objet sont perdues lors de l'appel de la webmethod
initiale. Celui-ci est toujours reçu avec ses valeurs par défaut.
Si je comprends bien, tu dois ajouter l'attribut :
[EnableSession=true] à ta WebMéthode pour permettre l'état de session
pour les utilisateurs (cf. MSDN).
Merci pour ces indications mais cela ne change rien... L'objet envoyé par le client à la webmethod n'est toujours pas celui reçu par le webservice.
ex : Le client appelle la web method initobjetA qui lui renvoie une instance de l'objet A dont la propriété nom vaut "" (valeur par défaut). Le client modifie la propriété nom de l'objet A et lui associe "Moi". Le client appelle la webmethod obtenirinfo en lui passant comme argument l'objet A modifié La webmethod s'exécute comme si elle avait reçu un objet où la propriété nom vaut "", sa valeur par défaut ????
Je ne comprends pas ce fonctionnement... Avez-vous d'autres pistes à me fournir
Merci
Delf a écrit :
Stephane wrote:
Mon problème est que toutes les modifications effectuées par le client sur l'objet sont perdues lors de l'appel de la webmethod initiale. Celui-ci est toujours reçu avec ses valeurs par défaut.
Si je comprends bien, tu dois ajouter l'attribut :
[EnableSession=true] à ta WebMéthode pour permettre l'état de session pour les utilisateurs (cf. MSDN).
Stephane
Je pense mettre mal exprimé... Je ne pense pas avoir besoin de variables de session car toutes les modifications de l'objet sont effectuées par le client en local
Voici l'architecture des deux webmethods concernées :
[WebMethod(Description="Retourne ...")] [XmlInclude(typeof(Extraction))] public Extraction ObtenirChampsExtraction () { return new Extraction(); }
[WebMethod(Description="Retourne ...")] [XmlInclude(typeof(Extraction))] public object[] ObtenirExtraction (System.String base, Extraction liste_extraction, out System.Int32 nblignes, out System.Int32 code_retour){ if (liste_extraction.Nom != "TOUS") { ... } else { ... } return resultat; }
Le client modifie, en local, les propriétés de l'objet retourné par la ObtenirChampsExtraction et transmet cet objet à la webmethod ObtenirExtraction qui extrait les données recherchées par le client
L'objet reçu par la webmethod ObtenirExtraction ne tient pas compte des modifications du client. L'objet possède en permanence ses valeurs par défaut.
Merci encore pour votre aide Stéphane
Delf a écrit :
Stephane wrote:
[...]
Exemple à l'arrache (et non testé :p)
[WebMethod(EnableSession=true)] public void Initialization() { int iValue > Convert.ToInt32( System.Configuration.ConfigurationManager.AppSettings["WebConfigValue"]);
Session["Value"] = iValue; }
[WebMethod(EnableSession=true)] public int IncrementAndReturn() { // if (Session["Value"] == null) ...
int newValue = (int)Session["Value"] + 1;
Session["Value"] = newValue;
return newValue ; }
Ca fonctionne ?
Je pense mettre mal exprimé... Je ne pense pas avoir besoin de variables
de session car toutes les modifications de l'objet sont effectuées par
le client en local
Voici l'architecture des deux webmethods concernées :
[WebMethod(Description="Retourne ...")]
[XmlInclude(typeof(Extraction))]
public Extraction ObtenirChampsExtraction () {
return new Extraction();
}
[WebMethod(Description="Retourne ...")]
[XmlInclude(typeof(Extraction))]
public object[] ObtenirExtraction (System.String base, Extraction
liste_extraction, out System.Int32 nblignes, out System.Int32 code_retour){
if (liste_extraction.Nom != "TOUS") {
...
}
else {
...
}
return resultat;
}
Le client modifie, en local, les propriétés de l'objet retourné par la
ObtenirChampsExtraction et transmet cet objet à la webmethod
ObtenirExtraction qui extrait les données recherchées par le client
L'objet reçu par la webmethod ObtenirExtraction ne tient pas compte des
modifications du client. L'objet possède en permanence ses valeurs par
défaut.
Merci encore pour votre aide
Stéphane
Delf a écrit :
Stephane wrote:
[...]
Exemple à l'arrache (et non testé :p)
[WebMethod(EnableSession=true)]
public void Initialization()
{
int iValue > Convert.ToInt32(
System.Configuration.ConfigurationManager.AppSettings["WebConfigValue"]);
Session["Value"] = iValue;
}
[WebMethod(EnableSession=true)]
public int IncrementAndReturn()
{
// if (Session["Value"] == null) ...
Je pense mettre mal exprimé... Je ne pense pas avoir besoin de variables de session car toutes les modifications de l'objet sont effectuées par le client en local
Voici l'architecture des deux webmethods concernées :
[WebMethod(Description="Retourne ...")] [XmlInclude(typeof(Extraction))] public Extraction ObtenirChampsExtraction () { return new Extraction(); }
[WebMethod(Description="Retourne ...")] [XmlInclude(typeof(Extraction))] public object[] ObtenirExtraction (System.String base, Extraction liste_extraction, out System.Int32 nblignes, out System.Int32 code_retour){ if (liste_extraction.Nom != "TOUS") { ... } else { ... } return resultat; }
Le client modifie, en local, les propriétés de l'objet retourné par la ObtenirChampsExtraction et transmet cet objet à la webmethod ObtenirExtraction qui extrait les données recherchées par le client
L'objet reçu par la webmethod ObtenirExtraction ne tient pas compte des modifications du client. L'objet possède en permanence ses valeurs par défaut.
Merci encore pour votre aide Stéphane
Delf a écrit :
Stephane wrote:
[...]
Exemple à l'arrache (et non testé :p)
[WebMethod(EnableSession=true)] public void Initialization() { int iValue > Convert.ToInt32( System.Configuration.ConfigurationManager.AppSettings["WebConfigValue"]);
Session["Value"] = iValue; }
[WebMethod(EnableSession=true)] public int IncrementAndReturn() { // if (Session["Value"] == null) ...
int newValue = (int)Session["Value"] + 1;
Session["Value"] = newValue;
return newValue ; }
Ca fonctionne ?
Delf
Stephane wrote:
Je ne comprends pas ce fonctionnement... Avez-vous d'autres pistes à me fournir
Peux-tu nous poster le code stp ?
-- Delf
Stephane wrote:
Je ne comprends pas ce fonctionnement... Avez-vous d'autres pistes à me
fournir
Je ne comprends pas ce fonctionnement... Avez-vous d'autres pistes à me fournir
Peux-tu nous poster le code stp ?
-- Delf
Stephane
Je viens de comprendre pourquoi mon objet conserve ses valeurs par défauts : ses propriétés sont définies via un get et un set et la partie set est vide (je voulais des propriétés en lectures seule mais celles-ci ne sont pas sérialisées d'où le set{}). Lors du passage d'argument, les nouvelles valeurs étaient bien transmises mais je ne les traitais pas. C'est maintenant chose faite !
Merci beaucoup pour votre aide Bonne soirée
Delf a écrit :
Stephane wrote:
Je ne comprends pas ce fonctionnement... Avez-vous d'autres pistes à me fournir
Peux-tu nous poster le code stp ?
Je viens de comprendre pourquoi mon objet conserve ses valeurs par
défauts : ses propriétés sont définies via un get et un set et la partie
set est vide (je voulais des propriétés en lectures seule mais celles-ci
ne sont pas sérialisées d'où le set{}). Lors du passage d'argument, les
nouvelles valeurs étaient bien transmises mais je ne les traitais pas.
C'est maintenant chose faite !
Merci beaucoup pour votre aide
Bonne soirée
Delf a écrit :
Stephane wrote:
Je ne comprends pas ce fonctionnement... Avez-vous d'autres pistes à
me fournir
Je viens de comprendre pourquoi mon objet conserve ses valeurs par défauts : ses propriétés sont définies via un get et un set et la partie set est vide (je voulais des propriétés en lectures seule mais celles-ci ne sont pas sérialisées d'où le set{}). Lors du passage d'argument, les nouvelles valeurs étaient bien transmises mais je ne les traitais pas. C'est maintenant chose faite !
Merci beaucoup pour votre aide Bonne soirée
Delf a écrit :
Stephane wrote:
Je ne comprends pas ce fonctionnement... Avez-vous d'autres pistes à me fournir