Пример #1
0
        private imsx_POXEnvelopeType HandleReplaceResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            imsx_POXEnvelopeType response;
            var replaceRequest = requestBody.Item as replaceResultRequest ?? new replaceResultRequest();

            var result = GetResult(replaceRequest.resultRecord);

            if (!result.Score.HasValue)
            {
                response = CreateCustomResponse(requestHeader.imsx_messageIdentifier,
                                                "Invalid result",
                                                imsx_CodeMajorType.failure);
            }
            else if (ReplaceResult(result))
            {
                response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier,
                                                 string.Format("Score for {0} is now {1}",
                                                               replaceRequest.resultRecord.sourcedGUID.sourcedId,
                                                               replaceRequest.resultRecord.result.resultScore.textString
                                                               ));
            }
            else
            {
                response = CreateCustomResponse(requestHeader.imsx_messageIdentifier,
                                                string.Format("Score for {0} not replaced",
                                                              replaceRequest.resultRecord.sourcedGUID.sourcedId),
                                                imsx_CodeMajorType.failure);
            }
            response.imsx_POXBody.Item = new replaceResultResponse();
            return(response);
        }
        private async Task <IActionResult> HandleDeleteResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            var deleteRequest  = requestBody.Item as deleteResultRequest ?? new deleteResultRequest();
            var deleteResponse = new deleteResultResponse();

            var result = GetResult(deleteRequest.resultRecord);

            try
            {
                var dto = new DeleteResultDto(result.SourcedId);

                await OnDeleteResult(dto);

                if (dto.StatusCode == StatusCodes.Status200OK)
                {
                    return(CreateSuccessResponse(deleteResponse, requestHeader.imsx_messageIdentifier,
                                                 $"Score for {result.SourcedId} is deleted"));
                }
                return(StatusCode(dto.StatusCode));
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, ex));
            }
        }
        private async Task <IActionResult> HandleDeleteResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            var deleteRequest  = requestBody.Item as deleteResultRequest ?? new deleteResultRequest();
            var deleteResponse = new deleteResultResponse();

            var result = GetResult(deleteRequest.resultRecord);

            try
            {
                var request  = new DeleteResultRequest(result.SourcedId);
                var response = await OnDeleteResultAsync(request).ConfigureAwait(false);

                if (response.StatusCode != StatusCodes.Status200OK)
                {
                    return(CreateFailureResponse(deleteResponse, requestHeader.imsx_messageIdentifier,
                                                 response.StatusCode, response.StatusDescription));
                }
                return(CreateSuccessResponse(deleteResponse, requestHeader.imsx_messageIdentifier,
                                             response.StatusDescription ?? $"Score for {result.SourcedId} is deleted"));
            }
            catch (Exception ex)
            {
                return(CreateFailureResponse(deleteResponse, requestHeader.imsx_messageIdentifier,
                                             StatusCodes.Status500InternalServerError, ex.Message));
            }
        }
