Exemplo n.º 1
0
        private static PersonRegistryClient CreateClient()
        {
            var client = new PersonRegistryClient();

            client.ClientCredentials.UserName.UserName = ConfigurationManager.AppSettings["username"];
            client.ClientCredentials.UserName.Password = ConfigurationManager.AppSettings["password"];
            return(client);
        }
Exemplo n.º 2
0
        private static void RevisePersonRecord(PersonRegistryClient client)
        {
            var info = ReadPersonalInformation(true, true);

            var outerPerson = new PRPA_MT101302NO01IdentifiedPerson {
                id = new[] { new II {
                                 root = GetOid(info.FhNumber), extension = info.FhNumber
                             } },
                identifiedPerson = new PRPA_MT101302NO01Person()
            };

            var nameItems = CreateNameItems(info);

            if (nameItems.Count() > 0)
            {
                outerPerson.identifiedPerson.name = new[] { new PN(nameItems) }
            }
            ;

            if (IsDateSpecifiedAndValid(info.DateOfBirth))
            {
                outerPerson.identifiedPerson.birthTime = new TS(info.DateOfBirth);
            }

            var addressItems = CreateAddressItems(info);

            if (addressItems.Count() > 0)
            {
                outerPerson.identifiedPerson.addr = new[] { new AD(addressItems) }
            }
            ;

            if (info.Gender != "")
            {
                outerPerson.identifiedPerson.administrativeGenderCode = CreateAdministrativeGenderCode(info.Gender);
            }

            var request = SetTopLevelFields(new PRPA_IN101314NO01 {
                controlActProcess = new PRPA_IN101314NO01MFMI_MT700721UV01ControlActProcess {
                    subject = new PRPA_IN101314NO01MFMI_MT700721UV01Subject1 {
                        registrationRequest = new PRPA_IN101314NO01MFMI_MT700721UV01RegistrationRequest {
                            subject1 = new PRPA_IN101314NO01MFMI_MT700721UV01Subject2 {
                                identifiedPerson = outerPerson
                            }
                        }
                    }
                }
            });

            RevisePersonRecordRequestSerializer.Serialize(Console.Out, request);
            Console.WriteLine("\n");
            PRPA_IN101319NO01 response = client.RevisePersonRecord(request);

            AddPersonOrRevisePersonRecordResponseSerializer.Serialize(Console.Out, response);
            Console.WriteLine();
        }
