WebService使用还是比较广泛的,这里我们来介绍两种跨域请求调用WebService的方法。

首先我们来介绍下什么是WebService,Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。简单的理解就是:webservice就是放在服务器上的函数,所有人都可以调用的一个公共接口。

Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。

WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。

UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

我们来介绍第一种跨域调用WebService,使用服务器引用

右键点击引用--服务器引用--高级--添加web引用

这里我们就可以看到一个Web References文件夹,这里就是放的我们调用的WebService,这个引用里面已经帮我们生成好了方法,我们只要实例化然后调用即可,然后我们调用它的方法,请求它里面的接口。

首先我们引用这个红方框里面的,然后实例化这个椭圆框,接着调用里面的接口

using BLL.sfzxWebServerApi;
namespace BLL
{public class WX_IndexBLL{WebSiteServiceApi api = new WebSiteServiceApi();public void GetFriendshiplist(int language){var apistr = api.GetFriendshipLink(language, companyId);}}
}

对,这就是第一种方式,就这么简单,接下来使用第二种方式,不使用服务引用

看代码:

    public class WebSvcCaller{//缓存xmlNamespace,避免重复调用GetNamespaceprivate static Hashtable _xmlNamespaces = new Hashtable();/// <summary>/// 通用WebService调用(Soap),参数Pars为String类型的参数名、参数值/// </summary>public static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars){if (_xmlNamespaces.ContainsKey(URL)){return QuerySoapWebService(URL, MethodName, Pars, _xmlNamespaces[URL].ToString());}else{return QuerySoapWebService(URL, MethodName, Pars, GetNamespace(URL));}}private static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars, string XmlNs){_xmlNamespaces[URL] = XmlNs;HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);request.Method = "POST";request.ContentType = "text/xml; charset=utf-8";request.Headers.Add("SOAPAction", "\"" + XmlNs + (XmlNs.EndsWith("/") ? "" : "/") + MethodName + "\"");SetWebRequest(request);byte[] data = EncodeParsToSoap(Pars, XmlNs, MethodName);WriteRequestData(request, data);XmlDocument doc = new XmlDocument(), doc2 = new XmlDocument();doc = ReadXmlResponse(request.GetResponse());XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);mgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");String RetXml = doc.SelectSingleNode("//soap:Body/*/*", mgr).InnerXml;doc2.LoadXml("<root>" + RetXml + "</root>");AddDelaration(doc2);return doc2;}/// <summary>/// 需要WebService支持Post调用/// </summary>public static XmlDocument QueryPostWebService(String URL, String MethodName, Hashtable Pars){HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName);request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";SetWebRequest(request);byte[] data = EncodePars(Pars);WriteRequestData(request, data);return ReadXmlResponse(request.GetResponse());}/// <summary>/// 需要WebService支持Get调用/// </summary>public static XmlDocument QueryGetWebService(String URL, String MethodName, Hashtable Pars){HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName + "?" + ParsToString(Pars));request.Method = "GET";request.ContentType = "application/x-www-form-urlencoded";SetWebRequest(request);return ReadXmlResponse(request.GetResponse());}private static string GetNamespace(String URL){HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL + "?WSDL");SetWebRequest(request);WebResponse response = request.GetResponse();StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);XmlDocument doc = new XmlDocument();doc.LoadXml(sr.ReadToEnd());sr.Close();return doc.SelectSingleNode("//@targetNamespace").Value;}private static byte[] EncodeParsToSoap(Hashtable Pars, String XmlNs, String MethodName){XmlDocument doc = new XmlDocument();doc.LoadXml("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"></soap:Envelope>");AddDelaration(doc);XmlElement soapBody = doc.CreateElement("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");XmlElement soapMethod = doc.CreateElement(MethodName);soapMethod.SetAttribute("xmlns", XmlNs);foreach (string k in Pars.Keys){XmlElement soapPar = doc.CreateElement(k);soapPar.InnerXml = ObjectToSoapXml(Pars[k]);soapMethod.AppendChild(soapPar);}soapBody.AppendChild(soapMethod);doc.DocumentElement.AppendChild(soapBody);return Encoding.UTF8.GetBytes(doc.OuterXml);}private static string ObjectToSoapXml(object o){XmlSerializer mySerializer = new XmlSerializer(o.GetType());MemoryStream ms = new MemoryStream();mySerializer.Serialize(ms, o);XmlDocument doc = new XmlDocument();doc.LoadXml(Encoding.UTF8.GetString(ms.ToArray()));if (doc.DocumentElement != null){return doc.DocumentElement.InnerXml;}else{return o.ToString();}}private static void SetWebRequest(HttpWebRequest request){request.Credentials = CredentialCache.DefaultCredentials;request.Timeout = 10000;}private static void WriteRequestData(HttpWebRequest request, byte[] data){request.ContentLength = data.Length;Stream writer = request.GetRequestStream();writer.Write(data, 0, data.Length);writer.Close();}private static byte[] EncodePars(Hashtable Pars){return Encoding.UTF8.GetBytes(ParsToString(Pars));}private static String ParsToString(Hashtable Pars){StringBuilder sb = new StringBuilder();foreach (string k in Pars.Keys){if (sb.Length > 0){sb.Append("&");}}return sb.ToString();}private static XmlDocument ReadXmlResponse(WebResponse response){StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);String retXml = sr.ReadToEnd();sr.Close();XmlDocument doc = new XmlDocument();doc.LoadXml(retXml);return doc;}private static void AddDelaration(XmlDocument doc){XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);doc.InsertBefore(decl, doc.DocumentElement);}

然后调用:

 private static Hashtable _xmlNamespaces = new Hashtable();//缓存xmlNamespace,避免重复调用GetNamespaceprotected XmlDocument xx;protected void Page_Load(object sender, EventArgs e){Hashtable ht = new Hashtable();ht.Add("language", "1");ht.Add("companyId", "9006cc76-7ec7-4c79-9469-f8e4ef2af6b4");string URL = "http://www.xxxxxx.com/WebService/WebSiteServiceApi.asmx";xx = WebSvcCaller.QuerySoapWebService(URL, "GetFriendshipLink", ht);}

跨域调用WebService相关推荐

  1. js php调用webservice,js跨域调用WebService的使用方法

    这次给大家带来js跨域调用WebService的使用方法,js跨域调用WebService的注意事项有哪些,下面就是实战案例,一起来看一下. 步骤1. 在web.config中的system.web节 ...

  2. vue 调用webservice_js跨域调用WebService的简单实例

    步骤1. 在web.config中的system.web节点里加入 步骤2.webservice代码 using System; using System.Collections.Generic; u ...

  3. jquery跨域调用webService

    jquery跨域调用webService,以及解决跨域情况下只能返回XMl格式数据的问题 http://lu.9efish.com/blog/jquery-cross-domain-call-asp. ...

  4. WCF 4.0 REST Service JSON跨域调用

    最近在项目中用到了 WCF4.0 REST.在跨域调用时走了不少弯路,查了不少技术强人的文章,其实它真的就这么容易.好了不废话了直接贴代码. 调用的服务类:  1     [ServiceContra ...

  5. 解决js跨域调用WebApi的问题

    解决js跨域调用WebApi的问题 参考文章: (1)解决js跨域调用WebApi的问题 (2)https://www.cnblogs.com/qubernet/p/6396295.html 备忘一下 ...

  6. jquery跨域调用wcf

    使用jquery跨域调用wcf服务的时候会报如下错误 1 $.ajax({ 2 url: 'http://localhost:28207/Service1.svc/GetData', 3 method ...

  7. linux c调用wcf服务,Silverlight+WCF实现跨域调用

    在这篇文章中,WCF扮演服务器,向外提供LoginVaild服务:Silverlight扮演客户端,调用WCF提供的LoginVaild服务.思路有了,下面进行代码实现. 数据库脚本实现 新建T_Us ...

  8. 关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案

    问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模板创建一个最简单的ASP.NET Web ...

  9. jQuery跨域调用Web API

    我曾经发表了一篇关于如何开发Web API的博客,链接地址:http://www.cnblogs.com/guwei4037/p/3603818.html.有朋友说开发是会开发了,但不知道怎么调用啊? ...

最新文章

  1. 差异分析完整解决方案-EasyAovWlxPlot使用指南
  2. 程序员数学基础【六、枚举 区块链,虚拟币种、币包约束,内环版本】(Java版本)
  3. 看AppStore评价
  4. 前端学习(2457):文章发布
  5. WebLogic域的创建与发布
  6. HTML+CSS+JS实现 ❤️酷炫彩虹旋转隧道特效❤️
  7. 疑问:当流量被封禁之后(论资本之力):防流量被恶意盗挖(抛砖篇)
  8. sqlserver 字符转数值_PLC根据寄存器数值查询MySQL/SQLServer数据库,将数据到寄存器...
  9. while正逆序的测试结果
  10. 爱情测试MySQL存储_性能测试四十:Mysql存储过程造数据
  11. 【LaTeX】复杂表格的制作:Excel2LaTeX及细节调整
  12. 阿里云图片服务器OSS对象存储器使用方法(附详细步骤)
  13. 三千书源——愿成为整理最全的书源合集
  14. 蓝牙协议分析(6)_BLE地址类型
  15. 2010年计算机考研选择题解析,2009-2010计算机考研真题及答案(含选择题解析)WORD高清晰版.pdf...
  16. 小白程序员应避免的错误
  17. 阿里天池大数据竞赛第一名,如何用AI检测肺癌
  18. MySQl排序,别名
  19. Asus EeePC X101上网本为MeeGo带来新的生机
  20. 程序员 - 算法工程师 日常快捷入口大全

热门文章

  1. (软件工程复习核心重点)第二章可行性研究-第四节:数据字典
  2. qt中tinyxml2的基本使用方法
  3. 1019. 链表中的下一个更大节点
  4. Python函数传入的参数是否改变(函数参数、指针、引用)
  5. C/C++获取当前路径、获取任意pid完整路径(readlink()函数)
  6. 解决oracle数据库连接不上的问题
  7. sql server 触发器应用 insert
  8. 逆序创建链表及链表反转和中间位置反转
  9. pt-online-schema-change 修改主键导致数据删除失败的问题调查
  10. 在plist文件中增删改查