2010-03-04 2 views
1

최근 WCF에서 많은 작업을 해오 고 있으며 특히 IIS (자체 호스팅 아님)에서 호스팅하고 있습니다.WCF/IIS 시간 제한에 다시 쓰기가 필요합니까?

나만인가, 아니면 누가 타임 아웃 값을 미세 조정하는 문제가 있습니까? 배트에서 바로 조정할 때 필요한 제한 시간을 언급하면서 시작하겠습니다.

어떤 식 으로든 전부 또는 또 다른 시간 제한과 관련된 다음과 같은 바인딩 엔드 포인트 값을 살펴 보자

  • closeTimeout을 = "0시 1분 0초"
  • openTimeout의 = "0시 1분 : 00 "
  • receiveTimeout ="0시 10분 0초 "
  • sendTimeout가 ="0시 1분 0초 "
  • 가 MaxBufferSize는 ="999 "
  • maxBufferPoolSize ="524288 "
  • maxReceivedMessageSize = "999"
  • readerQuotas MAXDEPTH = "32"
  • readerQuotas maxStringContentLength = "8192"
  • readerQuotas maxArrayLength = "16384"
  • readerQuotas maxBytesPerRead = "4096"
  • readerQuotas maxNameTableCharCount = "16384"

이들은 클라이언트 측 끝점 구성 값이며 아직 시작하지 않았습니다. 이제 II에서 서비스가 실행됩니다. S에서는 클라이언트 측과 동일한 수준의 복잡성을 제공하는 서버 측 바인딩을 설정해야합니다.

일단 완료되면 WCF 서비스에 대한 긴 호출 중에 IIS를 구성하는 것이 필수적입니다. 그러면 메인 스레드가 중단되게됩니다.

IIS는 Keep-Alive를 사용하지 않도록 설정해야하며, App Pool에도 많은 시간 제한 값인 App Pool이 있습니다. 이는 세부적인 주제입니다. 이 외에도 특별히 세밀하게 조정해야하는 또 다른 7 개의 시간 초과 값이 있습니다. 그렇지 않으면 복잡한 WCF 호출이 실패 할 것으로 예상됩니다.

실례지만 다른 사람이 쥐의 냄새를 맡고 있습니까?

내 이해는 신뢰 문제로 인해 (대부분의) 이러한 시간 초과 값이 존재한다는 것입니다. 신뢰로 말하자면, "서비스는 합리적인 시간 내에해야 할 일을 수행한다고 믿지 않습니다." SOA의 신뢰성있는 통신의 모든 측면은 앞에서 불신하고 있기 때문에 어느 정도의 관리 효율성을 보장하기 위해 광범위한 캐치넷 배열 (시간 초과 값)이 필요합니다. 적시에 응답하도록 시스템을 신뢰할 수 있다면 왜 시간 초과 값을 설정해야합니까?

내가 가진 모든 문제는 솔직히 말하면, 내 응용 프로그램에있는 5 가지 시스템이 일반적으로 신뢰할 수 있으며 대개 적시에 응답을하는 경우 무엇입니까? OOB, WCF/IIS 호스팅이 실패하기 때문에이 경계를 정의하는 긴 과정을 계속 진행해야한다는 점에 저는 좌절감을 느낍니다.

웹 캐스트와 마케팅 프레젠테이션 중에 WCF 기술이 위선이라는 사실을 알았습니다. WCF는 구현에서 더 나은 추상화를 허용하여 개발자가보다 쉽게 ​​작성하고 배포 할 수 있도록하고 엔드 포인트를 "간단하게"정의 할 수 있도록 항상 언급됩니다. 비즈니스 논리에 집중할 수 있으며 밑줄 친 아키텍처에 덜 집중할 수 있습니다. 나는 실제로 진실에서 더 멀어 질 수는 없다는 것을 발견했다. WCF를 사용하면 서비스 운영 방식에 대한 세부 사항을 깊이 숙지해야하며 대개 ASMX 서비스와 달리 손쉬운 튜닝이 필요하며 일부 IIS 미세 조정 만 필요합니다.

제가 생각하기에 문제는 다음과 같습니다. 그것은 단지 나입니까? 아니면 여러분 중 누구도 동일한 좌절감과 관찰을 공유합니까? 모든 의견 환영합니다!

+1

당신은 질문을 적어 놓은 그 한 사람에게 분명히 MS는 나쁜 생각이라고 생각하지 않았다. 그래서 왜 v4에 고정 된 나의 좌절감을 느꼈는가? –

