WCF 서버에서 권한 부여를 사용자 지정하려면 ServiceAuthorizationManager.CheckAccessCore()를 재정의합니다. 그것에서 나는 OperationContext를 사용하여 클라이언트에 의해 호출 된 메소드를 찾아야한다. WCF: Retrieving MethodInfo from OperationContextOperationContext에서 WCF 검색 메서드 이름 및 매개 변수 형식을 검색합니다.
내 경우 (간체) 다음과 같습니다 : 포스트 위에서 MethodInfo를 얻을 수
[ServiceContract]
public interface IMyService
{
[OperationContract]
void Hello(string name);
}
public Class MyService : IMyService
{
// this method is not part of service contract
public void Hello()
{
Console.WriteLine("Hello World!");
}
public void Hello(string name)
{
Console.WriteLine(string.Format("Hello {0}!", name);
}
}
코드는 다음과 같습니다
string action = operationContext.IncomingMessageHeaders.Action;
DispatchOperation operation =
operationContext.EndpointDispatcher.DispatchRuntime.Operations.FirstOrDefault(o =>
o.Action == action);
Type hostType = operationContext.Host.Description.ServiceType;
MethodInfo method = hostType.GetMethod(operation.Name);
때 안녕하세요 (I 부분이 우수한 게시물에 해결책을 발견 "Jake")가 호출되면 operationContext.IncomingMessageHeaders.Action은 메서드 이름 "Hello"를 제공하지만 올바른 메서드를 얻으려면 매개 변수 유형도 필요합니다. (hostType.GetMethod (operation.Name)) AmbiguousMatchException을 던졌습니다.
OperationContext에서 매개 변수 유형을 가져올 수 있습니까?
기본 클래스는 WCF 서비스가 아닙니다. WCF 서비스 클래스의 기본 클래스 일뿐입니다. 그것은 오해를 불러 일으켰 기 때문에 질문에서 상속의 소음을 제거했습니다. 바라건대 지금은 분명합니다. – sz9
답변을 업데이트했습니다. 확인해주십시오. –
내 시나리오에서는 하나의 오버로드 된 메서드가 서비스 작업으로 지정되고 다른 메서드는 그렇지 않습니다. 나는 서비스 클래스에서 오버로드 된 메소드를 피하기 위해 코드를 재구성 할 수 있지만 가능하다면 그것을 피하기 위해 다른 복잡성을 도입 할 것이다. – sz9