2011-02-03 4 views
5

저는 ASMX 웹 서비스를 사용하여 .NET 3.5로 작성된 기존 코드<gulp>과 협력하고 있습니다.싱글 톤 ASMX 웹 서비스 프록시를 사용해도 되니?

Windows 서비스 (FooService)는 클라이언트 요청에 대한 응답으로 호출하는 웹 서비스 (BarWS라고 함)에 대해 ASMX 프록시를 정적으로 캐싱하고 시간당 10-30 회 호출합니다.

이기 때문에 <gulp>레거시 코드 그것은 테스트하기가 매우 어렵습니다. 나는 그것을 테스트 할 수 있도록 종속성을 깨는 과정에 있으며이 정적 참조는 나를 궁금해하게했다. ASMX를 사용한 이후로 수년이 지났지 만 프록시는 스레드로부터 안전하다는 것을 상기합니다.하지만 싱글 톤/공유 WCF 프록시가 문제를 개발하고 오류를 일으킬 때와 동일한 방식으로 사용할 수 없게 될지 궁금했습니다.

이 프록시 (BarWS는 시간당 30 회 미만이라고 함)의 약한 사용을 감안할 때, 나는 모든 호출에서 신선한 프록시를 만드는 것이 훨씬 안전 할 것이라고 생각하지만, 불필요한 변화. 누구 알아?

P. WCF가 더 좋지만 WCF 로의 이전은이 <gulp> 레거시 코드베이스에서 너무 많이 변경됩니다.

+4

'legacy'와'.NET 3.5' ​​... woah ... 나는 오래되었습니다! :) –

+1

* 레거시 코드 *의 중요성은 두 번 기울임 꼴로 표시됩니다. – Amy

+1

@James : 서비스를 WCF로 변경할 필요는 없지만 "웹 참조"대신 "서비스 참조"를 사용하도록 변경하는 것이 좋습니다. –

답변

4

프록시를 만드는 데 걸리는 시간을 측정합니다. 그것이 거짓 최적화 (내가 강하게 의심되는 경우), 인스턴스 기반 작성으로 변경하십시오. 일반적으로 통계학을 피하는 것이 좋습니다. 팩토리를 팩시밀리 뒤에 놓고, 적어도 원한다면 싱글 톤 타입의 동작을 여전히 가질 수 있지만,이 생성 동작은 클라이언트로부터 가려져 독립적이됩니다.

+0

99 % 확신은 잘못된 최적화입니다 ... 저는 공장 아이디어를 많이 좋아합니다 - 감사합니다. 나는이 답변을 투표했지만, 실패한 후에 프록시 인스턴스의 재사용 가능성에 대한 질문을하지 못하기 때문에 그것을 지키는 것은 아닙니다. 감사! –

+0

@James 물론, 상태 저장 여부는 기억이 안납니다. 그렇다면, 분명히 더 큰 문제가 있습니다 : 스레드로부터 안전합니까? –

+0

MSDN 문서는 스레드로부터 안전하다고 주장하지만 아직 테스트하지 않았습니다. 서비스의 유일한 구현은 (물론 WSDL, 소스 코드가없는) 라이브 프로덕션 서비스이기 때문에 오류가 있는지 테스트하는 것은 매우 까다 롭습니다. 리다이렉트를하지 않아도됩니다. 가짜! –

관련 문제