12
votes

Problème avec le service Web C #, référencer une méthode et un type

J'ai rencontré un peu un problème, je ne sais pas si c'est un problème, mais j'aimerais des conseils.

J'ai développé AC # WebService dans VS2010 et quand je déboque le service que je reçois cette erreur dans mon navigateur p>

L'élément XML 'VerchResponse' de l'espace de noms 'http://test.org/' références d'une méthode et d'un type. Modifiez le nom du message de la méthode à l'aide de Webmethodattribute ou modifiez l'élément racine du type à l'aide du xmlrooTaTatribute. P>

Description: Une exception non gérée s'est produite lors de l'exécution de la demande Web actuelle. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et où elle est originaire du code. P>

Détails d'exception: System.InvalidoperationException: l'élément XML 'VoucherResponse' de noms d'espace 'Test.org' Références d'une méthode et d'un type. Modifiez le nom du message de la méthode à l'aide de Webmethodattribute ou modifiez l'élément racine du type à l'aide du xmlrooTaTatribute. P>

Erreur source: p>

Une exception non gérée a été générée lors de l'exécution de la demande Web actuelle. Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de la pile d'exception ci-dessous. P> BlockQuote>

En regardant maintenant mon code dans la classe actuelle "VerchReSponse", j'ai, P>

public class Voucher
{
    public string PIN { get; set; }
    public string Serial { get; set; }
    public string Batch { get; set; }
}


0 commentaires

3 Réponses :


16
votes

Apparemment, le savon ne peut pas gérer les méthodes qui ont le même nom que leur type de retour. Vous pouvez le réparer en lisant l'erreur et agissez en conséquence:

public class VoucherResponse
{
    [WebMethod(MessageName="TheVoucher")]
    public Voucher Voucher{get; set;}
}


1 commentaires

Cela ne semblait pas m'aider, j'ai essayé ce que vous avez suggéré et la même erreur se produit - Modifier: OKI a utilisé cela plutôt que sur ma méthode Web réelle qui renvoie la réponse du voucher et qui fonctionnait ..



43
votes

J'ai trouvé un autre cas strong> qui soulève l'erreur! Voici mon code:

[WebMethod]
public CheckUpdateResponse CheckUpdate()
{
...
}


5 commentaires

Il y avait juste un peu à ce sujet. Merci!


2 cas dans un million, je suppose ... :)


Oui .. c'était ce qui m'a attrapé


Alors maintenant 3 cas sur un million


C'est exactement ce qui m'est arrivé. J'essayais de créer un émulateur pour un service de savon existant à utiliser pour les tests. Leur documentation a montré le XML résultant, y compris l'objet extérieur (VoucherResponse dans le cas de l'OP), donc j'ai créé un objet extérieur à correspondre, ne réalisant pas que l'objet extérieur serait généré automatiquement. Il existait donc deux fois deux fois. J'ai enlevé la classe extérieure et tout a fonctionné. Le service a créé l'objet extérieur pour moi.



2
votes

J'ai eu le même problème, mais dans mon cas; L'application que j'ai développée est le client de service Web, donc je n'ai pas de contrôle sur la modification du WSDL \ SCHEMA.

Le problème était que j'ai eu un service Web avec 17 opérations, tous renvoient le même type complexe, J'ai eu l'erreur mentionnée en raison de la désérialisation du type de retour, car .NET enveloppe le type de retour pour chaque sortie et que le sérialiszer est une erreur: xxx

Solution: J'ai ouvert le fichier de référence.cs, supprimé toutes les classes générées de type de retour wappered, et ne conservées qu'un, puis modifié son nom de classe pour être générique, non lié à l'opération, cela a fonctionné pour moi.


2 commentaires

J'ai eu le même problème, l'erreur est trompeuse dans ce cas


Oui @dragonace, c'est pourquoi j'ai mis la solution aux autres à utiliser.