Зашифруйте сообщение SOAP с помощью ошибки сертификата X.509
Удачного дня, нужна помощь отсюда, у меня есть класс securityManager, который наследуется от класса SendSecurityFilter WSE3, но он возвращает ошибку при сборке, генерирует эту ошибку, пожалуйста, помогите мне решить эту проблему, кто-то знает об этом классе. Спасибо
Ошибка 1 "Microsoft.Web.Services3.Security.SendSecurityFilter" не содержит конструктор, который принимает 0 аргументов
открытый класс SecurityManager: SendSecurityFilter {общее переопределение void 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);
}
public 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 Конструкторы по умолчанию
Если класс не содержит объявлений конструктора экземпляра, автоматически предоставляется конструктор экземпляра по умолчанию. Этот конструктор по умолчанию просто вызывает конструктор без параметров прямого базового класса.
Но 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)
{
}