Мы используем Message Inspector для настройки SOAP-сообщения, добавляя некоторую информацию на стороне клиента и извлекая добавленную информацию на стороне сервера. Мы также используем Custom Authorization Manager, используя ServiceAuthorizationManager для использования полученной информации о сообщении на основе SOAP.WCF - Как вызвать Message Inspector перед диспетчером авторизации службы?
Чтобы настроить сообщения SOAP, мы перекрывая два метода:
а) BeforeSendRequest (Client Side) - Этот метод используется для настройки заголовка SOAP сообщения в Message Inspector.
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
Dictionary<string,string> headerInfo = new Dictionary<string,string>();
headerInfo.Add("UserId","1111");
MessageHeader header = MessageHeader.CreateHeader("LocalName", "NamespaceURI", headerInfo);
request.Headers.Add(header);
return null;
}
б) AfterReceiveRequest (Server Side) - Этот метод используется для извлечения настроенного сообщения SOAP в Message Inspector.
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
Dictionary<string, string> headerInfo = request.Headers.GetHeader<Dictionary<string, string>>("LocalName", "NamespaceURI");
return null;
}
Теперь, когда сделан запрос на стороне клиента, то первый вызов делается в пользовательских авторизации класса диспетчера вместо AfterReceiveRequest() в Message Inspector на стороне сервера.
Мы зарегистрировали наш пользовательский диспетчер авторизации в файле App.config, как показано ниже:
<serviceBehaviors>
<behavior name="SampleAuthorizationService.Service1Behavior">
<serviceMetadata httpGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceAuthorization principalPermissionMode="Custom" serviceAuthorizationManagerType="SampleAuthorizationSecurity.CustomAuthorizationManager, SampleAuthorizationSecurity">
<authorizationPolicies>
<add policyType="SampleAuthorizationSecurity.CustomAuthPolicy, SampleAuthorizationSecurity"/>
</authorizationPolicies>
</serviceAuthorization>
</behavior>
</serviceBehaviors>
Поток должен быть от сообщения инспектора пользовательского диспетчера авторизации на стороне сервера. Но в нашем случае поток прямо противоположный, то есть от Custom Authorization Manager до Message Inspector. Это может произойти из-за регистрации диспетчера пользовательской авторизации в App.config.
Может ли кто-нибудь помочь мне изменить поток от Message Inspector до Custom Authorization Manager на стороне сервера?