+0

IIS는 항상 나를 위해 타임 아웃을 호스팅한다. 나는 모든 서비스를 자기 호스팅으로 옮기는 것을 진지하게 생각하고있다 ... –

답변

2

어디서부터 시작해야할까요?

기억해야 할 점은 WCF 서비스는 호스팅 응용 프로그램과 독립적으로 구성된다는 것입니다. 시나리오 및 필요에 따라 명령 줄 응용 프로그램, WinForms 응용 프로그램, Windows 서비스, IIS, Silverlight, Win32 응용 프로그램, MFC 응용 프로그램 등에서 WCF 서비스를 호스팅 할 수 있습니다.

따라서 WCF 인프라와 호스팅 앱 인프라는 독립적으로 제어 및 구성해야합니다.

귀하의 경우 IIS에서 WCF 서비스를 호스팅하도록 선택하셨습니다. 이것은 광범위한 시나리오에 대한 훌륭한 선택이지만 다른 시나리오에서는 좋지 않은 선택입니다. 왜? IIS는 매우 한정된 시나리오를 위해 특별히 만들어졌습니다. 단명 된 작업자 프로세스로 요청을 보내고 호출자에게 응답을 반환합니다.

"단명"성명서는 신중한 내용입니다. IIS는 주로 웹 서버로 사용됩니다. 따라서 기본적으로 웹 서버로 작동하도록 구성됩니다. 웹 서버는 일반적으로 호출자에게 최대한 빨리 응답하도록 구성됩니다. 웹 서버는 작업자 프로세스가 응답을 반환하지 않는 한 페이지 요청으로 생성 된 작업자 프로세스가 "사용 중"인지 "중단"인지 여부를 알지 못합니다. 응답이 수신 될 때까지 웹 서버는 작업자 프로세스가 "사용 중"이라고 가정 할 수 있습니다. 작업자 프로세스가 지정된 (구성 가능한) 시간 내에 응답하지 않으면 웹 서버는 아마도 멈춘 것으로 판단하여 작업자 프로세스를 종료하기로 결정합니다.

따라서 시나리오에서는 IIS를 사용하여 특별한 요구 사항 (예 : 장기 실행 작업 수행)이있는 비정형 앱을 호스팅하고 있습니다. 앱 개발자/관리자가 특정 앱이 10 분 이상 돌아 오지 않을 수도 있음을 알고있는 경우 특수 앱을 호스팅하는 작업자 프로세스의 시간 초과 기간에 전화를 걸 수 있습니다. 그것은 좋은 일입니다. 이 기능을 제공하지 않으면 코드에 버그가 있거나 DB 계층이 느려지므로 작업자 프로세스가 없기 때문에 전체 웹 서버가 무인 상태가되어 해당 시스템에서 호스팅하는 모든 웹 사이트가 죽을 때 비명을 질렀습니다. 시간 초과.

대부분 같은 논리는 WCF의 구성 설정에 적용됩니다 : 당신은 당신이 자신의 구성 설정을 수정하여 WCF 서비스의 성능 특성을 제어 할 수 있습니다

모든 설정 - 코드의 라인을 변경하지 않고도/또는 새 비트 배포 (코드를 통해 이러한 설정을 제어하는 ​​대신 구성 파일을 통해 서비스를 구성한다고 가정).

지시 한 것처럼 장기 실행 작업을 수행하는 WCF 서비스가있는 경우 IIS에서 호스트하지 않고 대신 Windows 서비스 응용 프로그램에서 호스트하도록 선택할 수 있습니다. 이 경우 호스팅 앱은 서비스를 호스팅하는 대신 다른 작업을 수행하고 대신 시작 및 종료 알림에 적절하게 응답합니다. 그렇다면 매우 큰 페이로드가있는 메시지를 처리하는 서비스의 기능을 어떻게 제어 할 수 있습니까?동시에 생성 될 서비스 인스턴스의 수를 어떻게 관리 하시겠습니까? WCF가 새 서비스 인스턴스를 열거 나 닫을 때까지 대기하는 시간은 어떻게 조절할 수 있습니까?

이들 중 일부 또는 전부와 기타 설정을 변경하고 서비스의 성능, 보안, 안정성 및 동작을 매우 쉽게 제어 할 수있어서 기쁩니다. 그것은 훨씬 더 나쁠 수 있습니다 - 당신은 당신의 서비스 나 주인을 절대적으로 통제 할 수 없으며 당신이 주어진 어떤 성격의 특성으로 살아야합니다.

관련 문제