2010-08-10 4 views
0

쌍 목록 (CarType (열거 형), 코드 (문자열))이 있습니다. 불행히도이 컬렉션 코드는 고유하지 않습니다.asmx를 통한 콜렉션 전달

Van,C1 
Van,C2 
Pickup,C1 

asmx webservice를 통해이 컬렉션을 전달하는 방법.

지금 내가 가진 KeyValuePair []

WEBMETHOD

[webmethod] 
public void DestroyCars(KeyValuePair<string, CarType>[] cars) 
{ 
//implementation. 
} 
에서 parametr 그러나 같은 내 webreference (안 servicereference)를 업데이트하고 []

나는 예외가
service.DestroyCars(someinstance of KeyValuePair<string, CarType>[]) 

에 KeyValuePair의 인스턴스를 둘 때, 왜냐하면 거기에 KeyPairValuOfStringCarType이 있어야하기 때문입니다.

이유는 무엇이며 어떻게 수정해야합니까?

더 명확하게하려면 :

나는 웹 서비스를 통해 다차원 수집을 전달하려는.

나는

[의 WebMethod] 공공 무효 DestroyCars (KeyValuePair [] 자동차) { // 구현을 작성합니다. }

내 응용 프로그램의 웹 참조를 업데이트합니다.

KeyValuePair []의 새 인스턴스를 사용하여 응용 프로그램에서이 webmethod를 호출하려면이 매개 변수를 my webmethod의 매개 변수 유형에 할당 할 수 없다는 오류가 발생합니다.

Intellisense는이 매개 변수의 유형이 KeyPairValuOfStringCarType이고 true가 아님을 알려줍니다.

이 유형의 유형을 net.reflector에 확인하고 이것이 문자열임을 확인합니다.

나는 의미가 없다는 것을 알고 있습니다. 이것은 내가 도움을 요청하는 방법입니다 :/

+0

예외 메시지를 우리와 공유 할 수 있습니까? –

+0

죄송 합니다만 예외는 아닙니다. 나는 오류를 의미합니다. – user278618

+2

관련 정보를 예외, 오류 또는 기타 다른 정보와 공유 할 수 있습니까? 또한, "KeyPairValuOfStringAndCarType이 있어야하기 때문에"는 무엇을 의미합니까? – Timwi

답변

4

이 오류가 발생하는 이유 :

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

이기 때문에 asp.net 당신을위한 웹 서비스 프록시 (웹 서비스 참조)를 생성 할 때, 웹 서비스가 노출하는 모든 사용자 정의 유형을 "복제"합니다.이 경우 KeyValuePair<string, CarType>은 프록시에서 KeyValuePairOfStringCarType으로 변환되므로이를 웹 서비스에 전달할 수 있습니다.

당신은 당신의 웹 서비스 (이이 asmx 웹 서비스를 대상으로 비주얼 스튜디오 2008에, 나를 위해 일한)는 호출해야 할 일은 :

// 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 
} 

당신은 다음 웹 서비스 참조를 업데이트하고 뭔가를 쓸 수를 웹 서비스를 호출하는 코드에서 다음과 유사합니다.

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

완벽, 고맙습니다 롭 – user278618

+1

@phenevo, 문제가 아닙니다.) * webreference (servicereference가 아닌) *에 대한 언급을 주신다면 이미 알고 계실 것 같아서 서비스 참조 및 공유 형식 어셈블리로 이동하면 형식이 더 쉽게 공유되므로 WCF 기반 서비스에 대한 내 경험에 비하면 어쨌든 asmx와는 어떤 차이가 있는지 확실하지 않습니다. – Rob