8
votes

Erreur de validation d'instance: '2' n'est pas une valeur valide pour QueryType. (service Web)

J'ai un service Web que je transmettais un énorme xxx

lorsque je passe un objet qui a un paramètre de QueryType dessus, je reçois l'erreur du service Web indiquant:

'2' n'est pas une valeur valide pour QueryType

Lorsque vous pouvez clairement voir de la déclaration de l'énum que c'est.

Je ne peux pas modifier les valeurs de l'énum, ​​car les applications héritées utilisent les valeurs, mais je préférerais ne pas avoir à insérer une valeur "par défaut" pour pousser l'index de l'énumé pour le faire fonctionner avec mon web service. Il agit comme le service Web utilise l'index des valeurs plutôt que les valeurs elles-mêmes.

Quelqu'un a-t-il une suggestion de ce que je peux faire pour le faire fonctionner, est-ce que je peux changer dans mon WSDL?


5 commentaires

Êtes-vous sûr que les fichiers binaires du service Web sont à jour? J'ai vu des choses comme celle-ci lorsque je compile un projet Libary et oubliez de copier la DLL vers les dossiers de service Web.


Non, je ne suis pas sûr, mais je sais que la signature de cet énum n'a pas changé. Cela pourrait-il encore causer ce problème? Je vais essayer de mettre à jour le service Web avec la DLL la plus à jour et voir si cela fait une différence. Merci Paul!


Paul, malheureusement, cela n'a pas fonctionné. Il semble vraiment que cela essaie de prendre l'indice zéro de l'énumé plutôt que par la valeur


Y a-t-il un autre QueryType Enum quelque part? L'aide MSDN dit qu'il y en a un dans Microsoft.SharePoint.dsp.


Je ne suis pas sûr. Ce que j'ai fini par faire pour l'intervalle jusqu'à ce que je puisse avoir plus de temps à jouer avec elle, il est de la valeur à un Int et de passer l'INT vers le service, puis de la réaffirmer en tant que QueryType sur le côté du service Web. Semble fonctionner bien de cette façon


3 Réponses :


7
votes

Je suppose que vous utilisez des services Web ASMX pour cette réponse.

Votre devinière est juste - le sérialiseur XML utilise les noms de dénombrement dans la WSDL et non la valeur. P>

Si vous Regardez votre WSDL, il ressemblera à ceci: P>

<s:simpleType name="QueryType">
  <s:restriction base="s:string">
    <s:enumeration value="1" /> 
    <s:enumeration value="2" /> 
  </s:restriction>
</s:simpleType>


5 commentaires

Malheureusement, cela n'a pas non plus changé l'erreur que j'ai reçue.


Je vais essayer de poster un meilleur échantillon de code de ce que je travaille. Peut-être que c'est quelque chose de bizarre que nous faisons dans notre DLL et notre service Web.


Oui, veuillez fournir un échantillon.


Cela résolut mon problème. Ma question est que je devais faire cela au code qui existe depuis un certain temps. Je me demande ce qui aurait pu changer qui m'ont amené à ajouter le Xmmenum à mes valeurs d'enum?


Cela m'est arrivé aussi, et mon code existait depuis un certain temps. Très étrange.



2
votes

Essayez d'ajouter les indicateurs () attribut à la définition de QueryType.


0 commentaires

0
votes

Quelque chose à considérer est de vous assurer que vous initialisez vos valeurs ENUM et ne supposez pas que le premier élément de votre liste sera utilisé.

Par exemple, ayant un énumé défini qui ne commence pas à la valeur INT de 0 comme ceci: xxx

normalement lorsque vous déclarez que votre instance Enum, vous pouvez être tenté de le faire: xxx

si le Structure de données que vous retournez via Webservice a une variable d'énumération jointe à celle-ci, vous recevrez l'erreur d'instance si appelée à partir du site Web de Webservice (mais si vous utilisez le DataClass à partir du site Web, vous n'aurez aucune erreur). < p> Point est, assurez-vous simplement que vous avez correctement initialisé votre instance ENUM que vous retournez dans le Webservice.


1 commentaires

Si vous regardez en arrière à la question initiale, les valeurs étaient initialisées. Une fois envoyé au service Web, le service Web ignorait les valeurs et en utilisant les noms ENUM.