범용 반사를 사용하여 런타임 시 동적으로 WCF 클라이언트 만들기
12535 단어 WCF
ChannelFactory<ITaskService>.CreateChannel(new BasicHttpBinding(),new EndpointAddress(url));
그러나 위의 코드에서 우리는 BasicHttpBinding의 설정 가능한 설정을 할 수 없다. 이때 우리는 아래의 코드를 사용하여 App.와 협조할 수 있다.Config 를 통해 Binding 정보를 구성할 수 있습니다.
ChannelFactory<ITaskService>.CreateChannel(new BasicHttpBinding("BasicHttpBinding_TaskService"),new EndpointAddress(url));
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_TaskService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
</configuration>
그러나 상기 방법은 모두 정태적으로 완성된 것이다. 우리는 동태적으로 WCF 클라이언트 대상을 만드는 것을 실현할 방법이 있습니까?
var service1 = GetWcfClient(url, new BasicHttpBinding(), typeof(ITaskService)) as ITaskService;
var service2 = GetWcfClient(url, new BasicHttpBinding("BasicHttpBinding_TaskService"), typeof(ITaskService)) as ITaskService;
public static object GetWcfClient(string url, Binding binding, Type contractType)
{
Type channelFactoryGenericType = typeof(ChannelFactory<>).MakeGenericType(new Type[] { contractType });
MethodInfo method = channelFactoryGenericType.GetMethod("CreateChannel", new Type[] { typeof(Binding), typeof(EndpointAddress) });
return method.Invoke(null, new Object[] { binding, new EndpointAddress(url) });
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_TaskService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
</configuration>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WCF 요청 본문이 너무 길어서 400 오류 해결 방안으로 돌아갑니다.오늘 WCF로 글을 추가할 때 POST 요청 본문이 일정 문자 수량(ContentLength > 1w)을 초과하면 서버가 항상 400 오류로 되돌아오는 것을 발견했습니다. 마지막으로 WCF가 요청 본문의 길이를 제한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.