2010-06-24 3 views
0

을 쿼리로 데이터를 노출하지 않습니다 액세스 규칙WCF 서비스 운영 내가 형식의 서비스 작업이

[WebGet] 
public IQueryable<BusinessObject> BusinessObjectsByType(string name) 

나는 웹 브라우저를 통해이 서비스 작업에 액세스
config.SetServiceOperationAccessRule("BusinessObjectsByType", ServiceOperationRights.All); 

, 그것을 데이터를 공개하지만 피드와 엔트리 (AtomPub 형식)는 공개하지 않으며 '$ top, $ orderby'와 같은 기본 쿼리 옵션을 사용하여 '요청 된 리소스에 적용 할 수 없다'고 불평하지 않습니다. http://msdn.microsoft.com/en-us/library/cc668788.aspx에 지정된 모든 요구 사항을 충족했지만 성공하지 못했습니다. 어떤 도움을 주시면 감사하겠습니다. 감사.

+0

작업이 ServiceContract에 정의되어 있습니까? 최근에 코드가 변경 되었습니까? 서비스를 재 구축하고 시작 했습니까? –

+0

WCF 데이터 서비스에 정의 된 서비스 작업에 대한 ServiceContract를 언급 한 게시물을 발견하지 못했습니다. 이 서비스 작업을 시도하기 전에 데이터 서비스를 재구성하고 치고 있습니다. –

+0

서비스 계약 및 해당 계약을 구현하는 방법을 보여주십시오! –

답변

0

BussinesObject가 엔티티로 인식되지 않으면 서비스 연산은 대신 IEnumerable을 반환하는 것처럼 처리됩니다. 쿼리 작동을 위해 서비스 연산은 T가 엔티티 유형 인 IQueryable을 반환해야합니다. EF 또는 리플렉션 공급자를 가정하면 엔터티 형식은 키 속성 (경험적 또는 DataServiceKey 특성을 통해)을 가지며 IQueryable 형식의 컨텍스트 클래스에 속성이있는 형식입니다. BussinesObject가 엔터티가 아니면 WCF Data Services는 서비스 작업 결과에 대한 쿼리를 지원할 수 없습니다. 각각의 객체가 고유 한 URL (atom : id)을 가져야 만 응답을 직렬화하기 위해서는 객체가 주요 속성을 가져야 만하는 고유 한 URL을 생성 할 수있는 많은 이유가 있습니다. 주요 속성은 엔터티에 대해서만 정의 할 수 있습니다.

+0

포인터 Vitek에 감사드립니다. 위에서 언급 한 모든 것을 두 번 확인했습니다. 내가하는 일을 확인하기 위해 엔티티 목록에 대해 다른 데이터 서비스를 만들고 피드 및 항목 형식으로 응답을 쿼리 할 수 ​​있는지 확인했습니다. 그러나이 데이터 서비스를 서비스 조작으로 변환하면 응답을 쿼리 할 수 ​​없었습니다. 이것이 내가 .Net 3.5 및 Visual Studio 2008에 있다는 사실과 관련이 있는지 궁금합니다. –

+0

WCF Data Services에 대한 최신 업데이트가 있습니까? http://blogs.msdn.com/b/astoriateam/archive/2010/01/27/data-services-update-for-net-3-5-sp1-available-for-download.aspx (I don ' 그게 해결할 지 모르겠다.). $ 메타 데이터 엔드 포인트의 출력을 공유 할 수 있다면 문제를 더 잘 이해하는 데 도움이 될 수 있습니다. –

+0

좋아, 나는 내 실수를. 서비스 작업을 만들 때 엔티티에 대한 액세스 규칙을 제거하려고했습니다. 아직 서비스에서 엔티티 속성을 공개해야한다는 것을 알지 못했습니다. –