2010-08-10 52 views
0

我有一個對的列表(CarType(Enum),code(string))。不幸的是,這個集合代碼並不是唯一的。通過asmx傳遞集合

Van,C1 
Van,C2 
Pickup,C1 

如何通過asmx webservice傳遞此集合。

現在我有KeyValuePair []作爲parametr在WEBMETHOD

[webmethod] 
public void DestroyCars(KeyValuePair<string, CarType>[] cars) 
{ 
//implementation. 
} 

但是,當我更新我的Web引用(不是服務引用),並把KeyValuePair的實例[]在

service.DestroyCars(someinstance of KeyValuePair<string, CarType>[]) 

我得到異常,因爲我必須在那裏KeyPairValuOfStringCarType。

這是爲什麼,以及如何解決它?

更清楚:

我想通過網絡服務來傳遞多維集合。

創建

[的WebMethod] 公共無效DestroyCars(KeyValuePair []汽車) {// 執行。 }

我更新了我的應用程序的webreference。

當我想從我的應用程序中使用KeyValuePair []的新實例調用此webmethod時,出現此參數不能分配給我的webmethod的參數類型的錯誤。

Intellisense告訴我這個參數的類型是KeyPairValuOfStringCarType,它不是true。

我在net.reflector中檢查這種類型的類型,我看到這是一個字符串。

我知道沒有意義。這是我的方式尋求幫助:/

+0

您能與我們分享異常消息嗎? – 2010-08-10 11:55:57

+0

對不起,不例外。我的意思是錯誤。 – user278618 2010-08-10 11:57:54

+2

您能否與我們分享相關信息*無論它是否是例外,錯誤或其他? - 另外,「因爲我必須在那裏KeyPairValuOfStringAndCarType」是什麼意思? – Timwi 2010-08-10 12:02:02

回答

4

你遇到這個錯誤的原因:

"parameter type "System.Collections.Generic.KeyValuePair[]" is not assignable to parameter type mywebservicenamespace.KeyPairValuOfStringCarType

是因爲當asp.net爲您創建的Web服務代理(Web服務引用),它會「複製」您的Web服務公開的任何自定義類型,在這種情況下,KeyValuePair<string, CarType>會在代理中轉換爲KeyValuePairOfStringCarType,以便您可以將這些內容傳遞給Web服務。

你需要做的打電話給你的web服務(這爲我工作,在Visual Studio 2008中,針對一個asmx Web服務):

// Create a new CarKeyValuePair in your web service project 
public struct CarKeyValuePair 
{ 
    public string Key { get; set; } 
    public CarType CarType { get; set; } 
} 

// Change your web method to use this instead of KeyValuePair 
[WebMethod] 
public void DestroyCars(CarKeyValuePair[] cars) 
{ 
    // Implementation here 
} 

然後,您可以更新您的Web服務的參考和寫的東西類似於調用Web服務的代碼中的以下內容:

service.DestroyCars(new CarKeyValuePair[] { new CarKeyValuePair() { CarType = CarType.Pickup, Key = "C1" } }); 

// or 

var cars = new List<CarKeyValuePair>(); 
var car = new CarKeyValuePair(); 
car.CarType = CarType.Pickup; 
car.Key = "C1"; 
cars.Add(car); 
service.DestroyCars(cars.ToArray()); 
+0

完美,謝謝Rob – user278618 2010-08-10 13:32:24

+1

@phenevo,不是問題=)因爲我懷疑你已經知道,給你提及* webreference(不是servicereference)*,生活變得很容易如果你移動到服務引用和共享類型程序集,因爲類型更容易共享,這就是我對基於WCF的服務的經驗,不知道它對asmx有什麼不同=) – Rob 2010-08-10 13:35:28