2011-08-19 4 views
0

라이선스 키가있는 내 중앙에서 앱 서버를 인증하려고하며 내 통화에 매개 변수로 포함하고 싶지 않습니다.헤더의 WCF를 통해 클라이언트에서 서버로 라이센스 키 보내기

사용자 정의 ServiceAuthorizationManager를 구현했지만 클라이언트 측에서이 licenseKey를 설정하는 가장 좋은 방법과 장소가 무엇인지 잘 모릅니다.

나는 (내가 접근과 완전히 잘못 될 수도 있습니다) 아래 시도

내가 통해 헤더의 인덱스를 찾기 위해 관리해야

ServiceAuthorizationManager.CheckAccessCore (OperationContext operationContext)에서 다음

<endpoint address="http://127.0.0.1:8000/ApiDataService" binding="wsHttpBinding" 
    contract="MyInterfaces.IApiDataService"> 
     <headers> 
      <LicenseKey>MyLicenseKey</LicenseKey> 
     </headers> 
</endpoint> 

:

operationContext.RequestContext.RequestMessage.Headers.FindHeader("LicenseKey", "") 

검색 한 HeaderInfo에 더 이상 내 콘텐츠가 없습니다. 나는 그것을 어떻게 든 캡처 할 수 있어야하므로 operationContext.RequestContext에 있다고 확신한다.

  1. 어떻게 생각하세요?
  2. 이렇게하는 데 더 좋은 방법이 있습니까?
  3. < 신원 \ > 요소를 사용해야합니까?

나는 operationContext.ServiceSecurityContext를 사용하는 것이 행복하지만, 클라이언트 측에서 설정하고 내 사용자 정의 라이센스 키를 어디에 둘 것인지 모르겠다.

라이센스 키가 하나이기 때문에 여러 끝점이 있습니다. 코드에서 설정하는 것이 더 좋습니다.

감사

답변

1

가 보내 사용자 정보를 수신 대역 외 메커니즘 WCF를 사용하는 방법을 보여으로이 문서는 여기 Globalization Patterns in WCF (WS-I18N implementation) 당신에게 관심이있을 수 있습니다. 그것은 물론 라이선스가 아니라 세계화에 관한 것이지만 문제는 다소 비슷합니다.

+0

감사합니다. IDispatchMessageInspector 및 IClientMessageInspector를 구현하여 올바른 방향으로 안내해주었습니다. 내 솔루션이 약간 다릅니다. 또한 구현했습니다. LicenseBehaviour : BehaviorExtensionElement, IEndpointBehavior, IServiceBehavior http://winterdom.com/2006/10/iservicebehavioridispatchmessageinspectorandendpoints – Marek