2013-03-18 1 views
2

Reflection Provider (http://msdn.microsoft.com/en-us/library/dd728281.aspx)를 사용하는 방법에 따라 Order 및 Item 클래스를 Class Library로 이동하고 SVC 파일로 웹 프로젝트에서 클래스 라이브러리를 참조하기 전까지 모든 것이 잘 작동합니다.다른 프로젝트의 모델 클래스를 사용하여 Reflection Provider를 사용하여 WCF Data Services OData를 만드는 방법은 무엇입니까?

POCO 클래스를 WCF 프로젝트로 이동하면 모두 잘됩니다.

WCF 프로젝트에서 POCO 클래스를 분리 된 어셈블리로 이동하면 설명이없는 500이됩니다.

내 poco 클래스를 별도의 프로젝트에 보관하고 OData 끝점으로 노출 할 수 있기를 원합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

- UPDATE--
위에서 설명한 시나리오는 WCF OData Reflection Provider를 사용하여 발견 한 문제점을 설명하기위한 것입니다. 제 실제적인 문제는 아니지만 설명을 위해 설명하기가 더 쉽습니다.

답변

0

(면책 조항 : 일반적으로 문제를 해결하는 데 도움이되지 않는 문제에 대한 답변을 좋아하지 않지만 문제가 올바른 문제가 아닌 이유를 설명하지만이 경우에는 정당하다고 생각합니다 :))

당신이 그것에 대해 생각한다면, 당신은 정말로 그것을하고 싶지 않습니다.
Order와 Item 클래스는 실제로 POCO가 아닙니다. 그들은 이 아닙니다. 'plain'C# objects; 그들에는 데이터 속성이있어서 데이터 전송 객체 (DTOs)이됩니다.
이들은 서비스와 클라이언트 사이의 인터페이스에 속합니다.
도메인 엔터티 (또는 POCO)의 항목 및 주문은 대개 조금 복잡해지며 작업 외에 비즈니스 이외의 다른 것들을 포함합니다.

올바른 방법은 Order와 Item에 전체 속성 집합과 작업 집합이 포함 된 풍부한 도메인 모델을 사용하는 것입니다. 그 위에 DTO 계층이 있습니다.이 DTO 계층에는 서비스 클라이언트가 필요합니다.

전선을 통해 POCO를 보냈다는 것을 'the stripper pattern'이라고했고, 나는 이것이 최고라고 생각합니다.

+0

실제로이 방법으로는 문제가 해결되지 않습니다. 나는 패턴에 대한 지침을 요구하지 않고있다. OData Reflection Provider를 사용할 때 WCF 제한 사항이 무엇인지에 대한 해결책을 묻고있다.POCO 객체를 보내는 것은 오늘날 모든 단일 WebApi 웹 서비스 프로젝트가하는 일이며, 그것은 안티 패턴이 아닙니다. 감사! –

+1

우리는 POCO의 의미에 대해 다른 견해를 가지고 있다고 생각합니다. 나에게 그것은 평범한 대상을 의미한다. 데이터 속성 표기법이있는 오브젝트는 정의에 따라 일반 텍스트가 아닙니다. 저는 WebApi 프로젝트에 익숙하지 않으므로 그 부분에 대해서는 언급 할 수 없습니다. 실제로이 경우라면이 기술의 작업 방식에 동의하지 않는다고 말하면됩니다. 내부 클래스를 고객에게 공개하는 것 외에도 POCO (및 POCO에 의해 도메인 객체를 의미 함)를 유선으로 전송하는 것은 필연적으로 통신 작업에 대한 중복 데이터를 전송하는 결과를 가져올 것이라고 믿습니다. –

3

WCF Data Services (현재 5.3)의 최신 버전으로 업그레이드하십시오 (아직 5.3 버전이 아닌 경우). .Net 4.5와 함께 제공되는 WCF Data Services 버전을 사용하여 문제를 재현했지만 NuGet을 사용하여 두 어셈블리의 참조를 Microsoft.Data.Services의 최신 릴리스로 업그레이드 한 후에는 문제가 해결되었습니다.

이미 최신 버전의 WCF Data Services를 사용하고있는 경우 두 어셈블리가 모두 동일한 버전의 WCF Data Services를 참조하는지 확인하십시오. (

[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
public class YourService : DataService<...> 

그리고 그 결과로 질문을 업데이트하십시오 :이 중 어느 것도 당신의 문제를 해결하는 경우

, 더 자세한 오류 메시지 및 스택 추적을 얻을 수 있도록 DataService의 클래스에 다음 속성을 추가 솔루션이 스택 추적에서 즉시 튀어 나오지 않는 경우).

+0

오늘 시도해 보겠습니다. 효과가 있다면 알려 드리겠습니다. 팁 주셔서 감사! –

+0

이것으로 해결되었습니다. 팁 고마워. 주 어셈블리에서 데이터 엔터티 형식을 일반 형식 어셈블리로 옮길 때 Microsoft.Data.Services.Client에 대한 참조를 추가하여 DataServiceEntity 특성 및 기타 형식에 액세스해야했습니다. WCF Data Services 버전 대신 .NET 4.5 버전의 어셈블리를 추가했습니다. 부스. – dthorpe