2013-07-08 2 views
1

Я создаю службу wcf и размещаю ее на окнах azure. Служба wcf является https. Когда я звоню в службу, клиенту требуется сертификат для проверки его подлинности.Позвоните в службу HTTPS WCF с аутентификацией сертификата

Когда я печатаю URL-адрес службы на broswer, он запрашивает подтверждающий сертификат и запускает serivce.

enter image description here

До сих пор так хорошо.

Теперь мне нужно получить доступ к той же службе в приложении MVC 4. Поэтому я сделал простой вызов ajax.

<script> 
$(document).ready(function() { 
    $("#GetAdjustedSalary").click(function() { 
     var salary = parseFloat($("#salary").val()); 
     var infalation = parseFloat($("#inflation").val()); 

     $.ajax({ 
      url: "https://newtonsheikh.cloudapp.net/SalaryService.svc/adjustedsalary?a=" + salary + "&b=" + infalation, 
      type: "GET", 
      dataType: "JSON", 
      contentType: "application/json", 
      success: function (data) { 
       alert(data); 
      } 

     }); 
    }); 
}); 
</script> 

Но я не получаю результат. Вместо этого я всегда получаю прервать ошибка 403.

enter image description here enter image description here

мне нужно написать что-то на файл web.config в приложении MVC ли? Я застрял и действительно нуждаюсь в помощи здесь.

Благодаря

ответ

1

Полученный раствор:

В Ajax вызова я сделал вызов к контроллеру

<script> 
$(document).ready(function() { 
    $("#GetAdjustedSalary").click(function() { 
     var salary = parseFloat($("#salary").val()); 
     var infalation = parseFloat($("#inflation").val()); 

     var object = { 
      salary: salary, 
      infalation: infalation 
     } 

     var data = JSON.stringify(object); 

     $.ajax({ 
      url: "Home/GetData/", 
      type: "POST", 
      data: data, 
      dataType: "JSON", 
      contentType: "application/json", 
      success: function (data) { 
       $("#answer").html(data); 
      } 

     }); 
    }); 
}); 

Затем в контроллере:

[HttpPost] 
    public ActionResult GetData(string salary, string infalation) 
    { 
     string output = ""; 

     try 
     { 
      X509Certificate Cert = X509Certificate.CreateFromCertFile("d://Cert//newton2.cer"); 

      ServicePointManager.CertificatePolicy = new CertPolicy(); 
      HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://newtonsheikh.cloudapp.net/SalaryService.svc/adjustedsalary?a="+salary+" &b="+infalation+""); 
      Request.ClientCertificates.Add(Cert); 
      Request.UserAgent = "Client Cert Sample"; 
      Request.Method = "GET"; 
      HttpWebResponse Response = (HttpWebResponse)Request.GetResponse(); 
      Console.WriteLine("{0}" + Response.Headers); 
      Console.WriteLine(); 

      StreamReader sr = new StreamReader(Response.GetResponseStream(), Encoding.Default); 
      int count; 

      char[] ReadBuf = new char[1024]; 
      do 
      { 
       count = sr.Read(ReadBuf, 0, 1024); 
       if (0 != count) 
       { 
        output += new string(ReadBuf); 
       } 

      } while (count > 0); 

     } 
     catch (Exception ex) 
     { 
      //Throw the exception...lol :P 
     } 

     output = output.Replace("\0", ""); 

     string jsonString = JsonConvert.SerializeObject(output, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); 

     return Json(jsonString, JsonRequestBehavior.AllowGet); 
    } 

Класс CertPolicy:

class CertPolicy : ICertificatePolicy 
{ 
    public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) 
    { 
     // You can do your own certificate checking. 
     // You can obtain the error values from WinError.h. 

     // Return true so that any certificate will work with this sample. 
     return true; 
    } 
} 
Смежные вопросы