项目开发过程中需要和其他公司的数据对接,当时我们公司提供的是WebService,本地测试,都是好的,Ajax跨域请求,就报错,配置WebService过程中,花了不少功夫,入不少坑,不过最终问题还是解决啦~~~特意将完整开发步骤记录下来,以备下次勿犯,废话不多说,直接上源码!

第一步,右键,新建项,添加"web服务"

第二步:在webservice项目的web.config中添加如下配置,缺一不可:

 <system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
<add name="HttpSoap"/>
<add name="Documentation"/>
</protocols>
</webServices>
</system.web>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
<add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/>
<add name="Access-Control-Allow-Origin" value="*"/>
</customHeaders>
</httpProtocol>
</system.webServer>

注意事项

第三步:写接口函数(以下仅供参考)

     #endregion
/// <summary>
/// 实体类
/// </summary>
public class TaskList {
public string taskCode { get; set; }
public string ACTUAL_START { get; set; }
public string ACTUAL_END { get; set; }
}
/// <summary>
/// 返回值
/// </summary>
public class ret
{
public string success { get; set; }
public string msg { get; set; }
}
/// <summary>
/// 生产任务完成情况
/// </summary>
/// <param name="taskCode">生产任务号</param>
/// <param name="ACTUAL_START">实际开始时间</param>
/// <param name="ACTUAL_END">实际结束时间</param>
/// <returns>1:成功;0:失败</returns>
[WebMethod(Description="生产任务完成情况")]
public String GetTaskInfo(string jsonDate)
{
TaskList model = JsonUtil.JsonStrToObject<TaskList>(jsonDate);
ret obj = new ret();
try
{
if (model.taskCode.Trim() ==null)
{
obj.success = "false";
obj.msg = "生产任务号为空!";
return JsonConvert.SerializeObject(obj);
}
if (model.ACTUAL_START.Trim() == null)
{
obj.success = "false";
obj.msg = "实际开始时间为空!";
return JsonConvert.SerializeObject(obj);
}
if (model.ACTUAL_END.Trim() == null)
{
obj.success = "false";
obj.msg = "实际结束时间为空!";
return JsonConvert.SerializeObject(obj);
}
DateTime.Parse(model.ACTUAL_START);
DateTime.Parse(model.ACTUAL_END);
List<string> list = new List<string>();
string editSql = "UPDATE EMES_PL_TASK_LIST SET ACTUAL_START=TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS'),ACTUAL_END=TO_DATE('{1}','YYYY-MM-DD HH24:MI:SS') WHERE TASK_ID='{2}'";
list.Add(string.Format(editSql, model.ACTUAL_START, model.ACTUAL_END, model.taskCode));
#region 接口操作日志
string addSql = "INSERT INTO EMES_PL_TASK_LIST_LOG (TASK_CODE,ACTUAL_START,ACTUAL_END,DEF_DATA) VALUES ('{0}','{1}','{2}',TO_DATE('{3}','YYYY-MM-DD HH24:MI:SS'))";
list.Add(string.Format(addSql, model.taskCode, model.ACTUAL_START, model.ACTUAL_END,DateTime.Now));
#endregion int ret = DbUtil.ExecuteSqlTran(list);
if (ret > )
{
obj.success = "true";
obj.msg = "";
return JsonConvert.SerializeObject(obj);
}
else
{
obj.success = "false";
obj.msg = "生产任务号不存在,数据未同步!";
return JsonConvert.SerializeObject(obj);
}
}
catch (Exception ex)
{
obj.success = "false";
obj.msg = ex.Message;
return JsonConvert.SerializeObject(obj);
}
}

第四步:网页测试接口

Ajax调用测试接口示例

 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Access-Control-Allow-Origin" content="*" />
<title></title>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$("#getdata").click(function () {
var dataStock = { taskCode: "1238", ACTUAL_START: "2019-6-1", ACTUAL_END: "2019/5/19 22:09:37" };
$.ajax({
url: "http://localhost:16340/webService/eCimsService.asmx/GetTaskInfo",
type: 'POST',
data:'jsonDate='+JSON.stringify(dataStock),
success: function (res) {
var js =JSON.parse($(res).text()) //将xml转json
debugger;
console.log(js.success);
},
error: function (err) {
debugger;
console.log(err);
}
});
});
});
</script>
</head>
<body>
<a id="getdata" href="javascript:void(0);">获取webservice数据</a>
<div id="data"></div>
</body>
</html>

