C#에서 Remoting을 사용하여 다른 서버에 연결하고 있습니다. 클라이언트 측에서 지속적으로 기능을 추가하고 있기 때문에 서버 측의 서비스가 항상 최신 상태는 아닙니다.C# VS 버전 관리의 리모콘
인터페이스에서 메서드를 호출하면 (서버에서 메서드를 원격으로 호출 함) 서버 측 구현에이 메서드가 존재하지 않는다는 것을 어떻게 해결할 수 있습니까?
잡을 수없는 예외가 있기 때문에 클라이언트가 자연스럽게 충돌합니다. 예, 할 수 있습니다. 그러나이 방법으로 호출하는 여러 가지 메서드가 있기 때문에 각각에 대해 예외 처리를 추가하는 것은 힘들 것입니다.
"해결책"중 하나는 내 MarshalByRefObject
에있는 각 메서드에 사용자 지정 버전 특성을 넣는 것이 었습니다. 그러나 각 방법을 호출 할 때 이후에이를 사용하는 방법을 모르겠습니다. 각 메소드에 주석/속성을 추가해도 괜찮지 만, 버전이 새롭는지 여부를 묻는 문이 if
인 경우에는 다시 고통 스러울 것입니다.
내가 생각한 또 다른 방법은 상속을 사용하는 것이 었습니다.
public abstract class AbstractServer1 : MarshalByRefObject
{
public abstract void feature1();
}
public abstract class AbstractServer2 : AbstractServer1
{
public abstract featureInVersion2();
public abstract string reallyNewFeature();
}
public class ServerClass1 : AbstractServer1
{
public void feature1();
}
public class ServerClass2 : ServerClass1, AbstractServer2
{
public void featureInVersion2();
public string reallyNewFeature();
}
하지만이 같은 결과 것 :
public AbstractServer getRemoteObject(string host, int port)
{
object obj = Activator.GetObject(typeof(AbstractServer2), "tcp://" + host + ":" + port.ToString() + "/ServiceName");
if (typeof(obj) == ServerClass1)
{
...
}
}
그리고이없는 둘 아름다운도 정말 작동합니까.
좋은 해결책이 있습니까?
참고 : 서버 및 클라이언트에서 동일한 어셈블리 파일을 사용하는 것은 불행히도 옵션이 아닙니다.
도움을 주시면 감사하겠습니다.
는 당신이 원격을 알고 계십니까 (이 결여 된 행동을 반환하지 않습니다 같은 오류에 대한 예외를 rethrowing 및 널 (null) -if 기능을 반환하지 않습니다) 당신이 원하는 행동의 종류가이 클래스 비트를 다시 작성할 수 WCF에 찬성하여 더 이상 사용되지 않을 예정입니까? 이후 .NET 3.0? –
@ 존 : 빠른 답장을 보내 주셔서 감사합니다. 흠 아니, 나는하지 않았다 : P 오케이 ... MSDN (http://msdn.microsoft.com/en-us/library/ms734712.aspx)의 튜토리얼을 살펴보고, 완전히 틀렸어. 내 문제는 WCF에서도 마찬가지다. 내가 놓친 게 있니? – Atmocreations
클라이언트 측 또는 서버 측 예외입니까? 예외가 어셈블리 해결 오류를 포함합니까? – Seb