Разработка компонента сервиса подписей

Компонент сервиса подписей предоставляет модулю зависящий от оператора ЭДО слой подписание отправляемых электронных сообщений.

Данный компонент должен реализовывать программный интерфейс ISignatureService. Методы реализуемого интерфейса вызываются при подписании электронных сообщений, отправляемых оператору ЭДО.

Вариант реализации данного компонента содержится в сборке DocsVision.Edi.Runtime.BackOffice.dll.

Далее приведена часть исходного кода стандартной реализации компонента сервиса подписей.

public class SignatureService : ISignatureService
{
    public void Initialize(ObjectContext objectContext)
    {
        this.objectContext = objectContext;

        baseCardService = this.objectContext.GetService<IBaseCardService>();
    }

    public Guid CreateCommentSignature(string commentText, X509Certificate2 certificate) (1)
    {
        using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(commentText)))
        {
            byte[] signature = baseCardService.ComputeSignature(stream, certificate);
            return objectContext.GetService<UserSession>().AccessManager.StoreSignature(Guid.NewGuid(), signature, certificate.Thumbprint);
        }
    }

    public void CreateFileSignature(MessageFile messageFile, X509Certificate2 certificate) (2)
    {

        if (messageFile.FileData != null && messageFile.FileData.Length > 0) (3)
        {
            using (MemoryStream stream = new MemoryStream(messageFile.FileData))
            {
                byte[] signature = baseCardService.ComputeSignature(stream, certificate);
                messageFile.SignatureData = signature;
            }
        }
        else if (!string.IsNullOrEmpty(messageFile.FilePath))
        {
            using (Stream fileStream = new FileStream(messageFile.FilePath, FileMode.Open))
            {
                byte[] signature = baseCardService.ComputeSignature(fileStream, certificate);
                messageFile.SignatureData = signature;
            }
        }
    }
}
1 Реализация метода подписания текстового комментария.
2 Реализация метода подписания файла сообщения.
3 Подписываемые данные могут быть получены непосредственно из файла сообщения (messageFile.FileData) или с файловой системы (messageFile.FilePath).