2009-05-13 1 views
1

저는 균형 잡힌 wcf 서비스 (iis 호스팅, servicePrincipalName로 구성된 계정에서 실행되는 앱 풀에서 호스팅 됨)와 대화하는 기존 asp.net 응용 프로그램을 보유하고 있습니다. wcf 서비스는 FaultContract (typeof (x), ProtectionLevel = ProtectionLevel.None)로 정의 된 몇 가지 사용자 정의 오류를 반환합니다. 이러한 서비스는 공개되지 않습니다. 클라이언트는 '서비스 참조'생성 클래스를 사용하여 서비스에 액세스합니다.WCF "기본 서명을 암호화해야합니다." ProtectionLevel.None이 포함 된 FaultContract에서

이 코드는 정상적으로 작동하지만 최신 코드 기반으로 "기본 서명을 암호화해야합니다."라는 메시지가 표시됩니다. 서비스가 이러한 오류 중 하나를 반환하면 클라이언트에서 예외가 발생합니다. 서비스 코드 및 구성은 변경되지 않습니다 (최소한 오류를 생성하는 레거시 부품). 클라이언트 측 서비스 참조 생성 코드가 가장 많이 변경된 것처럼 보입니다 (종종 제거되고 다시 작성됩니다).

보안 구성은 1 년 이상 변경되지 않았습니다. 모든 업데이 트가 꽤 현재 있습니다. 우리는 세 가지 환경에서이를 테스트했으며 새로운 코드 기반을 배포하자마자 오류가 예외를 생성하기 시작합니다. 생성 된 클래스에 있어야하는 것처럼 보이지만 Visual Studio에서 생성되므로 매우 혼란 스럽습니다.

누구에게도 익숙한 소리입니까? 어떤 제안?

업데이트 : ProtectionLevel 특성을 제거하고이를 기본값으로 허용하면 문제가 사라집니다.하지만 None을 지정하면 실패하게됩니다. 아마도 운영 계약 또는 서비스 계약의 기본 수준과 충돌 할 수도 있지만 그 값은 지난 1 년 동안 변경되지 않았으므로 현재 작동하지 않았던 이유가 설명되지 않습니다.

업데이트 : 코드 생성에서이 변경 사항은 2.0.50727.3053과 2.0.50727.3082 사이에서 발생했습니다 (생성 된 코드의 런타임 버전 주석에 따라).

답변

0

본인은이 문제를 직접 경험하지는 않았지만 내 질문은 다음과 같습니다. 귀하의 오류 계약에 "ProtectionLevel = None"을 지정하는 이유는 무엇입니까? 그 특별한 이유가 있습니까?

그렇지 않은 경우 기본값을 지정하지 않는 것이 좋습니다. 기본값은 ProtectionLevel = EncryptAndSign이며 대개 가장 좋은 방법입니다. 당신이 그것에 대해 매우 강력하고 명백한 이유가 없다면 시도하십시오.

마크

+0

좋은 질문입니다. 2 년 전 "타사로부터 안전하지 않거나 잘못 확보 된 오류가 수신되었습니다"예외를 반환하는 사용자 정의 오류의 문제에 대한 대응으로이 작업이 완료되었습니다. 보호 수준을 없음으로 설정하면 "작동하게 만들었습니다."당시에는 내부 서비스였던 것을보고 오버 헤드가 없다는 생각은 괜찮은 것처럼 보였습니다. WCF에 새로 입문 한 WCF는 매우 새롭고 마감 시간이 지났기 때문에 우리는 일하고 감동 한 것을 기쁘게 생각합니다. – ongle