2011-09-02 4 views
0

값이 static float x 인 웹 서버 (ASP.NET - Mono 2.6.7)와 getX()setX(newX)의 두 가지 방법이 있습니다. 나는 또한 두 개의 클라이언트를 가지고 있는데 하나는 C# 콘솔 응용 프로그램이고 다른 하나는 안드로이드 (ksoap2)가있는 모바일 장치입니다. 둘 다 웹 서버에 액세스 할 수 있습니다.정적 값 및 웹 서비스를 사용하는 동시 요청

내가 모르는 것 : 내 휴대 기기가 getX() 일을하려고하는데 내 컴퓨터가 setX(newX) 일을하면 문제가 발생합니까?

감사합니다.

답변

2

서비스에 대한 상태를 완전히 구현하지 않는 것이 좋습니다. 여러 요청을 처리하는 다른 인스턴스를 가질 수 있습니다. ASP.NET 웹 서비스의 경우입니다. WCF에서는 구성을 사용하여 인스턴스 동작을 변경할 수 있습니다. 예를 들어, 하나의 인스턴스가 모든 요청을 처리하도록 할 수 있습니다 (거의 동시적일 수 있음). 하나의 인스턴스가 가변적 인 경우 (사용자의 경우) 상태에 대한 액세스를 동기화해야합니다. 공유 상태의 스레드 동기화는 최대 하나의 요청 스레드 만 상태에 액세스 할 수 있기 때문에 요청을 처리 할 때 병목 현상을 만듭니다. 또한 가로로 확장 할 수 없습니다 (예 : 요청이 여러 컴퓨터에서 제공되는 웹 팜 시나리오). 요청을 처리하는 인스턴스가 여러 개있는 경우 상태를 외부화해야합니다. 그것을 데이터베이스에 넣으십시오. 이 경우 외부 데이터 소스 (스레드 동기화보다 훨씬 높을 수 있음)에 액세스 할 때 패널티가 발생하지만 확장 가능한 디자인을 갖게됩니다.

+0

나는 당신의 의견에 내가 원하는 것을 얻었습니다. 내 경우에 잘못된 가치를 갖기 때문에 동기화를 관리해야한다는 것을 알았습니다. 이 동기화를 수행하는 방법을 알아볼 것입니다. 고마워. – mthpvg

1

대충 말하면 웹 서비스 클래스/객체는 그 자체로 상태가 없어야합니다. 상태를 저장할 수 있지만 대개 데이터베이스와 같이 외부 적입니다.

구성에 따라 모든 클라이언트에 대한 모든 요청에 ​​대해 클래스의 동일한 인스턴스가 보장되지 않기 때문입니다.

+0

웹 서버에 '정적 인 부동 소수점 x'가있는 경우 (내가 추한 것을 압니다.) 'getX/setX (newX)'동시 요청의 경우 어떻게 될지 알 수있는 방법이 없습니다. – mthpvg

+1

@mthpvg, 정적 변수의 경우 앱 도메인 당 상태입니다. 따라서 한 작업자 프로세스의 모든 서비스 인스턴스가 동일한 변수에 액세스하지만 동기화를 관리해야합니다. 그렇지 않으면 요청이 부실하거나 일치하지 않는 값을 읽을 수 있습니다. – VinayC

관련 문제