【问题标题】:ASMX webservice with Guid parameter带有 Guid 参数的 ASMX 网络服务
【发布时间】:2010-02-05 19:10:58
【问题描述】:

我有一个 asmx web 服务,方法如下

    [WebMethod]
    public string LoadRegions(Guid id)
    {
        throw new NotImplementedException();
    }

当我尝试调用此方法时,我收到此异常:

System.InvalidOperationException: LoadRegions Web Service method 
name is not valid.
at System.Web.Services.Protocols.HttpServerProtocol.Initialize()

如果我将参数类型从 Guid 更改为字符串,问题就会消失。建议?出于测试目的,我从 Firefox 使用此 url 调用服务:

http://localhost:81/services/ContactService.asmx/LoadRegions
?id=6C388126-5787-4B63-AAFE-5BCC4EA4DF83

有什么建议吗?

【问题讨论】:

  • 您可以随时将参数类型更改为字符串并执行 Guid.Parse。
  • @klausbyskov 是的,但我宁愿让框架处理 Guid 反序列化,也不愿添加不必要的代码来验证服务器上的类型。

标签: asp.net ajax web-services asmx webmethod


【解决方案1】:

我正在尝试查找正式文档,但您似乎不能在 WebMethod 上使用 GUID 作为输入类型,因为它不是可以在进入的过程中验证的东西。但我找不到确切的文档。

我很可能会将其保留为字符串参数,并让您的方法的第一行执行 Guid.Parse 以验证它是否是 GUID,如果不是,则向用户发送异常。这是我在其他需要 WebMethod 上的 GUID 的实现中看到的方式。

【讨论】:

  • 我认为这就是我要走的路,尽管对于最终是一种非常简单的数据类型来说,必须通过这个额外的步骤很烦人。如果您发现明确指出不支持 guid 的链接,请将其添加到您的帖子中。
【解决方案2】:

您是否尝试过将服务与实际的 SOAP 调用一起使用?

我不认为 http GET 将允许您指定复杂的类型。

我也很确定6C388126-5787-4B63-AAFE-5BCC4EA4DF83 只代表我们人类的 GUID,它是计算机的字符串 - 本质上你有一个类型不匹配,它们不是用正确参数定义的方法(就操作系统相关)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    相关资源
    最近更新 更多