![]() | Best Practices |
SDC Best Practices
Login Best Practices
The token login lifetimes is 1h.
It's very important to require a new login only when it is not valid anymore and not for every operation on the Web Service.
1// 2//WRONG: You login every time before you deposit many documents 3// 4try 5{ 6 List<string> listDocument = new List<string>(); 7 for (int i = 0; i < 100; i++) 8 { 9 //WRONG USAGE OF LOGIN!!! 10 //THIS CAN CAUSE A STOP OF THE LOGIN SERVICES!!! 11 var v = jcdiClient.Login(user, password); 12 token = v.AccessToken; 13 14 JsdcDocument jsdcDocument = new JsdcDocument(); 15 jsdcDocument.FileName = Path.GetFileName("testset_01_001.pdf"); 16 jsdcDocument.FileImage = File.ReadAllBytes("testset_01_001.pdf"); 17 jsdcDocument.XmlDocumentMetadata = File.ReadAllText("metadata_testset_01_001.pdf.xml"); 18 jsdcDocument.XmlFlowMetadata = File.ReadAllText("jsdcflow_testset_01_001.pdf.xml"); 19 //Imposto il token 20 ClientCustomHeaderContext.HeaderInformation.AccessToken = token; 21 var result = jcdiClient.Deposit(jsdcDocument); 22 listDocument.Add(result.DocumentUuid); 23 } 24} 25catch (Exception ex) 26{ 27 token = string.Empty; 28 throw ex; 29} 30 31// 32//CORRECT: you login only one time and deposit many documents 33// 34try 35{ 36 List<Tuple<string, string>> listDocument = new List<Tuple<string, string>>(); 37 var v = jcdiClient.Login(user, password); //Correct 38 token = v.AccessToken; 39 40 for (int i = 0; i < 100; i++) 41 { 42 JsdcDocument jsdcDocument = new JsdcDocument(); 43 jsdcDocument.FileName = Path.GetFileName("testset_01_001.pdf"); 44 jsdcDocument.FileImage = File.ReadAllBytes("testset_01_001.pdf"); 45 jsdcDocument.XmlDocumentMetadata = File.ReadAllText("metadata_testset_01_001.pdf.xml"); 46 jsdcDocument.XmlFlowMetadata = File.ReadAllText("jsdcflow_testset_01_001.pdf.xml"); 47 //Imposto il token 48 ClientCustomHeaderContext.HeaderInformation.AccessToken = token; 49 var result = jcdiClient.Deposit(jsdcDocument); 50 listDocument.Add(new Tuple<string, string>(result.DocumentUuid, result.DigitalSafeUuid)); 51 } 52} 53catch (Exception ex) 54{ 55 token = string.Empty; 56 throw ex; 57}
Retry
When you send a document, your document would be processed later in SDC environment. You must implement a retry method for read the status of a document when the document is in RetryLater state.
1SdcRequestInfo doc = new SdcRequestInfo(); 2doc.DocumentUuid = DocumentUuid; 3doc.DigitalSafeUuid = DigitalSafeUuid; 4var v = jcdiClient.ReadDocumentTechMetadata(doc); 5if (v != null) 6{ 7 switch (v.JsdcOperationStatus) 8 { 9 case JsdcOperationStatuses.Fail: 10 Console.WriteLine("Returned value is Fail"); 11 break; 12 case JsdcOperationStatuses.Success: 13 DocumentStatus ds = new DocumentStatus() 14 { 15 Description = string.Empty, 16 PdvId = v.PdVId, 17 Status = (DocumentStatusCodes)v.DocumentStatus, 18 }; 19 switch (ds.Status) 20 { 21 case DocumentStatusCodes.Indexed: 22 Console.WriteLine("Document Indexed"); 23 break; 24 case DocumentStatusCodes.WaitingForProcessing: 25 Console.WriteLine("Document in Waiting for Processing"); 26 break; 27 case DocumentStatusCodes.WaitingForDeposit: 28 case DocumentStatusCodes.DepositCompleted: 29 Console.WriteLine("Document Deposit Completed with ID PDV: " + ds.PdvId.ToString()); 30 break; 31 case DocumentStatusCodes.Preserved: 32 Console.WriteLine("Document Preserved with ID PDV: " + ds.PdvId.ToString()); 33 break; 34 case DocumentStatusCodes.Refused: 35 case DocumentStatusCodes.NoPdvFound: 36 case DocumentStatusCodes.Error: 37 default: 38 Console.WriteLine("Document in Error"); 39 break; 40 } 41 break; 42 case JsdcOperationStatuses.RetryLater: 43 Console.WriteLine("Wait and try again"); 44 Thread.Sleep(30000); //30 min 45 //Check again Document Status 46 break; 47 } 48} 49else 50{ 51 Console.WriteLine("Returned value is null"); 52}