【问题标题】:Exposing an Enum to a WebService's client JavaScript without using it in a WebMethod?将枚举暴露给 WebService 的客户端 JavaScript 而不在 WebMethod 中使用它?
【发布时间】:2010-10-22 08:33:46
【问题描述】:

我正在构建一个 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 中使用了 Enum,所以当我的 .aspx 页面(来自 http://localhost/Agent.asmx/js)中引用 WebService 时,它​​将在为 Agent 生成的 JavaScript 中输出以下内容:

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 中自动公开它。有没有办法,也许是一个属性或我可以使用的东西,让它被包含在内?

如果没有,我的后备解决方案是创建一个以我的 Enum 作为参数的虚拟方法,以便它可用,并且永远不要从 JS 调用它,尽管我不想乱扔代码。谢谢!

【问题讨论】:

    标签: asp.net javascript web-services asp.net-ajax asp.net-3.5


    【解决方案1】:

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

    【讨论】:

    • 服务中使用枚举;它作为类的属性传递回客户端,该类被序列化并以 JSON 形式返回。
    • 我选择使用 dummy 方法来完成所有工作——实施起来最轻松。
    【解决方案2】:

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

    我相信你应该看看 [XmlInclude] 属性。

    【讨论】:

    • 服务中使用枚举;它作为类的属性传递回客户端,该类被序列化并以 JSON 形式返回。
    • 所以,如果你只是正常返回那个类,枚举就会在那里,对吧? [ScriptService] 没有工作吗?
    • 我试过 XmlInclude,我猜这只是 WSDL,你必须为 Enum 创建一个虚拟类包装器,因为它不能在 Enums 上工作。
    • 直接*在枚举上工作,我的错
    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多