2010-08-12 2 views
0

내가 뭔가 명백한 것을 놓친 경우 사과를 많이 검색했습니다. 그리고 아래의 looong 텍스트를 읽어 주셔서 감사합니다.Silverlight에 제 3 자 인터페이스 (WCF 이상) 공개

제 3 자 (읽기 : 소스에 액세스/변경할 수 없음) 애플리케이션이 있습니다. 원격 처리를 통해 서버와 통신하는 서버 (Windows 서비스)와 API로 구성됩니다. 여러 가지 이유로 WCF에서이 API를 노출하고 싶습니다 (제목 : WCF 클라이언트가 하나 인 이유 참조).

문제가

의 API가

  1. 불변 더 WCF 자체를 사용하지 않고 (제 3 자 규칙 다음)
  2. 이 (가 직렬화/MarshalByRef 필요한 경우 원격에 대한)
  3. 인터페이스를 많이 사용하고 1 다음 내부 구현 클래스는

나는 WCF 자신을 속성 (매우 방해)를 사용할 수 없습니다.

다음은 API 자체가 "over the wire"(TCP 및 HTTP를 통한 원격 지원)로 사용될 수 있지만 원격으로는 충분하지 않습니다.

다음 3 나는 대부분 인터페이스가 있습니다 (WCF는 잘 처리되지 않으며 직렬화 할 수 없습니다). 구현 클래스를 전송할 수는 있지만 액세스 할 수 없습니다. 일반적인 사용 등등

var entryPoint = new ApiClientEntryPoint(); 
entryPoint.SomeMethodCall(); 
entryPoint.PropertyExposingAnInterface.SomeOtherMethodCall(); 

와 같은, 그래서

이 API의 일반적인 사용은, 단일 인터페이스 (및 그 구성원/속성)을 기반으로합니다.

내가하고 싶은 것은 WCF를 통해 공개하고 모든 호출/속성에 대한이 계층 매핑을 직렬화하는 프록시 (가능한 한 적은 노력/가능한 코드) (보통 WCF 의미가 아닌)를 생성하는 것입니다. 클라이언트가 서버의 실제 내용으로 이동합니다.

내가 지금까지 와서 가장 가까운 것은 this project에 걸림돌이되지만, 내 어깨에서이 부분의 큰 부분을 차지하는 더 많은/다른 도구가 있는지 궁금합니다.

일반적인 다른 조언이있는 경우 WCF에 기존 또는 변경 불가능한 항목을 래핑하는 더 나은 방법을 알려주십시오.

답변

0

제 조언은 외관 패턴을 사용하는 것입니다. 사용자의 용도에 맞는 새 WCF 서비스를 만들고 타사 서비스를 래핑하십시오. 고객이 귀하의 서비스와 이야기하고 제 3 자와 이야기하게됩니다. 그러나 고객은 이 아니며 타사와 직접 통화하십시오.

대부분의 시나리오에서 작동하지만 모든 시나리오에서 작동하지 않습니다. 나는 당신의 특정한 시나리오가 확실하지 않으므로 YMMV.

BTW에서는 서비스를 손으로 코딩하는 것을 피할 수있는 Silverlight 서비스를 제공하는 데 유용한 WCF RIA Services를 볼 수 있습니다. 그러나 당신의 특정한 시나리오에 따라서 그것은 갈 가장 좋은 방법이 아닐 수도 있습니다.

편집 :
그것은 API가 너무 커서 및/또는 고객의 사용 패턴을 효과적으로 외관을 사용하기 위해 너무 다양 이니까 분명하다. 제가 제안 할 수있는 유일한 다른 방법은 코드 생성 도구를 사용하는 것입니다. 리플렉션 (.NET API라고 가정)을 사용하여 API를 분리 한 다음 수집 한 세부 정보를 사용하여 새로운 서비스를 코드 생성합니다. Visual Studio에 내장 된 T4 템플릿을 보거나 CodeSmith와 같은 "강력한"도구를 살펴볼 수 있습니다. 하지만이 코드는 쓸데없는 코드 일 것이라고 추측합니다. 나는 이것을위한 자동화 된 솔루션을 모르고있다.

API가 문서화되어 있습니까? 그렇다면 XML이나 잘 구성된 HTML과 같은 구문 분석 가능한 형식의 설명서입니까? 이 경우 코드를 통해 반영하는 대신 문서에서 codegen을 수행 할 수 있습니다. 이는 세부 사항에 따라 더 빠를 수도 있습니다. 내 옆에

+0

그건 내가 특별히 피하려고하는 것입니다.이 API의 표면은 다소 큽니다. 단일 SL 클라이언트에 대해서만 제한 할 수 있지만 전체 API를 노출시키지 않고 재사용 할 수 없습니다. 제안하는 것처럼 수동으로 모든 것을 프록 싱하는 것은 너무 많은 작업입니다. 자동 생성 된 도움말이 필요합니다. RIA 서비스 : 확실하지 않으므로 확인하십시오. 하지만 오히려 데이터베이스 중심으로 보였습니다. –

+0

RIA Services는 데이터베이스 중심이 아닙니다. .NET 객체를 노출 할 수 있습니다. 그러나 API가 너무 커서 특정 메소드로 프록시 할 수 없다면 여기서는 도움이되지 않습니다. 파사드가 작동하지 않을 때 내 대답을 편집하여 조언을 제공합니다. – RationalGeek

+0

다음 주셔서 감사합니다. 예, API는 .Net 기반입니다. 예, 나는 그런 것을 생성하려고 시도 할 수 있습니다 (그리고 그것이 유일한 옵션 인 것 같습니다). 이 일을두고 다른 날을 보낸 다음 내 운명을 받아 들일 것입니다. –

0

좋아, 머리 반구 구조 # 1 :

  1. 사용 Visual Studio를 리팩터링 메뉴 'ApiClientEntryPoint'에 "추출 인터페이스"로 설정합니다.
  2. 위의 인터페이스를 구현하는 새 WCF 서비스를 만들고 VS를 가져 와서 메서드 스텁을 생성합니다.
  3. 'For PropertyExposingAnInterface.SomeOtherMethodCall'중첩 된 서비스 작업 개념이 없기 때문에 인터페이스를 병합해야합니다.

유일한 대안은 T4 코드를 사용하는 것입니다. 위의 아이디어보다 오래 걸릴 수 있습니다.

관련 문제