public StorageInfoDO Store(byte[] documentData, String contentType) { Console.WriteLine("Store"); // setup the client SetupClient(); // create SignRequest String requestId = "dss-sign-request-" + Guid.NewGuid().ToString(); SignRequest signRequest = new SignRequest(); signRequest.RequestID = requestId; signRequest.Profile = DSSConstants.ARTIFACT_NAMESPACE; // add "ReturnStorageInfo" optional input AnyType optionalInputs = new AnyType(); XmlElement returnStorageInfoElement = GetElement("artifact", "ReturnStorageInfo", DSSConstants.ARTIFACT_NAMESPACE); optionalInputs.Any = new XmlElement[] { returnStorageInfoElement }; signRequest.OptionalInputs = optionalInputs; // add document signRequest.InputDocuments = GetInputDocuments(documentData, contentType); // operate SignResponse signResponse = 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); } // parse StorageInfo DSSXSDNamespace.StorageInfo storageInfo = FindStorageInfo(signResponse); if (null == storageInfo) { throw new SystemException("Missing StorageInfo"); } return(new StorageInfoDO(storageInfo.Identifier, storageInfo.Validity.NotBefore, storageInfo.Validity.NotAfter)); }
private DSSXSDNamespace.StorageInfo FindStorageInfo(SignResponse signResponse) { if (null == signResponse.OptionalOutputs) { return(null); } foreach (XmlElement optionalOutput in signResponse.OptionalOutputs.Any) { if (optionalOutput.NamespaceURI.Equals(DSSConstants.ARTIFACT_NAMESPACE) && optionalOutput.LocalName.Equals("StorageInfo")) { DSSXSDNamespace.StorageInfo storageInfo = (DSSXSDNamespace.StorageInfo)FromDom("StorageInfo", DSSConstants.ARTIFACT_NAMESPACE, optionalOutput, typeof(DSSXSDNamespace.StorageInfo)); return(storageInfo); } } return(null); }