/// <summary>
        /// Get a list of messages that are available for retrieval.
        /// </summary>
        /// <param name="listRequest">The parameters for the list operation.</param>
        /// <param name="endpointUrl">The endpoint URL for the SMR service.</param>
        /// <returns>A list of available messages.</returns>
        public MessageListType List(list listRequest, Uri endpointUrl)
        {
            Validation.ValidateArgumentRequired("listRequest", listRequest);
            Validation.ValidateArgumentRequired("endpointUrl", endpointUrl);
            Validation.ValidateArgumentRequired("listRequest.receiverOrganisation", listRequest.receiverOrganisation);

            if (smrClient is Nehta.SMD2010.SMR.SealedMessageRetrievalClient)
            {
                Nehta.SMD2010.SMR.SealedMessageRetrievalClient client = (Nehta.SMD2010.SMR.SealedMessageRetrievalClient)smrClient;
                client.Endpoint.Address = new EndpointAddress(endpointUrl);
            }

            listRequest request = new listRequest();

            request.list = listRequest;

            listResponse1 response = smrClient.list(request);

            if (response != null && response.listResponse != null)
            {
                return(response.listResponse.list);
            }
            else
            {
                throw new ApplicationException(Properties.Resources.UnexpectedServiceResponse);
            }
        }
        /// <summary>
        /// Retrieve a list of Sealed Messages.
        /// </summary>
        /// <param name="retrieveRequest">The parameters for the retrieve operation.</param>
        /// <param name="endpointUrl">The endpoint URL for the SMR service.</param>
        /// <returns>A list of Sealed Messages.</returns>
        public SealedMessageType[] Retrieve(retrieve retrieveRequest, Uri endpointUrl)
        {
            Validation.ValidateArgumentRequired("retrieveRequest", retrieveRequest);
            Validation.ValidateArgumentRequired("endpointUrl", endpointUrl);

            Validation.ValidateArgumentRequired("retrieveRequest.receiverOrganisation", retrieveRequest.receiverOrganisation);
            Validation.ValidateArgumentRequired("retrieveRequest.invocationId", retrieveRequest.invocationId);

            if (smrClient is Nehta.SMD2010.SMR.SealedMessageRetrievalClient)
            {
                Nehta.SMD2010.SMR.SealedMessageRetrievalClient client = (Nehta.SMD2010.SMR.SealedMessageRetrievalClient)smrClient;
                client.Endpoint.Address = new EndpointAddress(endpointUrl);
            }

            retrieveRequest request = new retrieveRequest();

            request.retrieve = retrieveRequest;

            retrieveResponse response = smrClient.retrieve(request);

            if (response != null)
            {
                return(response.retrieveResponse1);
            }
            else
            {
                throw new ApplicationException(Properties.Resources.UnexpectedServiceResponse);
            }
        }
        /// <summary>
        /// Initializes an instance of the SealedMessageRetrievalClient.
        /// </summary>
        /// <param name="configurationName">Endpoint configuration name for the SMR endpoint.</param>
        /// <param name="tlsCert">The client certificate to be used to establish the TLS connection.</param>
        private void InitializeClient(string configurationName, X509Certificate2 tlsCert)
        {
            this.smrMessages = new SoapInspector.SoapMessages();

            Nehta.SMD2010.SMR.SealedMessageRetrievalClient client = null;
            if (!string.IsNullOrEmpty(configurationName))
            {
                client = new Nehta.SMD2010.SMR.SealedMessageRetrievalClient(configurationName);
            }
            else
            {
                EndpointAddress address    = new EndpointAddress("http://ns.electronichealth.net.au");
                CustomBinding   tlsBinding = GetBinding();
                client = new Nehta.SMD2010.SMR.SealedMessageRetrievalClient(tlsBinding, address);
            }

            if (client != null)
            {
                SoapInspector.InspectEndpoint(client.Endpoint, smrMessages);
                client.ClientCredentials.ClientCertificate.Certificate = tlsCert;
                smrClient = client;
            }
        }