.NET與JSP頁面之間訊息通訊(跨域,使用html5的postMessage實現)

暖楓無敵發表於2016-04-11

最近.NET專案上使用JAVA專案中的jsp頁面,使用到跨域的資訊互動。

jsp端程式碼,通過監聽來自.NET專案所在IP地址,來請求.NET一般處理程式,實現jsp互動資訊儲存到.NET中:

window.addEventListener(`message`, function(event){
        // 通過origin屬性判斷訊息來源地址      
        if (event.origin == `http://192.168.11.195`) {
            if(event.data==`1`){
            	var xmlStr = getXmlStr();
            	  var sysId1= `1111222`;
            	    var userId1 = `22211112`;
            	    var menus1 = xmlStr;
            	    var callback1=`?`;
            	    var url = `http://192.168.11.195/BPMS/WebService/MessageExchange.ashx`;     
            	   $.ajax({
            	     url:url,    
            	     data: {sysId:sysId1,userId:userId1,menus:menus1,callback:callback1},
            	     dataType:`jsonp`,
            	     type:`post`,
            	      processData: true,
            	     success:function(data){
            	       alert(data);
            	     },
            	     error:function(XMLHttpRequest, textStatus, errorThrown) {
            	       alert(XMLHttpRequest.status);
            	       alert(XMLHttpRequest.readyState);
            	        }
            	     });
            } 
        }
    }, false);


.NET頁面程式碼,主要是通過向jsp端頁面傳送帶標記請求資訊:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Role_InfoOuter.aspx.cs" Inherits="AT.Web.ATBase.SysUser.Role_InfoOuter" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="../../Themes/Scripts/jquery-1.8.2.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#btn").click(function () {
                test();
            });


            function test() {
                var ifr = document.getElementById(`iframe`);
                var targetOrigin = `http://192.168.11.10:8080`;
                ifr.contentWindow.postMessage(`1`, targetOrigin);
            };


        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <iframe id="iframe" src="http://192.168.11.10:8080/ATMxgraphBS/grapheditor/Atgraphright.jsp"></iframe>
            <input type="button" value="儲存" id="btn" />
        </div>
    </form>
</body>
</html>


MessageExchange.ashx程式碼如下:


using AT.DataBase.SqlServer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;


namespace AT.Web.WebService
{
    /// <summary>
    /// MessageExchange 的摘要說明
    /// </summary>
    public class MessageExchange : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string callback = (context.Request["callback"] ?? "").ToString();
            string sysId = (context.Request["sysId"] ?? "").ToString();
            string userId = (context.Request["userId"] ?? "").ToString();
            string menu = (context.Request["menus"] ?? "").ToString();
            string msg = SaveMessage(sysId, userId, menu);
            context.Response.Write(msg);
            context.Response.End();
        }

        /// <summary>
        /// 儲存業務邏輯
        /// </summary>
        /// <param name="sysId"></param>
        /// <param name="userId"></param>
        public string SaveMessage(string sysId, string userId, string menu)
        {
            SqlServerHelper db = new SqlServerHelper("Server=192.168.11.201;Database=AT_UnifiedAuthorityDB;Uid=sa;Pwd=apesm;");
            StringBuilder sb = new StringBuilder();
            sb.Append("insert into Test(T1,T2,T3) values(`" + sysId + "`,`" + userId + "`,`" + menu + "`)");
            int cnt = db.ExecuteBySql(sb);
            if (cnt > 0)
            {
                return "OK";
            }
            else
            {
                return "NO";
            }
        }


        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}



相關文章