Exemplo n.º 3
0
        internal static void UnlinkPersonRecords(PersonRegistryClient client)
        {
            Console.Write("Enter child FH-number: ");
            string obsoleteFhNumber = Console.ReadLine();

            Console.Write("Enter parent ID-number or FH-number: ");
            string survivingIdNumberOrFhNumber = Console.ReadLine();

            if (string.IsNullOrWhiteSpace(obsoleteFhNumber) || string.IsNullOrWhiteSpace(survivingIdNumberOrFhNumber))
            {
                return;
            }

            var request = SetTopLevelFields(new PRPA_IN101911NO01
            {
                controlActProcess = new PRPA_IN101911NO01MFMI_MT700721UV01ControlActProcess
                {
                    subject = new PRPA_IN101911NO01MFMI_MT700721UV01Subject1
                    {
                        registrationRequest = new PRPA_IN101911NO01MFMI_MT700721UV01RegistrationRequest
                        {
                            subject1 = new PRPA_IN101911NO01MFMI_MT700721UV01Subject2
                            {
                                identifiedPerson = new PRPA_MT101911NO01IdentifiedPerson
                                {
                                    id           = new[] { new II(GetIdOid(survivingIdNumberOrFhNumber), survivingIdNumberOrFhNumber) },
                                    identifiedBy = new PRPA_MT101911NO01SourceOf2
                                    {
                                        //TODO: Is the value of statusCode important?
                                        otherIdentifiedPerson = new PRPA_MT101911NO01OtherIdentifiedPerson
                                        {
                                            id = new II(GetIdOid(obsoleteFhNumber), obsoleteFhNumber)
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            });

            UnlinkPersonRecordsRequestSerializer.Serialize(Console.Out, request);
            Console.WriteLine("\n");
            MCAI_IN000004NO01 response = client.UnlinkPersonRecordsAsync(request).Result;

            AcknowledgementSerializer.Serialize(Console.Out, response);
            Console.WriteLine();
        }
Exemplo n.º 4
0
        private static void FindCandidates(PersonRegistryClient client)
        {
            var info      = ReadPersonalInformation(false, false);
            var paramList = new PRPA_MT101306NO01ParameterList();

            var nameItems = CreateNameItems(info);

            if (nameItems.Count() > 0)
            {
                paramList.personName = CreatePersonNameParameter(nameItems);
            }

            if (IsDateSpecifiedAndValid(info.DateOfBirth))
            {
                paramList.personBirthTime = CreatePersonBirthTimeParameter(info.DateOfBirth);
            }

            var addressItems = CreateAddressItems(info);

            if (addressItems.Count() > 0)
            {
                paramList.identifiedPersonAddress = CreateIdentifiedPersonAddressParameter(addressItems);
            }

            var message = SetTopLevelFields(new PRPA_IN101305NO01 {
                controlActProcess = new PRPA_IN101305NO01QUQI_MT021001UV01ControlActProcess {
                    queryByParameter = new PRPA_MT101306NO01QueryByParameter {
                        parameterList = paramList
                    }
                }
            });

            FindCandidatesRequestSerializer.Serialize(Console.Out, message);
            Console.WriteLine("\n");
            PRPA_IN101306NO01 result = client.FindCandidates(message);

            FindCandidatesResponseSerializer.Serialize(Console.Out, result);
            Console.WriteLine("\n");

            Console.WriteLine("Found {0} persons:", result.controlActProcess.queryAck.resultTotalQuantity.value);
            if (result.controlActProcess.subject != null)
            {
                foreach (var subject in result.controlActProcess.subject)
                {
                    Console.WriteLine(PersonToString(subject.registrationEvent.subject1.identifiedPerson));
                }
            }
        }
Exemplo n.º 5
0
        internal static PersonRegistryClient CreateClient()
        {
            var client = new PersonRegistryClient
            {
                Endpoint =
                {
                    Address                          = new EndpointAddress(
                        new Uri(_configuration["ConnectionStrings:PregHl7Uri"]),
                        new DnsEndpointIdentity(_configuration["ConnectionStrings:PregHl7Dns"])),
                    Binding                          = new WSHttpBinding(SecurityMode.TransportWithMessageCredential)
                    {
                        Security                     =
                        {
                            Message                  = new NonDualMessageSecurityOverHttp
                            {
                                ClientCredentialType = MessageCredentialType.UserName
                            },
                            Transport                = new HttpTransportSecurity
                            {
                                ClientCredentialType = HttpClientCredentialType.None
                            }
                        },
                        AllowCookies           = true,
                        MaxReceivedMessageSize = int.MaxValue,
                        MaxBufferPoolSize      = int.MaxValue,
                        CloseTimeout           = new TimeSpan(0,  1, 0),
                        OpenTimeout            = new TimeSpan(0,  1, 0),
                        ReceiveTimeout         = new TimeSpan(0, 10, 0),
                        SendTimeout            = new TimeSpan(0,  1, 0)
                    }
                },
                ClientCredentials =
                {
                    UserName     =
                    {
                        UserName = _configuration["ClientCredentials:Username"],
                        Password = _configuration["ClientCredentials:Password"]
                    }
                }
            };

            //var requestInterceptor = new CustomInspectorBehavior();
            //client.Endpoint.EndpointBehaviors.Add(requestInterceptor);

            return(client);
        }
Exemplo n.º 6
0
        public static void RunPerformanceTest(PersonRegistryClient client)
        {
            var sw = new Stopwatch();

            sw.Start();
            client.GetDemographicsAsync(CreateGetDemographicsRequest(new II(IdNumberOid.FhNumber, CreateRandomFhNumber())));
            sw.Stop();
            Console.WriteLine("Initial request: " + sw.Elapsed);

            sw.Restart();
            const int numRequests = 1000;

            for (var i = 0; i < numRequests; ++i)
            {
                client.GetDemographicsAsync(CreateGetDemographicsRequest(new II(IdNumberOid.FhNumber, CreateRandomFhNumber())));
            }
            sw.Stop();
            Console.WriteLine("{0} subsequent requests: {1} ({2} ms per request)", numRequests, sw.Elapsed, sw.ElapsedMilliseconds / numRequests);

            sw.Restart();
            const int numIndividualRequests = 100;

            for (var i = 0; i < numIndividualRequests; ++i)
            {
                using (var c = Program.CreateClient())
                {
                    c.GetDemographicsAsync(CreateGetDemographicsRequest(new II(IdNumberOid.FhNumber, CreateRandomFhNumber())));
                }
            }
            sw.Stop();
            Console.WriteLine("{0} individual requests: {1} ({2} ms per request)", numIndividualRequests, sw.Elapsed, sw.ElapsedMilliseconds / numIndividualRequests);

            const int numThreads = 20;
            var       threads    = new Thread[numThreads];

            for (int i = 0; i < numThreads; ++i)
            {
                threads[i] = new Thread(ThreadTester);
                threads[i].Start(i);
            }
            foreach (var thread in threads)
            {
                thread.Join();
            }
        }
Exemplo n.º 7
0
        internal static void GetDemographics(PersonRegistryClient client)
        {
            string idNumber = ReadLineAndTrim("Enter id number: ");

            if (string.IsNullOrWhiteSpace(idNumber))
            {
                return;
            }

            var id = new II {
                root = GetIdOid(idNumber.Trim()), extension = idNumber.Trim()
            };
            PRPA_IN101307NO01 request = CreateGetDemographicsRequest(id);

            GetDemographicsRequestSerializer.Serialize(Console.Out, request);
            Console.WriteLine("\n");
            PRPA_IN101308NO01 response = client.GetDemographicsAsync(request).Result;

            GetDemographicsResponseSerializer.Serialize(Console.Out, response);
            Console.WriteLine("\n");

            string queryResponseCode = response.controlActProcess.queryAck.queryResponseCode.code;

            switch (queryResponseCode)
            {
            case QueryResponseCode.Ok:
                Console.WriteLine(PersonToString(response.controlActProcess.subject[0].registrationEvent.subject1
                                                 .identifiedPerson));
                break;

            case QueryResponseCode.NoResultsFound:
                Console.WriteLine("No results found");
                break;

            case QueryResponseCode.QueryParameterError:
                Console.WriteLine("Query parameter error");
                break;

            default:
                Console.WriteLine($"Unrecognized query response code: '{queryResponseCode}'");
                break;
            }
        }
Exemplo n.º 8
0
        internal static void AddPerson(PersonRegistryClient client)
        {
            var info = ReadPersonalInformation(false, true, true, true);

            var innerPerson = new PRPA_MT101311NO01Person();


            // Registrerer navn
            var nameItems  = CreateNameItems(info);
            var enumerable = nameItems.ToList();

            if (enumerable.Any())
            {
                innerPerson.name = new[] { new PN(enumerable) }
            }
            ;

            // Registrerer fødselsdato
            if (IsDateSpecifiedAndValid(info.dateOfBirth))
            {
                innerPerson.birthTime = new TS(info.dateOfBirth);
            }

            // Registrerer adresser
            var addressItems = CreateAddressItems(info);
            var items        = addressItems.ToList();

            if (items.Any())
            {
                var addressList = new List <AD>();

                foreach (var(key, value) in items)
                {
                    switch (key)
                    {
                    case "private":
                        addressList.Add(new AD(value, new[] { PostalAddressUse.H }));
                        break;

                    case "temp":
                        addressList.Add(new AD(value, new[] { PostalAddressUse.TMP }));
                        break;
                    }
                }
                innerPerson.addr = addressList.ToArray();
            }

            // Registrerer kjønn
            if (info.gender != "")
            {
                innerPerson.administrativeGenderCode = CreateAdministrativeGenderCode(info.gender);
            }

            // Registrerer kontaktmåte - mobil
            var telecomItems = CreateTelecomItems(info);
            var tel          = telecomItems.ToList();

            if (tel.Any())
            {
                innerPerson.telecom = tel.ToArray();
            }

            // OtherID
            if (info.passNr != "")
            {
                innerPerson.asOtherIDs = new[]
                {
                    new PRPA_MT101311NO01OtherIDs()
                    {
                        id = new[] { new II {
                                         root = GetNationalityOid(info.passNrIssuerNationality), extension = info.passNr
                                     } }
                    }
                };
            }

            var request = SetTopLevelFields(new PRPA_IN101311NO01
            {
                controlActProcess = new PRPA_IN101311NO01MFMI_MT700721UV01ControlActProcess
                {
                    subject = new PRPA_IN101311NO01MFMI_MT700721UV01Subject1
                    {
                        registrationRequest = new PRPA_IN101311NO01MFMI_MT700721UV01RegistrationRequest
                        {
                            subject1 = new PRPA_IN101311NO01MFMI_MT700721UV01Subject2
                            {
                                identifiedPerson = new PRPA_MT101311NO01IdentifiedPerson
                                {
                                    identifiedPerson = innerPerson
                                }
                            }
                        }
                    }
                }
            });

            AddPersonRequestSerializer.Serialize(Console.Out, request);
            Console.WriteLine("\n");
            PRPA_IN101319NO01 response = client.AddPersonAsync(request).Result;

            AddPersonOrRevisePersonRecordResponseSerializer.Serialize(Console.Out, response);
            Console.WriteLine("\n");

            var pathToFirstNull = new List <string>();
            var subject         = NullSafeObjectPathTraverser.Traverse(response, r => r.controlActProcess.subject, pathToFirstNull);

            if (subject == null || subject.Length <= 0)
            {
                return;
            }
            var id = NullSafeObjectPathTraverser.Traverse(subject[0], s => s.registrationEvent.subject1.identifiedPerson.id, pathToFirstNull);

            if (id != null && id.Length > 0)
            {
                Console.WriteLine("The person has been given the FH-number " + id[0].extension);
            }
        }
Exemplo n.º 9
0
        private static void AddPerson(PersonRegistryClient client)
        {
            var info = ReadPersonalInformation(false, true);

            var innerPerson = new PRPA_MT101311NO01Person();

            var nameItems = CreateNameItems(info);

            if (nameItems.Count() > 0)
            {
                innerPerson.name = new[] { new PN(nameItems) }
            }
            ;

            if (IsDateSpecifiedAndValid(info.DateOfBirth))
            {
                innerPerson.birthTime = new TS(info.DateOfBirth);
            }

            var addressItems = CreateAddressItems(info);

            if (addressItems.Count() > 0)
            {
                innerPerson.addr = new[] { new AD(addressItems) }
            }
            ;

            if (info.Gender != "")
            {
                innerPerson.administrativeGenderCode = CreateAdministrativeGenderCode(info.Gender);
            }

            var request = SetTopLevelFields(new PRPA_IN101311NO01 {
                controlActProcess = new PRPA_IN101311NO01MFMI_MT700721UV01ControlActProcess {
                    subject = new PRPA_IN101311NO01MFMI_MT700721UV01Subject1 {
                        registrationRequest = new PRPA_IN101311NO01MFMI_MT700721UV01RegistrationRequest {
                            subject1 = new PRPA_IN101311NO01MFMI_MT700721UV01Subject2 {
                                identifiedPerson = new PRPA_MT101311NO01IdentifiedPerson {
                                    identifiedPerson = innerPerson
                                }
                            }
                        }
                    }
                }
            });

            AddPersonRequestSerializer.Serialize(Console.Out, request);
            Console.WriteLine("\n");
            PRPA_IN101319NO01 response = client.AddPerson(request);

            AddPersonOrRevisePersonRecordResponseSerializer.Serialize(Console.Out, response);
            Console.WriteLine("\n");

            var pathToFirstNull = new List <string>();
            var subject         = NullSafeObjectPathTraverser.Traverse(response, r => r.controlActProcess.subject, pathToFirstNull);

            if (subject != null && subject.Length > 0)
            {
                var id = NullSafeObjectPathTraverser.Traverse(subject[0], s => s.registrationEvent.subject1.identifiedPerson.id, pathToFirstNull);
                if (id != null && id.Length > 0)
                {
                    Console.WriteLine("The person has been given the FH-number " + id[0].extension);
                }
            }
        }
Exemplo n.º 10
0
        internal static void FindCandidates(PersonRegistryClient client)
        {
            var info      = ReadPersonalInformation(false, true, false, true);
            var paramList = new PRPA_MT101306NO01ParameterList();

            // Search for people created within specified period
            //var requestCreation = false;
            //var resp = ReadLineAndTrim("Søke på creationTime (J/N): ");
            //if (resp.ToUpper() == "J") requestCreation = true;

            //if (requestCreation)
            //{
            //    var creationFrom = ReadLineAndTrim($"Fra dato ({DateFormat}): ");
            //    var creationTo = ReadLineAndTrim($"Til dato ({DateFormat}): ");

            //    var ds = new PRPA_MT101306NO01QueryByParameter();
            //    ds.
            //}


            var nameItems = CreateNameItems(info);
            var items     = nameItems.ToList();

            if (items.Any())
            {
                paramList.personName = CreatePersonNameParameter(items);
            }

            if (IsDateSpecifiedAndValid(info.dateOfBirth))
            {
                paramList.personBirthTime = CreatePersonBirthTimeParameter(info.dateOfBirth);
            }

            if (info.gender != string.Empty)
            {
                paramList.personAdministrativeGender = CreatePersonAdministrativeGenderParameter(info.gender);
            }

            var addressItems = CreateAddressItems(info);
            var addressList  = addressItems.ToList();

            if (addressList.Any())
            {
                foreach (var addrItem in addressList)
                {
                    paramList.identifiedPersonAddress = addrItem.Key switch
                    {
                        "private" => CreateIdentifiedPersonAddressParameter(addrItem.Value, PostalAddressUse.H),
                        "temp" => CreateIdentifiedPersonAddressParameter(addrItem.Value, PostalAddressUse.WP),
                        _ => paramList.identifiedPersonAddress
                    };
                }
            }


            var message = SetTopLevelFields(new PRPA_IN101305NO01
            {
                controlActProcess = new PRPA_IN101305NO01QUQI_MT021001UV01ControlActProcess
                {
                    queryByParameter = new PRPA_MT101306NO01QueryByParameter
                    {
                        parameterList = paramList
                    }
                }
            });

            FindCandidatesRequestSerializer.Serialize(Console.Out, message);
            Console.WriteLine("\n");
            PRPA_IN101306NO01 result = client.FindCandidatesAsync(message).Result;

            FindCandidatesResponseSerializer.Serialize(Console.Out, result);
            Console.WriteLine("\n");

            Console.WriteLine("Found {0} persons:", result.controlActProcess.queryAck.resultTotalQuantity.value);
            if (result.controlActProcess.subject != null)
            {
                foreach (var subject in result.controlActProcess.subject)
                {
                    Console.WriteLine(PersonToString(subject.registrationEvent.subject1.identifiedPerson));
                }
            }
        }