代码之家  ›  专栏  ›  技术社区  ›  Cᴏʀʏ bcherry

在不在WebMethod中使用枚举的情况下向WebService的客户端javascript公开枚举?

  •  1
  • Cᴏʀʏ bcherry  · 技术社区  · 16 年前

    我正在构建一个ASP.NET 3.5应用程序,并希望在WebService类中公开一个枚举,而不在我的WebMethods中使用它作为参数。

    我有一个很简单的例子来说明我想要什么…假设我有以下WebService(我称之为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
    

    因为我在其中一个webmethods中使用了枚举,所以当webservice在my.aspx页面中被引用时,它将在generates for the agent中的javascript中输出以下内容(从 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);
    }
    

    现在我可以在客户机端任意位置使用这些枚举。现在,这一切都很好,但我在我的代理中有另一个枚举,我实际上没有在任何webmethods中使用,我也希望在代理的javascript中自动公开它。有没有一种方法,也许是一个属性或者我可以使用的东西,使它被包含进来?

    如果不是这样,我的回退解决方案就是用我的枚举作为参数创建一个虚拟方法,这样它就可以使用,并且永远不会从JS调用它,尽管我不想丢弃代码。谢谢!

    2 回复  |  直到 16 年前
        1
  •  1
  •   Andrew Hare    16 年前

    显然,最简单的解决方案是创建虚拟方法。我想我在想,如果您从未将枚举传递给服务或以任何方式从服务接收枚举,为什么您需要在JavaScript中提供Web服务的枚举。

        2
  •  0
  •   John Saunders    16 年前

    您是否至少在服务中使用枚举?否则,它不属于那里。

    我相信您应该看看[xmlcinclude]属性。

    推荐文章