private static PublicKeyResponse GetPublicKeyMessageId()
        {
            PublicKeyResponse resp = new PublicKeyResponse();

            try
            {
                HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, _publicKeyServiceUri);
                requestMessage.Headers.ExpectContinue = false;
                HttpClient httpClient = new HttpClient();
                httpClient.Timeout = new TimeSpan(0, 10, 0);
                Task <HttpResponseMessage> httpRequest = httpClient.SendAsync(requestMessage,
                                                                              HttpCompletionOption.ResponseContentRead, CancellationToken.None);
                HttpResponseMessage httpResponse    = httpRequest.Result;
                HttpStatusCode      statusCode      = httpResponse.StatusCode;
                HttpContent         responseContent = httpResponse.Content;
                if (responseContent != null)
                {
                    Task <String> stringContentsTask = responseContent.ReadAsStringAsync();
                    String        stringContents     = stringContentsTask.Result.Replace("$", string.Empty);
                    XmlDocument   doc           = (XmlDocument)JsonConvert.DeserializeXmlNode(stringContents, "root");
                    XmlElement    root          = doc.DocumentElement;
                    XmlNode       messageIdNode = root.SelectSingleNode("MessageId");
                    resp.MessageId = Guid.Parse(doc.DocumentElement.SelectSingleNode("MessageId").InnerText);
                    RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
                    rsaProvider.FromXmlString(doc.DocumentElement.SelectSingleNode("PublicKeyXml").InnerXml);
                    resp.RsaPublicKey = rsaProvider;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return(resp);
        }
        static void Main(string[] args)
        {
            PublicKeyResponse publicKeyResponse = GetPublicKeyMessageId();

            if (publicKeyResponse.MessageId != null && publicKeyResponse.RsaPublicKey != null)
            {
                Console.Write("Public key request successful. Enter your message: ");
                string message = Console.ReadLine();
                SymmetricAlgorithmService   symmetricService          = new SymmetricAlgorithmService();
                SymmetricEncryptionResult   symmetricEncryptionResult = symmetricService.Encrypt(message);
                AsymmetricEncryptionService asymmetricService         = new AsymmetricEncryptionService(publicKeyResponse.RsaPublicKey);
                string encryptedAesPublicKey         = asymmetricService.GetCipherText(ConfigurationManager.AppSettings["RijndaelManagedKey"]);
                SendMessageArguments sendMessageArgs = new SendMessageArguments()
                {
                    EncryptedPublicKey      = encryptedAesPublicKey,
                    SymmetricEncryptionArgs = symmetricEncryptionResult, MessageId = publicKeyResponse.MessageId
                };
                string jsonifiedArgs = JsonConvert.SerializeObject(sendMessageArgs);
                SendSecretMessageToReceiver(jsonifiedArgs);
            }
            else
            {
                Console.WriteLine("Public key request failed.");
            }
            Console.ReadKey();
        }