2010-02-05 60 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給我們人類,它是一個字符串到計算機 - 本質上你有一個類型不匹配,他們不是一個方法定義的適當的參數(至於操作系統被關注到)。