webServices 应该支持Get和Post调用,在web.config应该增加以下代码

  1         #region Tip:使用说明
  2         //webServices 应该支持Get和Post调用,在web.config应该增加以下代码
  3         //<webServices>
  4         //  <protocols>
  5         //    <add name="HttpGet"/>
  6         //    <add name="HttpPost"/>
  7         //  </protocols>
  8         //</webServices>
  9
 10         //调用示例:
 11         //Hashtable ht = new Hashtable();  //Hashtable 为webservice所需要的参数集
 12         //ht.Add("str", "test");
 13         //ht.Add("b", "true");
 14         //XmlDocument xx = WebSvcCaller.QuerySoapWebService("http://localhost:81/service.asmx", "HelloWorld", ht);
 15         //MessageBox.Show(xx.OuterXml);
 16         #endregion
 17
 18         /// <summary>
 19         /// 需要WebService支持Post调用
 20         /// </summary>
 21         public static XmlDocument QueryPostWebService(string URL, string MethodName, Hashtable Pars)
 22         {
 23             HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName);
 24             request.Method = "POST";
 25             request.ContentType = "application/x-www-form-urlencoded";
 26             SetWebRequest(request);
 27             byte[] data = EncodePars(Pars);
 28             WriteRequestData(request, data);
 29             return ReadXmlResponse(request.GetResponse());
 30         }
 31
 32         /// <summary>
 33         /// 需要WebService支持Get调用
 34         /// </summary>
 35         public static XmlDocument QueryGetWebService(String URL, String MethodName, Hashtable Pars)
 36         {
 37             HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName + "?" + ParsToString(Pars));
 38             request.Method = "GET";
 39             request.ContentType = "application/x-www-form-urlencoded";
 40             SetWebRequest(request);
 41             return ReadXmlResponse(request.GetResponse());
 42         }
 43
 44         /// <summary>
 45         /// 通用WebService调用(Soap),参数Pars为String类型的参数名、参数值
 46         /// </summary>
 47         public static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars)
 48         {
 49             if (_xmlNamespaces.ContainsKey(URL))
 50             {
 51                 return QuerySoapWebService(URL, MethodName, Pars, _xmlNamespaces[URL].ToString());
 52             }
 53             else
 54             {
 55                 return QuerySoapWebService(URL, MethodName, Pars, GetNamespace(URL));
 56             }
 57         }
 58
 59         private static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars, string XmlNs)
 60         {
 61             _xmlNamespaces[URL] = XmlNs;//加入缓存,提高效率
 62             HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
 63             request.Method = "POST";
 64             request.ContentType = "text/xml; charset=utf-8";
 65             request.Headers.Add("SOAPAction", "\"" + XmlNs + (XmlNs.EndsWith("/") ? "" : "/") + MethodName + "\"");
 66             SetWebRequest(request);
 67             byte[] data = EncodeParsToSoap(Pars, XmlNs, MethodName);
 68             WriteRequestData(request, data);
 69             XmlDocument doc = new XmlDocument(), doc2 = new XmlDocument();
 70             doc = ReadXmlResponse(request.GetResponse());
 71
 72             XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
 73             mgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
 74             String RetXml = doc.SelectSingleNode("//soap:Body/*/*", mgr).InnerXml;
 75             doc2.LoadXml("<root>" + RetXml + "</root>");
 76             AddDelaration(doc2);
 77             return doc2;
 78         }
 79         private static string GetNamespace(String URL)
 80         {
 81             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL + "?WSDL");
 82             SetWebRequest(request);
 83             WebResponse response = request.GetResponse();
 84             StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
 85             XmlDocument doc = new XmlDocument();
 86             doc.LoadXml(sr.ReadToEnd());
 87             sr.Close();
 88             return doc.SelectSingleNode("//@targetNamespace").Value;
 89         }
 90
 91         private static byte[] EncodeParsToSoap(Hashtable Pars, String XmlNs, String MethodName)
 92         {
 93             XmlDocument doc = new XmlDocument();
 94             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>");
 95             AddDelaration(doc);
 96             //XmlElement soapBody = doc.createElement_x_x("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
 97             XmlElement soapBody = doc.CreateElement("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
 98             //XmlElement soapMethod = doc.createElement_x_x(MethodName);
 99             XmlElement soapMethod = doc.CreateElement(MethodName);
100             soapMethod.SetAttribute("xmlns", XmlNs);
101             foreach (string k in Pars.Keys)
102             {
103                 //XmlElement soapPar = doc.createElement_x_x(k);
104                 XmlElement soapPar = doc.CreateElement(k);
105                 soapPar.InnerXml = ObjectToSoapXml(Pars[k]);
106                 soapMethod.AppendChild(soapPar);
107             }
108             soapBody.AppendChild(soapMethod);
109             doc.DocumentElement.AppendChild(soapBody);
110             return Encoding.UTF8.GetBytes(doc.OuterXml);
111         }
112         private static string ObjectToSoapXml(object o)
113         {
114             XmlSerializer mySerializer = new XmlSerializer(o.GetType());
115             MemoryStream ms = new MemoryStream();
116             mySerializer.Serialize(ms, o);
117             XmlDocument doc = new XmlDocument();
118             doc.LoadXml(Encoding.UTF8.GetString(ms.ToArray()));
119             if (doc.DocumentElement != null)
120             {
121                 return doc.DocumentElement.InnerXml;
122             }
123             else
124             {
125                 return o.ToString();
126             }
127         }
128
129         /// <summary>
130         /// 设置凭证与超时时间
131         /// </summary>
132         /// <param name="request"></param>
133         private static void SetWebRequest(HttpWebRequest request)
134         {
135             request.Credentials = CredentialCache.DefaultCredentials;
136             request.Timeout = 10000;
137         }
138
139         private static void WriteRequestData(HttpWebRequest request, byte[] data)
140         {
141             request.ContentLength = data.Length;
142             Stream writer = request.GetRequestStream();
143             writer.Write(data, 0, data.Length);
144             writer.Close();
145         }
146
147         private static byte[] EncodePars(Hashtable Pars)
148         {
149             return Encoding.UTF8.GetBytes(ParsToString(Pars));
150         }
151
152         private static String ParsToString(Hashtable Pars)
153         {
154             StringBuilder sb = new StringBuilder();
155             foreach (string k in Pars.Keys)
156             {
157                 if (sb.Length > 0)
158                 {
159                     sb.Append("&");
160                 }
161                 //sb.Append(HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(Pars[k].ToString()));
162             }
163             return sb.ToString();
164         }
165
166         private static XmlDocument ReadXmlResponse(WebResponse response)
167         {
168             StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
169             String retXml = sr.ReadToEnd();
170             sr.Close();
171             XmlDocument doc = new XmlDocument();
172             doc.LoadXml(retXml);
173             return doc;
174         }
175
176         private static void AddDelaration(XmlDocument doc)
177         {
178             XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
179             doc.InsertBefore(decl, doc.DocumentElement);
180         }
181
182         private static Hashtable _xmlNamespaces = new Hashtable();//缓存xmlNamespace,避免重复调用GetNamespace

时间: 2024-08-11 10:28:13

webServices 应该支持Get和Post调用,在web.config应该增加以下代码的相关文章

当当网开源Dubbox,扩展Dubbo服务框架支持REST风格远程调用

当当网近日开源了Dubbox项目,可为Dubbo服务框架提供多项扩展功能,包括REST风格远程调用.Kryo/FST序列化等等. 当当网架构部和技术委员会架构师沈理向InfoQ中文站介绍了Dubbox项目,开发背景和主要特点描述如下: Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的SOA基础框架.作为一个重要的技术研究课题,在当当网我们根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox(即Dubbo eXtensi

ajax调用WebServices服务方法和传参调用WebServices注意事项

先演示下ajax是如何调用WebServices中的方法    1.新建一个页面default.aspx,一个Web服务    在页面中引用jQuery文件. <script src="../Scripts/jquery-1.4.1.js" type="text/javascript"></script> web服务里给Helloworld方法里加个参数 using System; using System.Collections.Gener

JAVA与.NET的相互调用——通过Web服务实现相互调用

JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候对另一种语言感觉到畏惧.在这里在下向各位介绍一下,JAVA与.NET相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 在这章里面先为大家介绍一下最简单,最常用的Web服务相互调用方式.首先

iPad上用Codea-SCM调用git web services做版本管理

iPad上用Codea-SCM调用git web services做版本管理 目录 说明 安装 Codea-SCM 远端代码仓库设置 本地 Codea-SCM 设置 说明 在 iPad 上使用 Codea 做项目开发,虽然调试.修改代码很方便,但是有一点比较麻烦,就是 Codea 无法做版本管理,所以有时修改错了,想回退到之前的稳定版本,就没办法了,只能手动保存每个版本的代码. 现在有一种方法可以把 Codea 的项目自动提交到 git 服务器上,可以非常方便地管理你的不同版本. 安装 Code

转载——Java与WCF交互(二):WCF客户端调用Java Web Service

在上篇< Java与WCF交互(一):Java客户端调用WCF服务>中,我介绍了自己如何使用axis2生成java客户端的悲惨经历.有同学问起使用什么协议,经初步验证,发现只有wsHttpBinding可行,而NetTcpBinding不可行,具体原因待查.昨晚回去重新测试WCF客户端调用Java Web Service,并将过程公布如下: 其实本不需要做web service,只是原来公开的经典的Web service像(http://soapinterop.java.sun.com/rou

分享一个Android和java调用RESTful Web服务的利器Resting

分享一个Android和java调用RESTful Web服务的利器Resting 当我们调用Web服务,往往是最终目标是取HTTP响应,将其转化为将在应用中呈现的值对象.Resting可以用来实现这一功能.Resting,在Java的一个轻量级的REST框架,可用于调用一个RESTful Web服务,并转换成响应来自客户端应用程序定制的Java对象.由于它的简单,resting是适合Android等手持设备. resting目标?暴露简单的get(),post(),put()和delete()

调用新浪微博接口,实现“分享”功能——代码实现

<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div> <p>点击下面的按钮可以将这段文字和图片分享到新浪微博哦!@独行冰海</p> <img src='http://t.cn/zRxMzZE' title='独

翻译-使用Spring调用SOAP Web Service

原文链接: http://spring.io/guides/gs/consuming-web-service/ 调用SOAP web service 本指南将指导你使用Spring调用一个基于SOAP的web service的整个过程. 指南内容 你将构建一个客户端,使用SOAP用来从远端的基于WSDL的web service获取天气数据.请访问http://wiki.cdyne.com/index.php/CDYNE_Weather进一步获取该天气服务的信息. 该服务根据邮编返回天气预测.你可

如何调用另一个python文件中的代码

如何调用另一个python文件中的代码 无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了"hello world"),通常情况下,我们都需要在一个文件中调用另外一个文件的函数呀数据等等,总之要操作其他文件中的代码,在java中,只要在同一个文件目录下,我们就不需要通过import导入,但是在Python中,我们就需要通过import来进行导入,这样我们才能应用其他文件中定义的函数和数据等代码. 对于刚接触python的我们,这是我们需要掌握的. 下面就以两个文件为例,例