2009-03-12 2 views
0

WCF 웹 서비스에 객체를 전달하려고하는데 전달중인 객체가 서버 객체이므로 다음과 같이 TestConnection()을 호출 할 수 있기를 원합니다.WCF 및 객체

오전 데 문제는 서버의 기본 클래스입니다이고 내가 서버에 통과 할 수 있도록하려면

사용하려면 서버, 즉 SqlServer2005Server, OracleServer 및 ODBCServer 여러 파생 클래스가 있습니다 객체 후 캐스팅, 그 유형을 결정하고 그것을 캐스팅 할 수 없습니다 오전 방법

public string TestServerConnection(Server server) 
{ 
    if (server.ConnectionType == "SqlServer") 
    { 
     SqlServer2005Server x = (SqlServer2005Server)server; 
     // Tests connection to server and returns result 
     return x.TestConnection(); 
    } 

    return ""; 
} 

'서버'기본 클래스는 IServer

를 구현을 사용하여, 당신은 조언을 할 수 있습니까?

이 많은

답변

1

감사 각 파생 클래스에 대한 서비스 계약에 KnownType 선언을 추가해야합니다. 이것을 자동화하는 방법이 있습니다 (코드를 복잡하게하고 상속을 깨기 때문에).하지만 많은 작업이 필요합니다.

1

전달하는 객체가 DBMS에 "라이브"연결을 나타 냅니까? 대답이 '예'라면,이 일에 대한 희망은 없습니다. 예쁜 래퍼 임에도 불구하고 웹 서비스가 호출자로부터 얻는 유일한 것은 xml의 덩어리입니다.

2

Daniel Pratt said으로, 결국 (항상 그런 것은 아니지만 대부분의 시간 동안) XML을 왕복합니다.

프록시 생성기를 사용하여 서버 유형의 정의를 생성 한 경우 프록시에서만 속성 (의미 상 적어도)이 사용되기 때문에 서버의 메소드를 호출 할 수 없습니다 정의. 또한 인스턴스가 실제 기본이 아닌 별도의 유형 정의이기 때문에 파생 된 유형으로 캐스트 할 수 없습니다.

서버 유형이 실제로 동일한 유형 (이름과 스키마 만이 아니라 동일한 어셈블리에 대한 참조) 인 경우 Steve said을 수행하고 서버의 KnownType 특성을 사용할 수 있습니다 파생 된 각 클래스에 대해 하나의 속성을 추가합니다.

그러나 그는 이렇게 말하면 사용자 코드가 복잡해 지므로 이렇게 할 때주의해야합니다.

컨트롤의 반전을 사용하면 효과가 있지만 특정 공급자에 대한 일반적인 참조로 같은 상황이 발생한다고 생각했습니다.