Пример #4
0
        static void Main(string[] args)
        {
            var client = new ServiceReference1.PersonManagerSyncPortTypeClient();

            client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
            client.ClientCredentials.UserName.UserName = "******";
            client.ClientCredentials.UserName.Password = "******";

            // Create person
            var sourceId = Guid.NewGuid();
            var hdr      = new imsx_RequestHeaderInfoType();
            var req      = new createPersonRequest();

            req.personRecord = UserMapper.MapToRecord(new User {
                SourceId = sourceId.ToString(), FirstName = "Vlad", LastName = "Ogay", Language = "en"
            });
            client.createPerson(hdr, req);

            // Read person that we've just created
            var req2 = new readPersonRequest {
                sourcedId = sourceId.ToString()
            };
            readPersonResponse resp2;

            client.readPerson(hdr, req2, out resp2);
        }
        private async Task <IActionResult> HandleReadResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            var readRequest  = requestBody.Item as readResultRequest ?? new readResultRequest();
            var readResponse = new readResultResponse();

            try
            {
                var request  = new ReadResultRequest(readRequest.resultRecord.sourcedGUID.sourcedId);
                var response = await OnReadResultAsync(request);

                if (response.StatusCode != StatusCodes.Status200OK)
                {
                    return(CreateFailureResponse(readResponse, requestHeader.imsx_messageIdentifier,
                                                 response.StatusCode, response.StatusDescription));
                }

                if (response.Result == null)
                {
                    return(CreateFailureResponse(readResponse, requestHeader.imsx_messageIdentifier,
                                                 response.StatusCode, response.StatusDescription ?? "TC did not read result."));
                }

                if (response.Result.Score.HasValue)
                {
                    // The score exists
                    readResponse.result = new ResultType {
                        resultScore = new TextType()
                    };
                    var cultureInfo = new CultureInfo("en");
                    readResponse.result.resultScore.language   = cultureInfo.Name;
                    readResponse.result.resultScore.textString = response.Result.Score.Value.ToString(cultureInfo);
                    return(CreateSuccessResponse(readResponse, requestHeader.imsx_messageIdentifier,
                                                 response.StatusDescription ?? $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is read"));
                }
                else
                {
                    // The score could exist, but not found. If the grade has not yet been set via a replaceResult operation
                    // or an existing grade has been deleted via a deleteResult operation, the TC should return a valid
                    // response with a present but empty textString element. The TC should not return 0.0 to indicate a
                    // non-existent grade and the TC should not return a failure status when a grade does not exist.
                    // It should simply return an "empty" grade.
                    readResponse.result = new ResultType {
                        resultScore = new TextType()
                    };
                    var cultureInfo = new CultureInfo("en");
                    readResponse.result.resultScore.language   = cultureInfo.Name;
                    readResponse.result.resultScore.textString = string.Empty;
                    return(CreateSuccessResponse(readResponse, requestHeader.imsx_messageIdentifier,
                                                 response.StatusDescription ?? $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is null"));
                }
            }
            catch (Exception ex)
            {
                return(CreateFailureResponse(readResponse, requestHeader.imsx_messageIdentifier,
                                             StatusCodes.Status500InternalServerError, ex.Message));
            }
        }
        private imsx_POXEnvelopeType HandleReadResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            imsx_POXEnvelopeType response;
            var readRequest  = requestBody.Item as readResultRequest ?? new readResultRequest();
            var readResponse = new readResultResponse();

            var result = ReadResult(readRequest.resultRecord.sourcedGUID.sourcedId);

            if (result.IsValid)
            {
                if (!result.Score.HasValue)
                {
                    // The score could exist, but not found. If the grade has not yet been set via a replaceResult operation
                    // or an existing grade has been deleted via a deleteResult operation, the TC should return a valid
                    // response with a present but empty textString element. The TC should not return 0.0 to indicate a
                    // non-existent grade and the TC should not return a failure status when a grade does not exist.
                    // It should simply return an "empty" grade.
                    response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier,
                                                     $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is null");
                    readResponse.result = new ResultType {
                        resultScore = new TextType()
                    };
                    var cultureInfo = new CultureInfo("en");
                    readResponse.result.resultScore.language   = cultureInfo.Name;
                    readResponse.result.resultScore.textString = string.Empty;
                }
                else
                {
                    // The score exists
                    response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier,
                                                     $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is read");
                    readResponse.result = new ResultType {
                        resultScore = new TextType()
                    };
                    var cultureInfo = new CultureInfo("en");
                    readResponse.result.resultScore.language   = cultureInfo.Name;
                    readResponse.result.resultScore.textString = result.Score.Value.ToString(cultureInfo);
                }
            }
            else
            {
                // The score could not exist (invalid assignment or user)
                response = CreateCustomResponse(requestHeader.imsx_messageIdentifier,
                                                $"Invalid score sourcedId {readRequest.resultRecord.sourcedGUID.sourcedId}",
                                                imsx_CodeMajorType.failure);
            }
            response.imsx_POXBody.Item = readResponse;
            return(response);
        }
        private imsx_POXEnvelopeType HandleDeleteResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            imsx_POXEnvelopeType response;
            var deleteRequest  = requestBody.Item as deleteResultRequest ?? new deleteResultRequest();
            var deleteResponse = new deleteResultResponse();

            var result = GetResult(deleteRequest.resultRecord);

            if (DeleteResult(result.SourcedId))
            {
                response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier,
                                                 $"Score for {result.SourcedId} is deleted");
            }
            else
            {
                response = CreateCustomResponse(requestHeader.imsx_messageIdentifier,
                                                $"Score for {result.SourcedId} not deleted", imsx_CodeMajorType.failure);
            }
            response.imsx_POXBody.Item = deleteResponse;
            return(response);
        }
        private async Task <IActionResult> HandleReplaceResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            var replaceRequest = requestBody.Item as replaceResultRequest ?? new replaceResultRequest();

            var result = GetResult(replaceRequest.resultRecord);

            try
            {
                var request  = new ReplaceResultRequest(result);
                var response = await OnReplaceResultAsync(request);

                if (response.StatusCode == StatusCodes.Status200OK)
                {
                    return(CreateSuccessResponse(replaceRequest, requestHeader.imsx_messageIdentifier,
                                                 $"Score for {replaceRequest.resultRecord.sourcedGUID.sourcedId} is now {replaceRequest.resultRecord.result.resultScore.textString}"));
                }
                return(StatusCode(response.StatusCode));
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, ex));
            }
        }
        private async Task <IActionResult> HandleReplaceResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            var replaceRequest  = requestBody.Item as replaceResultRequest ?? new replaceResultRequest();
            var replaceResponse = new replaceResultResponse();

            var result = GetResult(replaceRequest.resultRecord);

            // The LTI 1.1 specification states in 6.1.1: https://www.imsglobal.org/specs/ltiv1p1/implementation-guide#toc-26
            // The TC must check the incoming grade for validity and must fail when a grade is outside the range 0.0-1.0 or if the grade is not a valid number.
            // The TC must respond to these replaceResult operations with a imsx_codeMajor of "failure".
            if (!result.Score.HasValue || !(result.Score >= 0 && result.Score <= 1))
            {
                return(CreateFailureResponse(replaceResponse, requestHeader.imsx_messageIdentifier, StatusCodes.Status400BadRequest,
                                             "The result score must be a decimal value in the range 0.0 - 1.0"));
            }

            try
            {
                var request  = new ReplaceResultRequest(result);
                var response = await OnReplaceResultAsync(request);

                if (response.StatusCode != StatusCodes.Status200OK)
                {
                    return(CreateFailureResponse(replaceResponse, requestHeader.imsx_messageIdentifier,
                                                 response.StatusCode, response.StatusDescription));
                }
                return(CreateSuccessResponse(replaceResponse, requestHeader.imsx_messageIdentifier,
                                             response.StatusDescription
                                             ?? $"Score for {replaceRequest.resultRecord.sourcedGUID.sourcedId} is now {replaceRequest.resultRecord.result.resultScore.textString}"));
            }
            catch (Exception ex)
            {
                return(CreateFailureResponse(replaceResponse, requestHeader.imsx_messageIdentifier,
                                             StatusCodes.Status500InternalServerError, ex.Message));
            }
        }
