项目开发过程中需要和其他公司的数据对接,当时我们公司提供的是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. 4 WCF中的RPC和OneWay

    1 创建两个控制台项目 WcfService和WcfClient 在wcfService项目中新建一个wcf服务的文件项(HomeService)会自动附带生成一个IHomeService.cs的文件 ...

  2. OpenGL(十七) 绘制折线图、柱状图、饼图

    一.绘制折线图 glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j])函数可以绘制GLUT位图字符,第一个参数是GLUT中指定的特定字形集,第二个参数是要写 ...

  3. WPF 实现波浪浮动效果

    原文:WPF 实现波浪浮动效果 目标:实现界面图标Load时,整体图标出现上下波浪浮动效果,如下图: 前台代码: <Windowxmlns="http://schemas.micros ...

  4. WPF 窗体显示最前端

    原文:WPF 窗体显示最前端 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/jjx0224/article/details/8782845 如何做一 ...

  5. dumpbin判断windows程序是32还是64位(包括DLL)

    http://blog.csdn.net/csfreebird/article/details/10105681 dumpbin /HEADERS gdal18.dll(or xxx.exe) 如果安 ...

  6. C# 写CSV文件字符串前面0不显示的解决办法

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  7. Delphi 10.2可以开发Linux桌面应用了

    原始地址 https://community.embarcadero.com/blogs/entry/firemonkey-on-linux    Delphi Linux编译器已经发布,现在无需等待 ...

  8. laravel 增删修改

    1.查 public function userTest(){ return $this->all(); } public function userTest(){ return $this-& ...

  9. VC中出现“烫”和“屯”的原因(栈区的每一个字节都被0xCC填充了,也就是int 3h的机器码,动态分配的堆,VC的Debug用0xCD填充堆的空间,就出现了“屯”)

    相信经常用VC的朋友对屏幕输出的一大堆“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”不会陌生,但是也许会很奇怪,为什么会出现“烫”字呢?莫非改程序导致系统运行缓慢,发热过高???非也!下面让我解释 ...

  10. iOS9 Spotlight使用

    1.Spotloight是什么? Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotl ...