JS:从服务器端调用API

时间:2017-06-06 05:45:27

标签: c# xml websocket server-side

以下JavaScript代码在旧的i9浏览器上正常工作,但在最新版本上没有。现在我想从服务器端调用API,因为由于跨域核心问题,此代码无法正常工作。

var xmlHttpDevice = new XMLHttpRequest();
xmlHttpDevice.open("DEVICEINFO", "http://127.0.0.1:" + PortNumber + "/getDeviceInfo", true);

xmlHttpDevice.onload = function (e) {
    if (xmlHttpDevice.readyState === 4) {
        if (xmlHttpDevice.status === 200) {
            alert(xmlHttpDevice.responseText);
        } else {
            alert(xmlHttpDevice.statusText);
        }
    }
};
xmlHttpDevice.onerror = function (e) {
    console.error(xmlHttpDevice.statusText);
};

var params = "rdverb=DEVICEINFO&URL=''";
xmlHttpDevice.send(params);

我的服务器端代码:

TcpClient socket = new TcpClient();
try
{
    // Call EndGetContext to complete the asynchronous operation.
    HttpListenerContext context = listener.EndGetContext(result);
    HttpListenerRequest request = context.Request;
    string strPortNumber = string.Empty;
    string strRDVerb = "";
    int PortNumberStartRange = 11099;

    result.AsyncWaitHandle.WaitOne();
    if (context.Request.InputStream != null)
    {
        var body = new StreamReader(context.Request.InputStream).ReadToEnd();
        GetPostedData(ref strPortNumber, ref strRDVerb, body);
    }
    else
    {
        strPortNumber = "12345";
        strRDVerb = "RDSERVICE";
    }

    if (strRDVerb != "RDSERVICE" && strRDVerb != "DEVICEINFO")
    {
        strRDVerb = "CAPTURE";
    }
    //var body = new StreamReader(context.Request.InputStream).ReadToEnd();
    string response = string.Empty;

    //Get the stream that will be used to send/receive data

    ExecuteRecoveryCode(ref socket, PortNumberStartRange);
    NetworkStream ns = socket.GetStream();

    //Write the HTTP Header info to the stream
    StreamWriter sw = new StreamWriter(ns);


    if (strRDVerb == "DEVICEINFO")
    {
        var message = "rdverb=DEVICEINFO&URL=''";
        //var data = System.Text.Encoding.ASCII.GetBytes(message);
        sw.Write(message, 0, message.Length);

        sw.WriteLine(string.Format(strRDVerb + " /getDeviceInfo HTTP/1.1"));
        sw.WriteLine(string.Format("HOST:127.0.0.1:11100"));

    }

    sw.Flush();

    //Save the data that lives in the stream 
    string packet = string.Empty;
    StreamReader sr = new StreamReader(ns);
    int count = 0;
    string EndString = string.Empty;
    GetServiceMethod(strRDVerb, ref count, ref EndString);
    for (int i = 0; i < count; i++)
    {
        packet = sr.ReadLine();
        response += packet;
    }

    HttpListenerResponse resp = context.Response;
    //byte[] buffer = System.Text.Encoding.UTF8.GetBytes("<HTML><BODY> " + response + EndString + "</BODY></HTML>");
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(response + EndString);

    resp.StatusDescription = response;
    resp.ContentLength64 = buffer.Length;
    System.IO.Stream output = resp.OutputStream;
    resp.StatusCode = (int)HttpStatusCode.OK;
    output.Write(buffer, 0, buffer.Length);
    output.Close();
    resp.Close();

}
catch (Exception ex)
{
    //throw ex;
}
finally
{
    socket.Close();
    listener.BeginGetContext(new AsyncCallback(OnRequestReceive), listener);
}

0 个答案:

没有答案