2016-04-05 2 views
0

Auf einem WCF-Dienst habe ich ein Attribut [WebAppServiceBehavior] hinzugefügt, die für einige Header in Nachrichten des Dienstes auf Authentizität überprüft.IServiceBehavior: Anwenden von Nachrichteninspektoren für einige Nachrichten verhindern

Ist es möglich, was ich andere Attribute für bestimmte Methoden verwenden könnte, die diese Prüfungen ignorieren können.

Mein Problem ist, ich habe 20 Methoden in einem Service & Ich möchte nur 2 Methoden von diesem Scheck ausschließen.

[WebAppServiceBehavior] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class SyncService : ISyncService 
    { 
     public void DoWork() //check here 
     { 

     } 


public void DoWork2()//ignore here 
     { 

     } 

} 


    public class WebAppServiceBehavior : Attribute, IServiceBehavior 
    { 

     public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters) 
     { 

     } 

     public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) 
     { 
      // throw new NotImplementedException(); 

      foreach (ChannelDispatcher ch in serviceHostBase.ChannelDispatchers) 
      { 
       foreach (var endptDispatcher in ch.Endpoints) 
       { 
        endptDispatcher.DispatchRuntime.MessageInspectors.Add(new WebAppServiceMessageInspector()); 
       } 
      } 
     } 

     public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) 
     { 
     } 
    } 

    public class WebAppServiceMessageInspector : IDispatchMessageInspector 
    { 
     public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext) 
     { 
      var prop = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name]; 



       HttpRequestMessageProperty httpProp = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name]; 
     object operationName; 
     request.Properties.TryGetValue(WebHttpDispatchOperationSelector.HttpOperationNamePropertyName, out operationName); 
     if (httpProp != null && operationName != null && operationName.ToString().ToLower() == "options".ToLower()) 
     { 
       return "Options";    
     } 



      /*if (ISValid Login) //checking here For a specific header & returning error or success. 
      { 
       return instanceContext; 
      } 
      else 
      { 
       throw new FaultException("Invalid Authorization Code" + Ac.ErrorMsg); 
      }*/ 
return instanceContext; 
     } 

     public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState) 
     { 

     } 
    } 

Antwort

0

Ich habe ein Attribut [IgnoreValidation] zu Methoden hinzugefügt, für die ich die Prüfung ignorieren musste.

public class IgnoreValidation : Attribute 
    { 

    } 

von oben ZB: in Frage:

[WebAppServiceBehavior] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class SyncService : ISyncService 
    { 
     public void DoWork() //check here 
     { 

     } 

**[IgnoreValidation]** 
public void DoWork2()//ignore here 
     { 

     } 

} 

& im Inspektor, habe ich diesen Code zu überprüfen, ob der Betrieb das Attribut hat.

Verwandte Themen