2011-08-11 2 views
3

호출 및 Rx에서 Observable.FromAsyncPattern를 사용하여 실버의 WCF 서비스를 구현하는 방법을 보여주는 블로그 게시물을 발견하는 방법. 블로그 게시물에는 Silverlight 개발자를위한 메모가 있습니다.실버 WCF BeginXXXX 숨기기를 취소하고 EndXXXX 서비스가 나는 RX와 실버 라이트에 대한 학습 된

Silverlight!
Silverlight의 웹 서비스에서 생성 된 클라이언트 코드가 약간의 동작을 수행합니다. 성가시다 - BeginXXXX/EndXXXX 호출을 숨기고 아마도 인 Intellisense 클리너를 만듭니다. 그러나, 그들은 사라하지 않는, 방법 당신에게 는 기본 인터페이스에 MyCoolServiceClient 객체를 캐스팅하는 것입니다 그들을 다시 얻을 수 있습니다 (즉, LanguageServiceClient 객체가 구현하는 생성 ILanguageServiceClient 인터페이스가)

See entire blog post here

BeginXXX 및 EndXXX 메서드가 내 서비스에 대해 숨겨져있는 것을 볼 수 있지만 ServiceClient를 인터페이스에 캐스팅해야한다고 말하면 자신이 의미하는 바가 확실하지 않습니다. 내가 예를 들어, Service1Client의 instace를 생성 한 경우

Service1Client scClient = new Service1Client(); 

어떻게 캐스팅하겠습니까? 나는 시도했다 ...

그러나 아무 소용이 없다. .. 매우 많은 제안은 인정했다.

+0

이 질문에게 upvote에 제공! –

답변

2

단순히 이름이 Service1이고 그 인터페이스가 Service1Client 인 인터페이스가 있습니다. 그래, 그 이상한 알고 있지만 모든 인터페이스 유형 문자 "I"로 시작하는 구문 규칙이 없습니다.

Service1 scClient = new Service1Client(); 

그런 다음 간단한 시작/종료 비동기 패턴이 Service1 작업 -이 : 그래서 당신의 코드를 변경합니다. Begin에 전달 된 콜백은 UI 스레드에서 실행되지 않으므로주의하십시오.

+0

나는 당신이 IService1을 의미한다고 생각한다. scClient = new Service1Client(); 그런 다음 scClient 인스턴스로 작업합니다. –

+0

@ 짐 : 아니, 나는 '서비스 1'을 의미하지 않았다. 당신은 웹 프로젝트에 Service1''라는 WCF 서비스를 만들 경우 다음'Microsoft.Silverlight.ServiceReference'는 Service1''라는 인터페이스를 시작 측면에서 OperationContract' '로 표시된 모든 방법을 나열하여 실버 라이트 프로젝트에 자동으로 생성됩니다/끝 쌍. 그런 다음'Service1'을 구현하는'Service1Client'가있는 다른 종류의 클래스들을 만듭니다. 이 경우 문자 앞에 "I"가 붙지는 않습니다. – AnthonyWJones

1

그것은 생성 된 코드는 그 종류 explicitly implement 인터페이스를 포함하는 것을 의미한다. 이것을하기위한 많은 이유가 있습니다. 나는 당신이하고있는 일을 한 번도 해본 적이 없기 때문에 건축 적 고려 사항이 여기에 있는지 잘 모르겠습니다.

당신은 이러한/종료 방법을 시작 포함하는 생성 된 인터페이스를 구현하는 경우 확인하려면 Service1Client을 검사해야한다. 이 경우 인 경우 서비스 클라이언트 유형을 변환해야합니다. 그렇지 않은 경우 일년 전부터 상황이 변경되었을 수 있습니다.