2010-02-08 3 views
0

일반적인 설정이 있습니다. 이 솔루션에는 비즈니스 객체를위한 일반적인 .NET 클래스 라이브러리, WCF 프로젝트, Silverlight 프로젝트 및 지원 웹 응용 프로그램 프로젝트 및 Silverlight 클래스 라이브러리가 포함되어 있습니다. 내 비즈니스 클래스 라이브러리의 클래스는 모두 "[serializable]"속성으로 표시됩니다. WCF 서비스에는 비즈니스 클래스 라이브러리에있는 개체 중 하나의 목록을 반환하는 메서드가 있습니다. Silverlight 클래스 라이브러리 프로젝트에서이 서비스에 대한 참조를 추가하면 프록시는 오류없이 생성되지만이 프록시에는 서비스 또는 서비스 인터페이스 자체의 정의가 포함되어 있지 않습니다. 여기에는 서비스에서 반환 할 비즈니스 개체 안에 포함 된 전체 개체 모델의 정의가 포함되어 있지만 서비스 클라이언트에 대한 실제 참조가 없으면 해당 서비스를 호출 할 수 없습니다. 이 설정의 설계 또는 구현에 문제가 있습니까?Silverlight 클래스 lib에있는 참조 된 라이브러리의 비즈니스 개체를 사용하는 WCF 서비스 참조는 서비스 클라이언트없이 프록시를 만듭니다.

답변

1

[OperationContract][ServiceContract] 속성을 WCF 인터페이스에 추가 했습니까?

+0

예. 참조 된 어셈블리에 상주하는 비즈니스 객체를 반환하는이 메소드를 노출했을 때만이 문제점을 알 수 있습니다. 내가 서비스 인터페이스와 서비스 구현에서 그 작업에 대해 언급하는 순간, 프록시는 올바르게 생성됩니다. –

0

비즈니스 개체가 [DataContract]으로 표시되어 있는지 확인하십시오. 그 안에 포함 된 모든 객체도 해당 속성으로 표시되어야합니다.

편집 : 제 3 자 코드를 수정하고 싶지 않으므로 여기에 정의 된 유형을 포함하여 서비스에 대한 수동 프록시를 만들 수 있습니다.

다음은 모두 WCF the Manual Way을 사용하는 기사입니다.

+0

앞에서 언급했듯이. 비즈니스 개체는 별도의 DLL에 있습니다. 이것은 내가 레거시 코드 인 이유에 대해 내가 변경하는 것에 대해 불안해하는 이유입니다. 그러나 비즈니스 객체는 모두 해당 정의에 [serializable] 속성을 포함합니다. 다른 방법으로, 참조 된 라이브러리 코드를 변경하지 않고 서비스 끝에서 클라이언트 끝으로이 비즈니스 개체를 전송할 수 있습니까? –

0

"서비스 참조 추가"를 사용하는 대신 명령 줄에서 slsvcutil.exe tool을 사용하여 프록시를 생성 해 보았습니까? 적어도 문제를 추적하는 데 도움이되는 프록시를 생성하는 동안 경고를 울릴 수 있으며 프록시에 대한 다양한 옵션을보다 잘 제어 할 수 있습니다.

+0

Dan을 올바른 방향으로 가리켜 주셔서 감사합니다. slsvcutil을 사용하여 생성 된 프록시의 크기는 450KB이며 "서비스 참조 추가"방법을 사용하면 약 50KB입니다. slsvcutil에 의해 생성 된 프록시는 모든면에서 완벽합니다. 그러나 이제 컴파일 시간 오류가 발생합니다. 일부 비즈니스 오브젝트에는 대리자가 들어 있습니다. 생성 된 코드는 이러한 속성을 대리자로 사용하는 대신 System.MulticastDelegate에서 파생되는 부분 클래스로 사용합니다. System.Delegate 또는 System.MulticastDelegate에서 파생 될 수 없기 때문에 컴파일 오류가 발생합니다. –

+0

제안 해 주셔서 감사합니다. 대리자는 특히 매개 변수 또는 서비스 계약의 메서드 반환 형식입니까? 대리자를 WCF에서 직렬화 할 수 없기 때문에 오류가 발생한다고 생각합니다. 필수적이지 않은 경우 [DataMember]로 표시하지 않고 계약에서 제외 할 수 있습니다. 이것을 참조하십시오 게시물 http://stackoverflow.com/questions/957474/system-componentmodel-propertychangedeventhandler-cannot-derive-from-special-cl –

관련 문제