Удалить элемент Timestamp из Security

Все фанаты скажут, что WSE устарел ... Это нормально для меня прямо сейчас ... Просто пытаюсь найти решение для моей проблемы. Попытка использовать веб-сервис Java с использованием WSE. В исходящем запросе на мыло есть защита, есть дополнительная отметка времени узла. Мой исходящий запрос на мыло выглядит так

 
    
    urn:uuid:a427b687-6f52-4689-9df2-c2e3c6d9ea1a<     wsa:ReplyTo wsu:Id="Id-bc623f16-761c-4e03-a23e-aa70bd9b8d34">http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
    https://service100.emedny.org:9047/MHService
   
   2013-06-20T20:19:47Z2013-06-20T20:24:47Z....

.. Я пытаюсь удалить элементы action, messageid, replyto, timestamp

Так что исходящее должно выглядеть

   
    
  

Как бы я удалить узел 4 элемента + отметка времени из безопасности. Я использую WSE3.0. Извините, но не Wcf RT Это то, что я пытался.

Step1

Create a custom policy assertion by deriving from Microsoft.Web.Services3.Design.PolicyAssertion.

        namespace UsernameAssertionLibrary
    {
        public class UsernameClientAssertion : SecurityPolicyAssertion, PolicyAssertion
        {
            private string username;
            private string password;

            public UsernameClientAssertion(string username, string password)
            {
                this.username = username;
                this.password = password;
            }

            public override SoapFilter CreateClientOutputFilter(FilterCreationContext context)
            {
                return new ClientOutputFilter(this, context);
            }

            public override SoapFilter CreateClientInputFilter(FilterCreationContext context)
            {
                // we don't provide ClientInputFilter
                return null;
            }

            public override SoapFilter CreateServiceInputFilter(FilterCreationContext context)
            {
                // we don't provide any processing for web service side
                return null;
            }

            public override SoapFilter CreateServiceOutputFilter(FilterCreationContext context)
            {
                // we don't provide any processing for web service side
                return null;
            }
            public override System.Collections.Generic.IEnumerable GetExtensions()
            {
                return new KeyValuePair[] { new KeyValuePair("UsernameClientAssertion", this.GetType()) };
            }

            public override void ReadXml(XmlReader reader, IDictionary extensions)
            {
                reader.ReadStartElement("UsernameClientAssertion");
            }


            #region ClientOutputFilter
            class ClientOutputFilter : SendSecurityFilter
            {
                UsernameClientAssertion parentAssertion;
                FilterCreationContext filterContext;

                public ClientOutputFilter(UsernameClientAssertion parentAssertion, FilterCreationContext filterContext)
                    : base(parentAssertion.ServiceActor, false, parentAssertion.ClientActor)
                {
                    this.parentAssertion = parentAssertion;
                    this.filterContext = filterContext;
                }

                public override void SecureMessage(SoapEnvelope envelope, Security security)
                {
                    X509SecurityTokenManager objCertTokenManager = (X509SecurityTokenManager)SecurityTokenManager.GetSecurityTokenManagerByTokenType(WSTrust.TokenTypes.X509v3);
                    objCertTokenManager.DefaultKeyAlgorithm = "RSA15";
                    objCertTokenManager.DefaultSessionKeyAlgorithm = "TripleDES";

                    X509Certificate2 cert = GetCertificateFromStore("LMWARD");
                    X509SecurityToken x5091 = new X509SecurityToken(cert);

                    X509Certificate2 cert2 = GetCertificateFromStore("DPMedsHistory");
                    X509SecurityToken x5092 = new X509SecurityToken(cert2);
                    UsernameToken userToken = new UsernameToken(
                        parentAssertion.username,
                        parentAssertion.password,
                        PasswordOption.SendNone); // we don't send password over network
                                                  // but we just use username/password to sign/encrypt message

                    // Add the token to the SOAP header.
                    security.Tokens.Add(x5091);
                    security.Tokens.Add(x5092);
                    security.Tokens.Add(userToken);


                    // Sign the SOAP message by using the UsernameToken.
                    MessageSignature sig = new MessageSignature(x5091);
                    security.Elements.Add(sig);

                    // encrypt BODY
                    EncryptedData data = new EncryptedData(x5092);
                    // add ancrypted data to the security context
                    security.Elements.Add(data);
                }
                private static X509Certificate2 GetCertificateFromStore(string certName)
                {

                    // Get the certificate store for the current user.
                    X509Store store = new X509Store(StoreLocation.LocalMachine);
                    try
                    {
                        store.Open(OpenFlags.ReadOnly);

                        // Place all certificates in an X509Certificate2Collection object.
                        X509Certificate2Collection certCollection = store.Certificates;
                        X509Certificate2Collection signingCert = certCollection.Find(X509FindType.FindBySubjectName, certName, true);

                        if (signingCert.Count == 0)
                            return null;
                        // Return the first certificate in the collection, has the right name and is current. 
                        return signingCert[0];
                    }
                    finally
                    {
                        store.Close();
                    }

                }
            }
            #endregion
        }
    }

Step2
This is my wse3Policy.Config 

    
      
        
      
      
        
      
    

 Step3

     namespace.Service1 MHs = new Service1();
            UsernameClientAssertion assert = new UsernameClientAssertion("user", "pwd");

            // create policy
            Policy policy = new Policy();
            policy.Assertions.Add(assert);

            // and set it to web service
            MHs.SetPolicy(policy);
        Mhs.Method();

Я не получаю никакой ошибки. В файле политики есть предупреждение о том, что у политики элемента есть недопустимый дочерний элемент usernameassertion.List возможных элементов: ....... Элемент timestamp безопасности, ActionId, mesageId, replyTo, элементы wsa по-прежнему появляются в исходящем мыле , Что мне здесь не хватает ..

Ответы на вопрос(0)

Ваш ответ на вопрос