Журнал сообщений WCF - добавить фильтры с запросами XPath

У меня есть служба WCF со следующим контрактом:

[ServiceContract(Namespace="http://myNamespace.org/")]
public interface IMyService
{
    [OperationContract]
    string Invert(string s);

    [OperationContract]
    string ToUpper(string s);
}

Клиенты вызывают оба метода, Invert и ToUpper . Представьте, что я хочу использовать ведение журнала сообщений, но единственный метод, который меня интересует, это ToUpper , поскольку другой метод широко используется, и регистрация всех сообщений приведет к повреждению журнала;)

Здесь , Читал, как фильтровать сообщения, которые записываются в лог. Но я, должно быть, делаю что-то не так, поскольку мой журнал остается пустым ... Моя конфигурация выглядит так


  ...
  
    
      
        /soap:Envelope/soap:Header/a:Action[starts-with(text(),'http://myNamespace.org/IMyService/ToUpper')]
      
    
  




  
    
      
        
      
    
  
  
    
  
  

Если я применяю этот фильтр, в журнал не попадет ни одного сообщения ... Так что же я делаю не так в связанном примере выше?

Без фильтра xml-трассировка сообщения по умолчанию (метод ToUpper , вызванный с параметром строки hello ) выглядит следующим образом:


  
    0
    3
    0
    8
    
    
    
    
    
    MY-Machine
  
  
    
      
        
          
            POST
            
            
              uIDPozEtlPQCjkhCodYdPWh6joUAAAAAamILDP7v3kG5sY6zKsB7HPPiLBWr+AVGmfFDQbk8GYAACQAA
              "http://myNamespace.org/IMyService/ToUpper"
              157
              text/xml; charset=utf-8
              gzip, deflate
              100-continue
              localhost:8731
            
          
          
            
              http://localhost:8731/Design_Time_Addresses/MyService/
              http://myNamespace.org/IMyService/ToUpper
            
            
              
                hello
              
            
          
        
      
    
  

Обновление: Для всех, кто заинтересован в решении, я наконец-то получил его работоспособность с помощью jasso, спасибо:

/soap:Envelope/soap:Header/a:Action[starts-with(text(),'http://myNamespace.org/IMyService/ToUpper')]

Затем я отредактировал свой интерфейс и добавил методы с Method1 до Method3 . Моя цель состояла в том, чтобы регистрировать все, кроме сообщений, связанных с Method1 и Method3 . Я сделал это с помощью следующего фильтра:

/soap:Envelope/soap:Header/a:Action[starts-with(text(),'http://myNamespace.org/IMyService/Method1')=false() and starts-with(text(),'http://myNamespace.org/IMyService/Method3')=false()]

Таким образом, в журнал регистрируются только сообщения, относящиеся к Invert , ToUpper и Method2 .

Это может быть более чистым, чтобы справиться с этим с двумя отдельными фильтрами, но на данный момент я вполне доволен этим.

5
задан khlr 29 May 2011 в 14:16
поделиться