2009-12-01 2 views
10

저는 서버와 클라이언트 (둘 다 C#으로 작성) 사이의 통신에 WCF를 사용하고 있습니다.프로그래밍 방식으로 디버그 모드에서 WCF 시간 초과 설정

릴리스 모드에서 타임 아웃은 ~ 20 초로 설정해야하지만 디버그 모드에서는 더 높은 값으로 설정하여 타임 아웃이 발생하지 않고 코드에서 디버그/스텝 할 수 있습니다.

app.config 파일을 수정하여 시간 초과를 변경할 수 있음을 알고 있습니다. 그러나 각기 다른 두 개의 바인딩과 4 개의 시간 제한 값이 있으므로 몇 군데에서 변경해야하며 잊기 쉽습니다.

이 문제를 해결하려면 시간 제한 값을 프로그래밍 방식으로 1 시간으로 변경하는 작은 #if DEBUG 섹션을 코드에서 사용하고 싶습니다.

나는이 작업을 수행하려면 다음 코드를 사용하려고 :

Configuration configuration = 
     ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
ServiceModelSectionGroup serviceModel = 
     ServiceModelSectionGroup.GetSectionGroup(configuration); 

BindingsSection bindings = serviceModel.Bindings; 

foreach (var configuredBinding in bindings.WSHttpBinding.ConfiguredBindings) 
{ 
configuredBinding.CloseTimeout = new TimeSpan(0, 30, 0); 
configuredBinding.OpenTimeout = new TimeSpan(0, 30, 0); 

하지만 * 시간 초과 속성은 내가 컴파일 오류가 읽기 전용입니다.

프로그래밍 방식으로 처음부터 바인딩을 만드는 아이디어는별로 좋아하지 않습니다. app.config의 일부 속성을 변경하면 코드에서 동일한 변경을 수행하여 디버그 동작이 릴리스 동작과 비슷하다는 것을 기억해야합니다 (시간 제한 제외 ...)

누구든지이 문제를 처리하는 방법에 대한 정보를 얻을 수 있습니까?

답변

12

당신이 할 수있는 다음

  • 다음 두 요소
를 사용하여 클라이언트 프록시를 만들 바인딩 인스턴스에서 시간 제한을 설정 한 바인딩 및 코드에서 엔드 포인트를 작성

다음과 같음 :

BasicHttpBinding myBinding = new BasicHttpBinding("ConfigName"); 
myBinding.CloseTimeout = ....... 
myBinding.OpenTimeout = ....... 
myBinding.ReceiveTimeout = ....... 
myBinding.SendTimeout = ....... 

EndpointAddress myEndpoint = new EndpointAddress("http://server:8181/yourservice"); 

YourServiceClient proxy = new YourServiceClient(myBinding, myEndpoint); 

그런 식으로 바인딩 시간 제한을 설명 할 때 기본 구성을 활용할 수 있지만 원하는 설정을 조정할 수 있고 클라이언트 프록시를 만들 수 있습니다.

2

web.config에서 두 번째 바인딩을 만들고 더 긴 sendTimeout을 설정할 수 있습니다.

 if (debug) 
     { 
      proxy = new MyClient("WSHttpBinding_MyLocal"); 
     } 
     else 
     { 
      proxy = new MyClient("WSHttpBinding_MyDev"); 
     } 

     <wsHttpBinding> 
      <binding name="WSHttpBinding_MyLocal" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:20:00" 

...`Client`에서

+0

는 대부분의 사람들이 이제까지 필요로 할 유일한 시간 제한은'sendTimeout' https://social.msdn.microsoft.com/Forums/vstudio/en-입니다 미국/84551e45-19a2-4d0d-bcc0-516a4041943d/설명의 다른 시간 초과 유형 –