2011-03-16 4 views
1

이미 여기에 요청 된 유사한 quetion 실패합니다. 유일한 차이점은 내가 올바른 방법으로 모든 매개 변수를 전달하는 것입니다.데이터 서비스 작업은

나는 데이터 서비스에 정의 된이 opertaion 방법이 있습니다

[WebGet] 
    public IQueryable<Equipment> GetCompanyEquips(int id) 
    { 
     return this.CurrentDataSource.GetCompanyEquips(id); 
    } 

을 그리고 나는 어떤 내 웹 브라우저에서 문제없이 결과 얻을 수 있습니다

http://localhost:51685/ITSServiceOData.svc/GetCompanyEquips?id=18

그러나 때 'mtrying 이런 식으로 내 고객의 결과를 얻으려면 :

var r = this.CreateQuery<Equipment>("GetCompanyEquips"); 

      r.AddQueryOption("id", CompanyId); 

      r.ToArray(); 

다음 예외가 있습니다.

"이 요청을 처리하는 동안 오류가 발생했습니다."

도 r.Query = "{http://localhost:51685/ITSServiceOData.svc/GetCompanyEquips}"디버거에서 볼 수 있습니다. 여기에 뭔가 잘못된 것으로 의심됩니다. 왜냐하면 내가 볼 수 없기 때문에? id = 18 여기서 끝납니다.

은 또한이 같은 방법을 호출 할 때 :

this.Execute ("http://localhost:51685/ITSServiceOData.svc/GetCompanyEquips?id=18") - 반환 하늘의 열거가 들어 있습니다 (이 경우 예외가 발생하지 불구하고)하지만 브라우저에서 동일한 쿼리 문자열을 호출 그것은 쇼 예상 결과.

또한 모든 params가없는 비슷한 방법으로 호출 할 때 - 모든 것이 잘 동작합니다. 도와주세요! 나는 문제를 해결하려고 노력하는 인터넷 개미를 검색함으로써이 문제에 대해 하루 종일 보냈지 만, 내 코드에는 아무런 문제가 없었다.

감사합니다.

답변

2

AddQueryOption 메서드는 IQueryable의 새 인스턴스를 반환합니다. 수정할 필요가 그래서 코드가해야 할 일 :

r = r.AddQueryOption("id", CompanyId); 

다른 한 가지 : 클라이언트 라이브러리는 기본 또는 복합 유형의 열거를 돌려 서비스 운영에 독서 응답을 지원하지 않습니다. 이렇게하려면 장비 유형이 엔티티 유형이어야합니다.

+0

고맙습니다. 이러한 작업을 통해 엔티티 복합 유형을 반환하지 않거나 여기에서 다른 데이터 서비스를 만드는 것이 유일한 방법입니다. – baio

+0

두 번째 질문을 이해하지 못합니다. 클라이언트 라이브러리는 원시 또는 복합 유형 (또는 그것들의 열거 형)을 리턴하는 서비스 조작의 응답을 구문 분석하는 것을 지원하지 않습니다. "해결 방법"은 서비스 작업에서 엔티티 유형을 반환하거나 (때때로 가능할 수도 있고 때로는 다소 어렵거나) 직접 응답을 구문 분석하는 것입니다 (XML 형식은 다루기가 매우 쉽습니다). –