将Enum暴露给WebService的客户端JavaScript而不在WebMethod中使用它?

时间:2009-04-28 15:02:28

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

我正在构建一个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时,它将在代码生成的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);
}

现在我可以在客户端的任何地方使用这些枚举。现在,这一切都很好,但我在我的Agent中有另一个Enum,我实际上并没有在任何WebMethods中使用,我也希望在Agent的JavaScript中自动公开。有没有办法,也许是我可以使用的属性或东西,使它被包括在内?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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