2012-06-05 4 views
2

WCF를 사용하여 두 개의 응용 프로그램이 서로 대화 할 수있는 작고 기본적인 작업 예제가 있습니다. 서버를 청취하는 클라이언트 응용 프로그램에는 내 설정을 구성하는 app.config 파일에 XML이 있습니다. 컴파일 타임에 하드 코딩 된 설정 중 하나는 basicHttpBinding 설정 아래에 묻혀있는 sendTimeout 설정입니다. 예 :런타임시 basicHttpBinding sendTimeout을 변경하는 방법은 무엇입니까?

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IScriptRunHost" closeTimeout="00:05:00" 
        openTimeout="00:05:00" receiveTimeout="00:05:00" sendTimeout="00:00:15" 

런타임시 (C# 사용) sendTimeout 속성을 설정할 수 있습니다. WCF에 새로 온 것은 아니지만 어디서부터 시작해야할지 모르겠다.

+0

위 코드 스 니펫에서 유의해야 할 값은 15 초로 설정되었습니다. 그것은 단지 테스트 목적이었습니다 .... –

답변

6

설정 파일에서 코드로 수행 할 수있는 모든 작업을 수행 할 수 있습니다.

ServiceClient _client = new ServiceClient(new BasicHttpBinding { SendTimeout = new TimeSpan(2, 0, 0) },new EndpointAddress("http://localhost:8089/MyService.svc")); 

나 : 당신은 새로운 클라이언트 프록시를 생성하고 런타임에 그것을 원하는 바인딩 구성을 할당하여 동적으로 시간 제한 또는 다양한 구성 세부 사항을 설정할 수 있습니다

BasicHttpBinding myBinding = new BasicHttpBinding(); 
       myBinding.OpenTimeout = new TimeSpan(2, 0, 0); 
       myBinding.CloseTimeout = new TimeSpan(2, 0, 0); 
       myBinding.SendTimeout = new TimeSpan(2, 0, 0); 

ServiceClient _client = new ServiceClient(); 
       _client.Endpoint.Binding = myBinding; 

그러나 당신은 아마 추측 할 수 코드를 보면서 시간 초과 값, 서비스 엔드 포인트 또는 런타임에 거의 모든 바인딩 구성을 변경하려는 경우 이전 클라이언트 프록시를 분리하여 폐기해야합니다. 당신이 만든 하나, 분명히 이것은 귀하의 고객이 잠시 당신과 연결이 끊어 지므로 약간의 바람직하지 않은 영향을 미칩니다. 부통령, 그래서 그것을 염두에 두십시오. 또한 설정 파일에서 2 또는 3 (또는 원하는만큼) 바인딩 구성을 정의하고 새 클라이언트를 작성하여 해당 바인딩을 사용하도록 구성 할 수 있습니다. 이는 코드에서 수행하는 것과 거의 동일합니다. 이 방법을 사용하더라도 다른 바인딩 구성을 사용하려면 새로운 클라이언트 프록시를 인스턴스화해야합니다.

+1

정말 고마워요. 나는 그것을 시도하고 그것을 어떻게 작동하는지 알려 줄 것이다! –

+2

이전 'BasicHttpBinding'인스턴스의 설정을 복사하려면 어떻게해야합니까? 그래서 대부분의 app.config를 코드로 대체 할 필요가 없습니까? –

+0

이것보다 많은 질문이 해결되었습니다. 이전 서비스 클라이언트로 무엇을합니까? –

관련 문제