public byte[] Retrieve(String documentId)
        {
            Console.WriteLine("Retrieve");

            // setup client
            SetupClient();

            // create request
            String      requestId   = "dss-sign-request-" + Guid.NewGuid().ToString();
            SignRequest signRequest = new SignRequest();

            signRequest.RequestID = requestId;
            signRequest.Profile   = DSSConstants.ARTIFACT_NAMESPACE;

            // add "ReturnStoredDocument" optional input
            AnyType optionalInputs = new AnyType();

            DSSXSDNamespace.ReturnStoredDocument returnStoredDocument = new DSSXSDNamespace.ReturnStoredDocument();
            returnStoredDocument.Identifier = documentId;

            XmlElement returnStoredDocumentElement = ToDom("ReturnStoredDocument", DSSConstants.ARTIFACT_NAMESPACE,
                                                           returnStoredDocument, typeof(DSSXSDNamespace.ReturnStoredDocument));

            optionalInputs.Any         = new XmlElement[] { returnStoredDocumentElement };
            signRequest.OptionalInputs = optionalInputs;

            // operate
            SignResponse signResponse = this.client.sign(signRequest);

            // parse response
            CheckResponse(signResponse, requestId);

            try
            {
                ValidateResult(signResponse);
            }
            catch (NotParseableXMLDocumentException e)
            {
                throw new SystemException(e.Message, e);
            }

            // check profile
            if (!signResponse.Profile.Equals(DSSConstants.ARTIFACT_NAMESPACE))
            {
                throw new SystemException("Unexpected SignResponse.Profile: " + signResponse.Profile);
            }

            // get document
            DSSXSDNamespace.DocumentWithSignature documentWithSignature = FindDocumentWithSignature(signResponse);
            if (null == documentWithSignature || null == documentWithSignature.Document || null == documentWithSignature.Document.Item)
            {
                throw new DocumentNotFoundException();
            }
            byte[] documentData;

            if (documentWithSignature.Document.Item is DSSXSDNamespace.Base64Data)
            {
                documentData = ((DSSXSDNamespace.Base64Data)documentWithSignature.Document.Item).Value;
            }
            else
            {
                documentData = (byte[])documentWithSignature.Document.Item;
            }
            return(documentData);
        }
        public byte[] Retrieve(String documentId)
        {
            Console.WriteLine("Retrieve");

            // setup client
            SetupClient();

            // create request
            String requestId = "dss-sign-request-" + Guid.NewGuid().ToString();
            SignRequest signRequest = new SignRequest();
            signRequest.RequestID = requestId;
            signRequest.Profile = DSSConstants.ARTIFACT_NAMESPACE;

            // add "ReturnStoredDocument" optional input
            AnyType optionalInputs = new AnyType();

            DSSXSDNamespace.ReturnStoredDocument returnStoredDocument = new DSSXSDNamespace.ReturnStoredDocument();
            returnStoredDocument.Identifier = documentId;

            XmlElement returnStoredDocumentElement = ToDom("ReturnStoredDocument", DSSConstants.ARTIFACT_NAMESPACE,
                returnStoredDocument, typeof(DSSXSDNamespace.ReturnStoredDocument));
            optionalInputs.Any = new XmlElement[] { returnStoredDocumentElement };
            signRequest.OptionalInputs = optionalInputs;

            // operate
            SignResponse signResponse = this.client.sign(signRequest);

            // parse response
            CheckResponse(signResponse, requestId);

            try
            {
                ValidateResult(signResponse);
            }
            catch (NotParseableXMLDocumentException e)
            {
                throw new SystemException(e.Message, e);
            }

            // check profile
            if (!signResponse.Profile.Equals(DSSConstants.ARTIFACT_NAMESPACE))
            {
                throw new SystemException("Unexpected SignResponse.Profile: " + signResponse.Profile);
            }

            // get document
            DSSXSDNamespace.DocumentWithSignature documentWithSignature = FindDocumentWithSignature(signResponse);
            if (null == documentWithSignature || null == documentWithSignature.Document || null == documentWithSignature.Document.Item)
            {
                throw new DocumentNotFoundException();
            }
            byte[] documentData;

            if (documentWithSignature.Document.Item is DSSXSDNamespace.Base64Data)
            {
                documentData = ((DSSXSDNamespace.Base64Data)documentWithSignature.Document.Item).Value;
            }
            else
            {
                documentData = (byte[])documentWithSignature.Document.Item;
            }
            return documentData;
        }