2010-05-27 3 views
1

SOAP 웹 서비스와 통신하기 위해 Visual Studio에서 생성 한 프록시 클래스를 사용하고 있습니다. 생성 된 클래스는 System.Web.Services.Protocols.SoapHttpClientProtocol에서 파생됩니다. 클래스를 인스턴스화하는 데 비용이 많이 든다는 것을 알았 기 때문에 클래스의 Singleton 인스턴스를 반환하기 위해 factory 메소드를 수정하려고합니다. the documentation에 따르면이 클래스는 멀티 스레딩에 안전합니다..NET 웹 서비스 프록시 클래스는 싱글 톤으로 사용해도 안전합니까?

누구나 이러한 클래스의 인스턴스 재사용 경험이 있습니까? 그럴 필요가 없습니다 (예 : 연결이 열린 상태 등)?

.NET 프레임 워크 버전 : 2.0

답변

0

하지만 난 당신이 해결하고자하는 문제가 무엇 unserstand하는 stuggling하고, 싱글 톤 패턴으로 이러한 클래스를 사용하면 문제가 발생할 것을 아무 이유도한다. 당신이이 수업은 당신이 그들과 무엇을 비교하고 있는지 인스턴스화하는데 비용이 많이 듭니다. 프록시 클래스를 인스턴스화하는 비용은 웹 서비스에 대한 HTTP 요청 비용과 비교할 때 무시할 수 있어야합니다. 상황을 설명해 주시겠습니까/프록시 클래스를 인스턴스화하여 병목 목이 발생했는지를 보여주는 코드를 게시하십시오.

+0

인스턴스 생성 비용은 응용 프로그램 구성 파일의 생성 된 설정에서 웹 서비스 URL을로드하는 것이 었습니다. 이것은 일회성 비용이므로 프록시 인스턴스 재사용의 필요성이 없어야합니다. – Mario

0

프록시의 싱글 톤을 오버 헤드와 별도로 인스턴스화하는 여러 가지 이유가있을 수 있습니다. 그다지 동의하지는 않습니다. 가장 큰 이유는 서비스 호출간에 세션을 유지하는 것입니다. 같은 웹 서비스 메소드를 사용하는 여러 페이지가있는 응용 프로그램을 상상해보십시오. 웹 서비스 호출에 대한 세션은 일반적으로 프록시에 쿠키 매개 변수를 설정하여 수행됩니다 :

proxy.CookieContainer = new System.Net.CookieContainer(); 

각 페이지 작업을위한 새로운 프록시를 작성하는 경우는, 세션이 페이지에서 페이지로 손실됩니다. 모든 페이지에서 사용되는 싱글 톤 프록시를 만들면이 문제를 해결할 수 있습니다.

관련 문제