반사를 통해 .NET WCF REST 서비스를 소비합니다
-
06-07-2019 - |
문제
가능하면 반사를 통해 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
그리고 당신은 당신이 기대하는 결과를 얻어야합니다.