2011-11-29 2 views
2

다른 국가에서 사용되는 모바일 응용 프로그램에서 사용하는 WCF REST 서비스가 있습니다. JSON을 수락하고 반환하며 StructureMap을 사용합니다.WCF REST 서비스 : 국가 코드 전달

아이디어는 모든 국가에 대해 하나의 서비스 인스턴스를 만드는 것이지만 서비스를 호출하는 국가를 알고 해당 서비스에서 일부 논리를 사용해야합니다 (예 : 사용할 연결 문자열을 결정).

그러나 국가 코드가 각 서비스 요청과 함께 전달되어야하는 것을 피하고 싶습니다. 내 옵션은 무엇입니까?

예를 들어 각 국가마다 하나의 종점을 사용할 수 있습니까? 그러나이 경우 서비스를 호출하는 데 사용 된 엔드 포인트/국가 코드를 어떻게 알 수 있습니까?

다른 가능성?

+0

사용자의 위치 또는 사용자의 로케일에 대해 이야기하고 있습니까? 그들은 매우 다르다! –

+0

정말 'it'또는 'be'와 같이 앱이 설치 될 때 결정되는 국가 코드입니다. –

답변

2

여러 엔드 포인트가 해결책 일 수 있지만 실제로 사용 된 엔드 포인트를 결정하는 확실한 방법이 필요합니다. WCF REST 서비스의 "연결이 끊어진"특성을 감안할 때 (통신을 수행하고 WCF 특성을 사용하는 비 WCF 유형의 사용을 의미 함)이 경우 서비스 작성시 국가를 지정하는 WebHostFactory를 작성해야합니다 주어진 엔드 포인트에 대해. 어떻게하면 WebOperationCurrent.Current 인스턴스를 검사하여 메서드 서명에 숨겨진 정보에 액세스 할 수 있습니다. 예를 들어 : WebOperationContext 전류를 사용하여 요청에서 그 경로를

Uri requestRoot = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri; 
if (requestRoot.PathAndQuery.Contains("en-us")) { 
    // use english locale 
} 
else if (requestRoot.PathAndQuery.Contains("de-de")) { 
    // use german locale 
} 

당신은 실제 국가/언어를 결정하기 위해 더 나은 전략이 필요하지만, 기본적인 아이디어는에 다시 호스트 여러 경로에서 동일한 서비스 및 검사 예. 위의 설명에서

편집 , 나는 당신이 WebOperationContext를 사용하여 현재 요청에 대한 UserAgent 문자열에 액세스 할 수 추가하고 싶습니다. 따라서 요청 된 언어에 대한 단서를 찾는 정보를 조사 할 수도 있습니다. 하지만 "암시 적"정보는 단서 일 뿐이지 사용자가 원하는 것에 대한 명확한 징후가 결코 없음을 명심하십시오.

+0

감사합니다. WebHostFactory에서 국가를 지정하십시오. 즉, 각 끝점에 대해 별도의 ServiceHost가 작성된다는 의미입니까? 각 끝점마다 다른 사용자 지정 데이터를 어떻게 추가 할 수 있습니까? –

+0

'Language' 속성이 설정된 서비스 인스턴스를 생성하는 사용자 정의'IInstanceProvider'를 서비스 호스트에 제공합니다. 서비스 인스턴스가 WebServiceHostFactory를 통해 해당 언어를 지정하는 데 사용되는 언어를 인식하도록하기위한 것입니다. –

+0

괜찮지 만 서비스 구현에서 WebOperationContext에 직접 액세스하는 것과 거의 같지 않습니까? –