2015-02-04 7 views
1

Имейте славный день нужна помощь отсюда у меня есть класс SecurityManager, который наследует класс SendSecurityFilter WSE3, но он возвращает ошибку, когда он создает его, разглашает эту ошибку, пожалуйста, помогите мне решить эту проблему кто-то знает об этом классе details.thanksШифровать сообщение SOAP с использованием ошибки сертификата X.509

Error 1 «Microsoft.Web.Services3.Security.SendSecurityFilter» не содержит конструктор, который принимает аргументы 0

общественного класса SecurityManager: SendSecurityFilter { общественного переопределение недействительных SecureMessage (конверт SoapEnvelope, безопасность) {

// Get an X.509 certificate for signing the SOAP message. 
     X509SecurityToken signatureToken = GetSecurityToken("CN=WSE2QuickStartClient"); 
     if (signatureToken == null) 
     { 
      throw new SecurityFault("Message Requirements could not be satisfied."); 
     } 

     // Add the X.509 certificate to the header. 
     security.Tokens.Add(signatureToken); 

     // Specify that the SOAP message is signed using this X.509 
     // certifcate. 
     MessageSignature sig = new MessageSignature(signatureToken); 
     security.Elements.Add(sig); 

     // Get an X.509 certificate for encrypting the SOAP message. 
     X509SecurityToken encryptionToken = GetSecurityToken("CN=WSE2QuickStartServer"); 
     if (encryptionToken == null) 
     { 
      throw new SecurityFault("Message Requirements could not be satisfied."); 
     } 

     // Specify that the SOAP message is encrypted using 
     // this X.509 certificate. 
     EncryptedData enc = new EncryptedData(encryptionToken); 
     security.Elements.Add(enc); 
    } 

общественного X509SecurityToken GetSecurityToken (строка Subjectname) {

 X509SecurityToken securityToken = null; 
     X509Store store = new X509Store(StoreName.My, 
      StoreLocation.CurrentUser); 
     store.Open(OpenFlags.ReadOnly); 
     try 
     { 
      X509Certificate2Collection certs = 
       store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, 
       subjectName, false); 

      X509Certificate2 cert; 
      if (certs.Count == 1) 
      { 
       cert = certs[0]; 
       securityToken = new X509SecurityToken(cert); 
      } 
      else 
       securityToken = null; 
     } 
     catch (Exception ex) 
     { 
      securityToken = null; 
     } 
     finally 
     { 
      if (store != null) 
       store.Close(); 
     } 
     return securityToken; 
    } 

ответ

1

Причина вы получаете эту ошибку в том, что базовый класс SendSecurityFilter не имеет конструктор по умолчанию, который принимает 0 аргументы. И вы не выполнили никаких конструкторов для вашего класса SecurityManager, поэтому по умолчанию один должен быть сгенерирован:

10.10.4 Default constructors

Если класс не содержит объявления экземпляра конструктора, конструктор экземпляра по умолчанию является автоматически при условии. Этот стандартный конструктор просто вызывает конструктор без параметров без базового класса .

Но SendSecurityFilter не имеет безпараметрического конструктора для вызова из класса SecurityManager!

Чтобы исправить эту ошибку, необходимо реализовать один из того, что конструкторам или оба из них:

//replace "public" with suitable modififier 
public SecurityManager(string serviceActor, bool isClient) : base(serviceActor, isClient) 
{ 
} 

//replace "public" with suitable modififier 
public SecurityManager(string serviceActor, bool isClient, string clientActor) : base(serviceActor, isClient, clientActor) 
{ 
}