정말로 라이브러리를 변경할 수 없다면 WCF를 통해 클래스를 노출하는 유일한 방법은 각 메서드에 대한 래퍼 개체를 만드는 것입니다. 이 작업을 위해 코드 생성기를 작성해 보겠습니다.
필요한 메타 데이터 정보를 가져 오기 위해 노출 할 어셈블리의 유형 집합을 반사 할 수 있습니다.
t4 템플릿 (VS 2008 이상 버전)과 T4 Toolbox과 같은 것을 사용하여 코드 생성기를 만들어 코드를 작성할 수 있습니다. 생성기가 완료되면 라이브러리가 변경 될 경우 다시 생성해야합니다. 또한 코드 생성기를 업데이트하고 다시 실행하는 버그를 수정하는 것도 쉽습니다.
내가 완성도 만 언급했지만 문제가되는 다른 옵션은 문제의 코드를 분해하고 패치하는 것입니다. ildasm과 같은 것을 사용하여 어셈블리의 il을 덤프하고, 필요한 WCF 속성을 추가 한 다음 ilasm으로 다시 어셈블 할 수 있습니다. 그러나 프로세스가 오류가 발생하기 쉽습니다. 어셈블리를 변경하면 프로세스를 다시 실행해야하며, 어셈블리의 IP를 소유 한 사람에 따라 법적 문제가 발생할 수 있으며 어셈블리에 다시 서명해야합니다. 강력한 이름의 어셈블리 일 필요가있는 경우 잠재적으로 다른 암호화 인증서가 필요합니다.
* 편집 *
요청 래퍼 코드 샘플 :
public class ToWrap {
public String Name { get; set; }
public String Address { get; set; }
}
[DataContract]
public class Wrapper {
private ToWrap _wrapped;
// constructor for WCF marshalling
public Wrapper() {
_wrapped = new ToWrap();
}
public Wrapper(ToWrap wrapped) {
_wrapped = wrapped;
}
[DataMember]
public String Name {
get { return _wrapped.Name; }
set { _wrapped.Name = value; }
}
[DataMember]
public String Address {
get { return _wrapped.Address; }
set { _wrapped.Address = value; }
}
}
[Serializable] 플래그가 지정되어 있습니까? –