Пример #10
0
        private void button1_Click(object sender, EventArgs ea)
        {
            var client = new SampleServiceClient.ServiceReference1.PersonManagerSyncPortTypeClient();

            client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
            client.ClientCredentials.UserName.UserName = "******";
            client.ClientCredentials.UserName.Password = "******";

            // Create person
            var sourceId = Guid.NewGuid();
            var hdr      = new imsx_RequestHeaderInfoType();
            var req      = new createPersonRequest();

            req.personRecord = UserMapper.MapToRecord(new User {
                SourceId = sourceId.ToString(), FirstName = "Vlad", LastName = "Ogay", Language = "en"
            });

            textBox1.Text += "=== CreatePerson ===";
            try
            {
                client.createPerson(hdr, req);
                textBox1.Text += Environment.NewLine;
                textBox1.Text += "OK";
            }
            catch (Exception e)
            {
                textBox1.Text += Environment.NewLine;
                textBox1.Text += e.Message;
                if (e.InnerException != null)
                {
                    textBox1.Text += Environment.NewLine;
                    textBox1.Text += e.InnerException.Message;
                    if (e.InnerException.InnerException != null)
                    {
                        textBox1.Text += Environment.NewLine;
                        textBox1.Text += e.InnerException.InnerException.Message;
                    }
                }
            }

            // Read person that we've just created
            var req2 = new readPersonRequest {
                sourcedId = sourceId.ToString()
            };
            readPersonResponse resp2;

            textBox1.Text += Environment.NewLine;
            textBox1.Text += Environment.NewLine;
            textBox1.Text += "=== ReadPerson ===";
            try
            {
                client.readPerson(hdr, req2, out resp2);
                textBox1.Text += Environment.NewLine;
                textBox1.Text += "OK";
            }
            catch (Exception e2)
            {
                textBox1.Text += Environment.NewLine;
                textBox1.Text += e2.Message;
                if (e2.InnerException != null)
                {
                    textBox1.Text += Environment.NewLine;
                    textBox1.Text += e2.InnerException.Message;
                }
            }
        }
        private imsx_POXEnvelopeType HandleReplaceResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            imsx_POXEnvelopeType response;
            var replaceRequest = requestBody.Item as replaceResultRequest ?? new replaceResultRequest();

            var result = GetResult(replaceRequest.resultRecord);
            if (!result.Score.HasValue)
            {
                response = CreateCustomResponse(requestHeader.imsx_messageIdentifier,
                    "Invalid result",
                    imsx_CodeMajorType.failure);
            }
            else if (ReplaceResult(result))
            {
                response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier,
                    $"Score for {replaceRequest.resultRecord.sourcedGUID.sourcedId} is now {replaceRequest.resultRecord.result.resultScore.textString}");
            }
            else
            {
                response = CreateCustomResponse(requestHeader.imsx_messageIdentifier,
                    $"Score for {replaceRequest.resultRecord.sourcedGUID.sourcedId} not replaced",
                    imsx_CodeMajorType.failure);
            }
            response.imsx_POXBody.Item = new replaceResultResponse();
            return response;
        }
        private imsx_POXEnvelopeType HandleReadResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            imsx_POXEnvelopeType response;
            var readRequest = requestBody.Item as readResultRequest ?? new readResultRequest();
            var readResponse = new readResultResponse();

            var result = ReadResult(readRequest.resultRecord.sourcedGUID.sourcedId);
            if (result.IsValid)
            {
                if (!result.Score.HasValue)
                {
                    // The score could exist, but not found. If the grade has not yet been set via a replaceResult operation
                    // or an existing grade has been deleted via a deleteResult operation, the TC should return a valid
                    // response with a present but empty textString element. The TC should not return 0.0 to indicate a
                    // non-existent grade and the TC should not return a failure status when a grade does not exist.
                    // It should simply return an "empty" grade.
                    response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier,
                        $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is null");
                    readResponse.result = new ResultType {resultScore = new TextType()};
                    var cultureInfo = new CultureInfo("en");
                    readResponse.result.resultScore.language = cultureInfo.Name;
                    readResponse.result.resultScore.textString = string.Empty;
                }
                else
                {
                    // The score exists
                    response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier,
                        $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is read");
                    readResponse.result = new ResultType {resultScore = new TextType()};
                    var cultureInfo = new CultureInfo("en");
                    readResponse.result.resultScore.language = cultureInfo.Name;
                    readResponse.result.resultScore.textString = result.Score.Value.ToString(cultureInfo);
                }
            }
            else
            {
                // The score could not exist (invalid assignment or user)
                response = CreateCustomResponse(requestHeader.imsx_messageIdentifier,
                    $"Invalid score sourcedId {readRequest.resultRecord.sourcedGUID.sourcedId}",
                    imsx_CodeMajorType.failure);
            }
            response.imsx_POXBody.Item = readResponse;
            return response;
        }
        private imsx_POXEnvelopeType HandleDeleteResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody)
        {
            imsx_POXEnvelopeType response;
            var deleteRequest = requestBody.Item as deleteResultRequest ?? new deleteResultRequest();
            var deleteResponse = new deleteResultResponse();

            var result = GetResult(deleteRequest.resultRecord);
            if (DeleteResult(result.SourcedId))
            {
                response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier,
                    $"Score for {result.SourcedId} is deleted");
            }
            else
            {
                response = CreateCustomResponse(requestHeader.imsx_messageIdentifier,
                    $"Score for {result.SourcedId} not deleted", imsx_CodeMajorType.failure);
            }
            response.imsx_POXBody.Item = deleteResponse;
            return response;
        }