注:后台默认传json类型,到前台后,WebService自动转成了XML格式,需转换下数据类型JSON.parse(str)

跨域访问WebService搞定!

WebService跨域配置、Ajax跨域请求、附开发过程源码的更多相关文章

  1. SpringBoot学习入门之Hello项目的构建、单元测试和热部署等(配图文,配置信息详解,附案例源码)

    前言: 本文章主要是个人在学习SpringBoot框架时做的一些准备,参考老师讲解进行完善对SpringBoot构建简单项目的学习汇集成本篇文章,作为自己对SpringBoot框架的总结与笔记. 你将 ...

  2. session跨域和ajax跨域名

    后台跨域和ajax跨域名: 后台跨域: www.baidu.com   主域名(一级域名一般以www开头) news.baidu.com   二级域名 (a.test.com和b.test.com有相 ...

  3. DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render

    DRF框架    全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...

  4. drf复习(一)--原生djangoCBV请求生命周期源码分析、drf自定义配置文件、drf请求生命周期dispatch源码分析

    admin后台注册model  一.原生djangoCBV请求生命周期源码分析 原生view的源码路径(django/views/generic/base.py) 1.从urls.py中as_view ...

  5. APIview的请求生命周期源码分析

    目录 APIview的请求生命周期源码分析 请求模块 解析模块 全局配置解析器 局部配置解析器 响应模块 异常处理模块 重写异常处理函数 渲染模块 APIview的请求生命周期源码分析 Django项 ...

  6. dubbo 配置 loadbalance 不生效?撸一把源码

    背景 很久之前我给业务方写了一个 dubbo loadbalance 的扩展(为了叙述方便,这个 loadbalance 扩展就叫它 XLB 吧),这两天业务方反馈说 XLB 不生效了 我心想,不可能 ...

  7. tomcat 下配置ajax 跨域 tomcat font face 跨域 java跨域

    tomcat  ajax跨域和css字体 font face  跨域一样适用 CORS介绍 它在维基百科上的定义是:跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式 ...

  8. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  9. 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

随机推荐

  1. eclipse中JUnit工具的使用

  2. Jquery对象和dom对象获取html的方法

    1)DOM对象 var domObj = document.getElementById("id"); //DOM对象 domObj.innerHTML;// domObj.out ...

  3. Extensible Access Control List Framework

    Methods, systems, and products for governing access to objects on a filesystem. In one general embod ...

  4. [Unity3D]Unity3D游戏开发Lua随着游戏的债券(在)

    ---------------------------------------------------------------------------------------------------- ...

  5. Hadoop入门实验

    一.实验目的 了解Hadoop的MapeReduce工作原理 二.实验内容 实现基于单机的伪分布式运行模拟 三.实验需要准备的软件和源 1.Jdk1.6以上 下载地址:http://www.oracl ...

  6. WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容

    原文:WPF实现选项卡效果(3)--自定义动态添加的AvalonDock选项卡内容 简介 在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任 ...

  7. 【转载】如何使用docker部署c/c++程序

    原文地址:https://blog.csdn.net/len_yue_mo_fu/article/details/80189035 Docker介绍 Docker是一个开源的容器引擎,它有助于更快地交 ...

  8. ubuntu16.04安装搜狗输入法

    安装完Ubuntu 16.04后,要更换为国内的软件源: Ali-OSM Alibaba Open Source Mirror Site Home About Join Us Ubuntu 1.软件包 ...

  9. 微信小程序入门-指南针

    微信小程序提供了众多的原生API接口,利用罗盘接口,做了个简单的指南针小程序,搜索小程序[X的实验室]可看效果. 实现方案 利用罗盘接口返回的[数据],转化为指南针偏移量[度数],利用CSS3 tra ...

  10. Win8 Metro(C#)数字图像处理--2.61哈哈镜效果

    原文:Win8 Metro(C#)数字图像处理--2.61哈哈镜效果  [函数名称] 哈哈镜效果函数  WriteableBitmap DistortingMirrorProcess(Writea ...