2010-08-19 1 views
12

this thread에 지정된 문제와 유사한 WCF RIA 서비스에 몇 가지 문제가 있습니다.Ria Services 쿼리 도메인 서비스 메서드에 매개 변수로 복잡한 개체 전달

내가 만들고있는 도메인 서비스 메서드 (Query 메서드)는 복합 개체 매개 변수를 사용해야합니다. 예를 들어 domainservice 방법 :

public ComplexObjectResult GetComplexObject(ComplexObjectParameter test) 
    { 
     //do stuff 
    } 

매개 변수 개체 : 70 매개 변수 도메인 작업 항목 'GetComplexObject'의 '테스트'미리 정의 된 직렬화 중 하나 여야합니다 오류 :이 컴파일 오류가

public class ComplexObjectParameter 
{   

    [Key] 
    public decimal ID { get; set; } 

    ... other fields 
} 

종류는입니다.

웹에서 일부 검색 후 this msdn thread을 찾았습니다. 이는 RIA 서비스의 한계이며 스레드가 적절한 해결 방법을 지정하지 않는다고 명시합니다.

지금 어떤 더러운 해결 방법이있을 것 같다 :

  • 변경 복잡한 매개 변수는 문자열을 입력하고 직렬화는/I가 매우 해키 솔루션을 찾을 parameterobject 해결할 역 직렬화.

  • 도메인 서비스 방법에 [Invoke] 태그를 사용하고 처음부터 RIA를 사용하고있는 모든 RIA 추적 기능을 해제하십시오.

단점이 적은 대안을위한 대안이 있습니까? 누군가이 문제에 대한보다 우아한 해결 방법을 찾았습니까?

감사

+0

두 번째 옵션 인 Stephane을 사용했습니다. 반환 된 복잡한 유형은 클라이언트에서만 읽기 전용 이었기 때문에 추적 기능의 손실이 문제가되지 않았습니다. 다음 번에는 잠재적 인 솔루션 (심지어 더러운 것까지)을 답변으로 고려해보십시오 ... 그러면 질문과 답변 모두에 투표했을 것입니다! –

답변

6

더러운 해결 방법 세, 클라이언트에서 개체를 만들 수 WCF RIA 공구를 알리는 "복합 형"을 노출하는 [호출] 속성을 사용하고 도메인 서비스에 메서드를 추가하는 것입니다 - 측 :

public ComplexObjectParameter ExposeComplexObjectParameter() 
{ 
    throw new NotSupportedException(); 
} 

나는 방법은 지금까지 원격으로 호출하면 침묵의 실패를 방지하기 위해 내 도메인 서비스 방법에 NotSupportedException이 넣어.

이 솔루션이 "모든 RIA 추적 기능"의 손실 문제에 어떻게 영향을 미치는지 확실하지 않습니다. 복잡한 유형을 매개 변수로 사용하여 조합 가능한 쿼리를 작성하는 방법에 대해서는 답변하지 않습니다.

더러워 지지만 문제의 원인과 가장 가까운 문제를 추상화합니다. 발신 및 수신 코드가 더 깨끗합니다. 이렇게하면 더 높은 레벨에서 "우아함"을 유지하면서 더러 우면 아래로 밀어냅니다.

+1

안녕하세요 에드, 난 이미 클라이언트 측에서 생성 된 complexparameter 개체를 가짜 쿼리 메서드를 만들었습니다.그것은 더러운 솔루션 2의 일부입니다. 그러나 복잡한 솔루션을 사용하여 결국 데이터베이스에 복잡한 개체 매개 변수를 저장 한 다음 쿼리 할 때 ID를 전달합니다. 이 솔루션은이 문제를 겪고있는 모든 사람들에게 적용되지는 않을지 모르지만 제 사례에 적합합니다. 노력해 주셔서 감사합니다. – Stephane

+0

복잡한 유형을 '노출'해야한다고 설명하는 투표 하나. –

2

아주 오래된 질문입니다. 그러나 나는 이것으로 조금을 얻었고 대답을 찾았습니다. ComplexObject의 MSDN 문서에서 :