2009-04-28 4 views
1

Je construis une application ASP.NET 3.5 et je voudrais exposer une énumération que j'ai dans ma classe WebService sans l'utiliser comme paramètre dans une de mes WebMethods.Exposer une énumération à un client JavaScript d'un WebService sans l'utiliser dans un WebMethod?

J'ai un exemple très simple pour illustrer ce que je veux ... Disons que je le WebService suivant (je vais l'appeler Agent.asmx):

<System.Web.Script.Services.ScriptService()> _ 
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ 
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ 
<ToolboxItem(False)> _ 
Public Class Agent 
    Inherits System.Web.Services.WebService 

<WebMethod(EnableSession:=True)> _ 
Public Function DoSomething(ByVal doWhat As WhatEnum) As Boolean 
    Return ... 
End Function 

End Class 

Public Enum WhatEnum 
    AskStackOverflowQuestion 
    PhoneAFriend 
    FiftyFifty 
End Enum 

Parce que je l'Enum dans un des WebMethods, il génèrerait les éléments suivants dans le JavaScript génère pour l'agent lorsque le WebService est référencé dans ma page .aspx (de http://localhost/Agent.asmx/js):

if (typeof(SomeNamespace.WhatEnum) === 'undefined') { 
    SomeNamespace.WhatEnum = function() { throw Error.invalidOperation(); } 
    SomeNamespace.WhatEnum.prototype = { AskStackOverflowQuestion: 0,PhoneAFriend: 1,FiftyFifty: 2} 
    SomeNamespace.WhatEnum.registerEnum('SomeNamespace.WhatEnum', true); 
} 

maintenant, je peux aller utiliser ces énumérations où je veux du côté client. Maintenant, tout va bien, mais j'ai un autre Enum dans mon Agent que je n'utilise pas dans les WebMethods, que j'aimerais aussi voir apparaître automatiquement dans le JavaScript de l'Agent. Existe-t-il un moyen, peut-être un attribut ou quelque chose que je pourrais utiliser, de faire en sorte qu'il soit inclus? Sinon, ma solution de repli est de simplement créer une méthode fictive avec mon Enum en tant que paramètre pour qu'il soit disponible, et ne l'appelle jamais du JS, bien que je préfère ne pas jeter le code. Merci!

Répondre

1

Il est évident que la solution la plus simple serait de créer la méthode fictive. Je suppose que je me demande pourquoi vous avez besoin d'une énumération de votre service Web pour être disponible dans votre JavaScript si vous ne transmettez jamais cette énumération au service ou ne le recevez pas du service de quelque façon que ce soit.

+0

L'enum est utilisé dans le service; il est renvoyé au client en tant que propriété sur une classe sérialisée et renvoyée en tant que JSON. –

+0

J'ai choisi d'utiliser la méthode dummy pour que tout fonctionne - c'était le plus simple à mettre en œuvre. –

0

Utilisez-vous au moins l'énumération dans le service? Sinon, cela ne lui appartient pas.

Je crois que vous devriez regarder l'attribut [XmlInclude].

+0

L'énumération est utilisée dans le service; il est renvoyé au client en tant que propriété sur une classe sérialisée et renvoyée en tant que JSON. –

+0

Donc, si vous venez de retourner cette classe normalement, l'énumération serait là, non? Est-ce que [ScriptService] ne fonctionnait pas? –

+0

J'ai essayé XmlInclude, je suppose que c'est seulement pour WSDL, et vous devez créer un wrapper de classe fictif pour Enum car il ne fonctionnera pas dans Enums. –

Questions connexes