public StorageStatus ClientCloseExperiment(long experimentId) { StorageStatus status = null; bool experimentClosed = false; //Coupon opCoupon = new Coupon(opHeader.coupon.issuerGuid, opHeader.coupon.couponId, // opHeader.coupon.passkey); if (brokerDB.AuthenticateIssuedCoupon(opHeader.coupon)) { Ticket expTicket = brokerDB.RetrieveTicket(opHeader.coupon, TicketTypes.EXECUTE_EXPERIMENT); if (expTicket != null) { // Check for ESS use Ticket essTicket = brokerDB.RetrieveTicket(opHeader.coupon, TicketTypes.ADMINISTER_EXPERIMENT); if (essTicket != null) { ProcessAgentInfo ess = brokerDB.GetProcessAgentInfo(essTicket.redeemerGuid); if (ess != null) { if (ess.retired) { throw new Exception("The ProcessAgent is retired"); } ExperimentStorageProxy essProxy = new ExperimentStorageProxy(); essProxy.AgentAuthHeaderValue = new AgentAuthHeader(); essProxy.AgentAuthHeaderValue.coupon = ess.identOut; essProxy.Url = ess.webServiceUrl; status = essProxy.CloseExperiment(experimentId); DataStorageAPI.UpdateExperimentStatus(status); } brokerDB.CancelIssuedTicket(opHeader.coupon, essTicket); } else { // Close the local Experiment records // Note: store and retrieve tickets are not cancelled. experimentClosed = DataStorageAPI.CloseExperiment(experimentId, StorageStatus.CLOSED_USER); status = DataStorageAPI.RetrieveExperimentStatus(experimentId); } } } return status; }
public StorageStatus AgentCloseExperiment(Coupon coupon, long experimentId) { StorageStatus status = null; bool experimentClosed = false; if (brokerDB.AuthenticateAgentHeader(agentAuthHeader)) { if (coupon.issuerGuid == ProcessAgentDB.ServiceGuid) { // Check for ESS use Ticket essTicket = brokerDB.RetrieveTicket(coupon, TicketTypes.ADMINISTER_EXPERIMENT); if (essTicket != null) { ProcessAgentInfo ess = brokerDB.GetProcessAgentInfo(essTicket.redeemerGuid); if (ess != null) { if (ess.retired) { throw new Exception("The ProcessAgent is retired"); } ExperimentStorageProxy essProxy = new ExperimentStorageProxy(); essProxy.AgentAuthHeaderValue = new AgentAuthHeader(); essProxy.AgentAuthHeaderValue.coupon = ess.identOut; essProxy.AgentAuthHeaderValue.agentGuid = ProcessAgentDB.ServiceGuid; essProxy.Url = ess.webServiceUrl; status = essProxy.CloseExperiment(experimentId); DataStorageAPI.UpdateExperimentStatus(status); } brokerDB.CancelIssuedTicket(coupon, essTicket); } else { // Close the local Experiment records // Note: store and retrieve tickets are not cancelled. experimentClosed = DataStorageAPI.CloseExperiment(experimentId, StorageStatus.CLOSED_USER); status = DataStorageAPI.RetrieveExperimentStatus(experimentId); } } else { ProcessAgentInfo paInfo = brokerDB.GetProcessAgentInfo(coupon.issuerGuid); if (paInfo != null) { if (paInfo.retired) { throw new Exception("The ProcessAgent is retired"); } InteractiveSBProxy ticketProxy = new InteractiveSBProxy(); AgentAuthHeader authHeader = new AgentAuthHeader(); authHeader.coupon = paInfo.identOut; authHeader.agentGuid = ProcessAgentDB.ServiceGuid; ticketProxy.AgentAuthHeaderValue = authHeader; ticketProxy.Url = paInfo.webServiceUrl; status = ticketProxy.AgentCloseExperiment(coupon, experimentId); } else { throw new Exception("Unknown TicketIssuerDB in RedeemTicket Request"); } } } return status; }