2011-12-14 65 views
2

我正在寫一個控制檯應用程序作爲httplistener並使用它通過jQuery和它的工作完全真實的,但我想將其轉換爲HTTPS,但我不知道的步驟HttpListener問題

這裏是我的代碼 我希望任何一個可以迅速解決這個問題

這是寫在JScript.js jQuery的代碼文件

$(function() { 
    //this code is executed when the page's onload event fires 
    $("#runSample1").click(function() { 
     var userNameJS = $("#uName").val(); 
     var passwordJS = $("#passw").val(); 
     $.post("http://localhost:80/", { userName: userNameJS, password: passwordJS }, function (data) { 
      alert(data); 
     }); 

    }); 
}); 

這是HTML頁面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <script type="text/javascript" src="Scripts/jquery-1.4.1.js"> </script> 

    <script type="text/javascript" src="Scripts/jquery-1.4.1.min.js"> </script> 
    <script type="text/javascript" src="Scripts/JScript.js"></script> 
    <script type="text/javascript" src="Scripts/jquery-1.4.1-vsdoc.js"></script> 
    <style type="text/css"> 
     .style1 { 
      width: 109px; 
     } 
    </style> 
</head> 
<body> 
<table> 

    <tr> 
     <td class="style1"><label >User Name</label></td> 
     <td><input id="uName" type="text" /></td> 
    </tr> 
    <tr> 
     <td class="style1"><label >Password</label></td> 
     <td><input id="passw" type="password" /></td> 
    </tr> 
    <tr> 
     <td class="style1"><input id="runSample1" type="button" value="Send" style="width: 62px"/> </td> 
    </tr> 
    </table> 
</body> 
</html> 

和httplistener代碼是

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Net; 
using System.Runtime.Serialization; 
using System.Runtime.Serialization.Json; 
using System.Threading; 
using System.Collections.Specialized; 
using System.Collections; 
using System.Security.Cryptography.X509Certificates; 
namespace TestApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (!HttpListener.IsSupported) 
      { 
       Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class."); 
       return; 
      } 
      // Create a listener. 
      HttpListener listener = new HttpListener(); 
      //listener.AuthenticationSchemes = AuthenticationSchemes.Negotiate; 
      listener.Prefixes.Add("http://*:8080/"); 
      //listener.AuthenticationSchemes 
      listener.Start(); 
      Console.WriteLine("Listening..."); 
      for (; ;) 
      { 
       HttpListenerContext ctx = listener.GetContext(); 
       new Thread(new Worker(ctx).ProcessRequest).Start(); 
      } 
     } 
    } 
    [DataContract] 
    internal class Person 
    { 
     [DataMember] 
     internal string name; 

     [DataMember] 
     internal int age; 
    } 
    class Worker 
    { 
     private HttpListenerContext context; 
     public Worker(HttpListenerContext context) 
     { 
      this.context = context; 
     } 

     public void ProcessRequest() 
     { 

      HttpListenerRequest request = context.Request; 
      List<Person> eList = new List<Person>(); 
      Hashtable formVars = new Hashtable(); 
      Person person; 
      for (int i = 0; i <= 10;i++) 
      { 
       person = new Person(); 
       person.name = "Pesron " + i; 
       person.age = i; 
       eList.Add(person); 
      } 
      HttpListenerResponse response = context.Response; 
      System.IO.StreamReader reader = new System.IO.StreamReader(request.InputStream, request.ContentEncoding); 
      // S contain parameters and values 
      string s = reader.ReadToEnd(); 
      string[] pairs = s.Split('&'); 
      for (int x = 0; x < pairs.Length; x++) 
      { 
       string[] item = pairs[x].Split('='); 
       formVars.Add(item[0],item[1]); 
      } 
      String userName = formVars["userName"].ToString(); 
      String password = formVars["password"].ToString(); 
      //To send any object as json to client 
      DataContractJsonSerializer jsonObject = new DataContractJsonSerializer(typeof(List<Person>)); 
      System.IO.Stream output = response.OutputStream; 
      MemoryStream ms = new MemoryStream(); 
      jsonObject.WriteObject(ms, eList); 
      byte[] buffer = ms.ToArray(); 
      response.ContentType = "text/plain"; 
      response.ContentEncoding = System.Text.UTF8Encoding.UTF8; 
      response.ContentLength64 = buffer.Length; 
      //These headers to allow all browsers to get the response 
      response.Headers.Add("Access-Control-Allow-Credentials", "true"); 
      response.Headers.Add("Access-Control-Allow-Origin", "*"); 
      response.Headers.Add("Access-Control-Origin", "*"); 
      //This line to write to the resonse 
      output.Write(buffer, 0, buffer.Length); 
      output.Close(); 
     } 
    } 
} 

回答

3

IE不沙箱本地主機。 FF和其他瀏覽器。他們將對本地主機的調用看作是對Web的調用,而這是不允許的。

你可以嘗試

Access-Control-Allow-Credentials: true 
Access-Control-Allow-Origin: * 
Access-Control-Origin: * 

添加到HttpListener的頭。爲什麼需要這個好文件可以建立here

+0

對不起,我沒有得到你的想法,但我想說的是,httplistener類已經在所有瀏覽器中獲得請求,但問題在於發送迴應字符串哪些Internet Explorer獲取和其他瀏覽器不 – fighter 2011-12-14 15:08:47