문제

가능하면 반사를 통해 WCF REST 서비스를 소비하려고합니다. 아래 코드를 살펴보십시오.

    public static object WCFRestClient<T>(string method, string uri, params object[] args)
    {        
        object o;
        object ret;
        using (ChannelFactory<T> cf = new ChannelFactory<T>(new WebHttpBinding(), uri))
        {                
            T contract = cf.CreateChannel();
            ret = contract.GetType().GetMethod(method).Invoke(o, args);

        }
        return ret;
    }

당신이 알다시피, 런타임에 t를 가져가는 일반적인 방법입니다 ... 내 문제는 위에서 만들고있는 채널 객체를 실제로 반영 할 수 있는지 확실하지 않습니다 .... 객체 인스턴스를 만들고 싶을 때 시작합니다 ... 인터페이스에서 객체 인스턴스를 만들 수 없으므로 ...

이것을 달성 할 다른 방법이 있다면 기꺼이들을 것입니다. 그러나 가능하다면 채널 메커니즘을 사용하는 것을 선호합니다.

도움이 되었습니까?

해결책

일반적으로 a ChannelFactory 모든 작업에 대해 비용이 많이 듭니다. 가능하면 피해야합니다. 그만큼 using 패턴도 문제가됩니다 ICommunicationObject 이후 WCF의 유형 Dispose() 일반적으로 Close() 이것은 차단/예외 통화입니다. 당신은 전화하고 싶을 것입니다 Close() 대신 명시 적으로 처리하십시오 TimeoutException 그리고 CommunicationException.

그 외에도, 당신의 접근 방식은 효과가 있습니다. 사용하는 경우 ChannelFactory<T>.CreateChannel, 유형의 투명한 프록시 객체를 만듭니다. T 원한다면 반사를 통해 호출 될 수 있습니다. 따라서 계약 인터페이스에서 객체를 만드는 것에 대해 걱정할 필요가 없습니다. WCF는 이미 그렇게합니다.

코드 샘플에서 o ~와 함께 contract 그리고 당신은 당신이 기대하는 결과를 얻어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top