2011-11-08 2 views
1

WCF를 통해 SQL DB에 연결하는 WP7 앱을 만들고 있습니다. 그러나 클라이언트 프록시를 추가하고 테스트 한 후에이 오류가 발생합니다.WP app with WCF

IExtensibleDataObject 네임 스페이스 System.Runtime.Serialization에 존재하지 않는 형식 또는 네임 스페이스 이름 (당신은? 어셈블리 참조가 누락) 분명히

답변

1

(그리고 this blog에 따라), WP7에서 사용하는 .NET Compact Framework에서이 IExtensibleDataObject을 노출하지 않습니다 System.Runtime.Serialization 네임 스페이스에 있습니다.

클라이언트 프록시를 생성하는 데 Silverlight Service Model Proxy Generation Tool을 사용하는 방법도 있습니다. 결과 코드는 WP7에서 작동해야합니다.

0

IExtensibleDataObject를 구현해야하는지 확인할 가치가 있습니다. 이는 서로 다른 버전의 데이터 계약간에 순방향 호환성을 위해 설계되었습니다 (Forward-Compatible Data Contracts 참조).

데이터를 라운드 트립해야하는 시나리오 (예 : 메시지를 서비스에 보내고 동일한 데이터 계약서를 사용하여 메시지를 보내야하는 시나리오)에서 작업하지 않고 (2) 새 데이터 계약을 사용하는 클라이언트를 지원할 필요가 없습니다. 그러면 데이터 계약의 이전 버전을 이해하는 서비스로 메시지를 보냅니다. 이전 버전의 데이터 계약은 보낸 데이터를 사용하여 클라이언트의 새 버전으로 메시지를 반환합니다. 중요한 시나리오가 될 수 있지만 모든 사람이 지원해야하는 것은 아닙니다. 종종 이전 버전과의 호환성으로 충분합니다. 그리고 IExtensibleDataObject 접근법은 새로운 데이터 계약에있는 추가 데이터가 이전 서비스의 논리에 의해 무시 될 수 있으며 호출자에게 그대로 반환한다고 가정합니다. 다시 말하지만, 어떤 경우에는 적용되지만 다른면에는 적용되지 않습니다. 가장 단순한 경우, 이전 버전의 서비스에 데이터를 라운드 트립하는 새 버전의 전화 애플리케이션을 지원해야하는 이유는 무엇입니까?

이 기능이 필요하다고 생각하지 않는다면 서비스에서 IExtensibleDataObject 계약을 제거하는 것이 좋습니다.

정방향 호환성의 스타일이 필요한 경우 WCF 생성 프록시없이 작업하고 채널을 만들고 System.ServiceModel.Channels.Messages를 보내고 받고 SOAP 메시지를 직접 처리해야합니다. 원래 계약의 일부가 아닌 추가 XML 요소로 수행하려는 작업. 확실히 고급 주제지만, 마음을 정하면 끝낼 수 있습니다.