2010-02-05 61 views
4

我有以下方法的ASMX Web服务ASMX web服务与GUID参数

[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 

有什么建议吗?

+2

您可以随时将参数类型更改为字符串并执行Guid.Parse。 – 2010-02-05 19:15:02

+0

@ klausbyskov是的,但我宁愿有框架句柄Guid反序列化,而不是必须添加什么应该是不必要的代码来验证服务器上的类型。 – 2010-02-05 19:22:01

回答

3

我试图找到正式的文档,但它似乎无法使用GUID作为WebMethod上的输入类型,因为它不是可以在路上进行验证的东西。但是我找不到关于它的确切文档。

我很可能会把它作为一个字符串参数,并让你的方法的第一行做一个Guid.Parse来验证它是一个GUID,如果没有,发送给用户一个异常。这是我在其他需要WebMethod上的GUID的实现中看到它完成的方式。

+0

我认为这就是我要去的方式,尽管最终是一个非常简单的数据类型需要经过这个额外的步骤,这令人讨厌。如果您发现明确声明不支持guid的链接,请将其添加到您的帖子中。 – 2010-02-05 19:28:13

1

您是否尝试过使用带有实际SOAP调用的服务?

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

我也很肯定6C388126-5787-4B63-AAFE-5BCC4EA4DF83只代表一个GUID给我们人类,它是一个字符串到计算机 - 本质上你有一个类型不匹配,他们不是一个方法定义的适当的参数(至于操作系统被关注到)。