2010-12-08 55 views
0

J'ai une méthode qui ressemble à:<WebMethod()> changements d'attributs de 2,0 à 3,5

<WebMethod()> _ 
Public Function Search(ByVal q As String) As String 

Mise à jour de .net 2.0 à 3.5 semble avoir rompu cela.

Nous faisons data.split() sur la valeur retournée, et cela génère une erreur - il semble que la valeur retournée soit maintenant une structure json, pas une simple chaîne.

Existe-t-il un moyen de revenir au comportement précédent?

+0

Que voulez-vous dire "cassé"? Être spécifique. .NET 3.5 utilise toujours CLR 2.0, et il y a eu très peu de changements par rapport aux services Web ASMX. –

+0

Brisé en ce que avant la mise à jour, nous faisions data.split() avec la valeur retournée, et maintenant il échoue avec une erreur "non implémentée". – chris

Répondre

0

Vous devez importer System.Web.Script.Services

Ensuite, essayez d'ajouter cet attribut:

<WebMethod()> _ 
<ScriptMethod(ResponseFormat:=ResponseFormat.Xml)> _ 

Comment appelez-vous la méthode web? Avec javascript?

+0

yup - jquery autocomplete – chris

+0

Assurez-vous de spécifier un paramètre dataType dans vos méthodes ajax. Si vous ne spécifiez pas jquery devinera. http://api.jquery.com/jQuery.ajax/ – ScottE

+0

dataType est "json" - nous récupérons une structure json, mais apparemment, avant la mise à jour vers la version 3.5, c'était une simple chaîne. Essayer de vérifier qu'il s'agissait d'un changement entre 2.0 et 3.5, et voir s'il y a un moyen de revenir au comportement précédent, ou présenter des preuves que nous aurons besoin de mettre à jour nos appels js. – chris

0

Nous avons eu un problème similaire. Avec la configuration de base de Webmethod et jquery ajax appel avec 2.0, il retourne une chaîne (type string dans js) ou string array (type objet dans js), dans 3.5 il renvoie toujours un objet et les données réelles retournées sont sous .d lors du retour une primitive comme une chaîne ou un tableau de chaînes.

Ma meilleure solution jusqu'ici était une méthode javascript pour vérifier .d.

function getResponse(r){ 
     if(r.d!=null){ 
      return r.d; 
     }else{ 
      return r; 
     } 
    } 

je dois soutenir à la fois les 2.0 et 3.5 appels à la transition et préférerions ne pas avoir à dépenser trop d'énergie que 2.0 sera bientôt disparu.

Mais je préfère une meilleure solution.