C#访问webservice的几种方式
最近用C#做一个webservice的接口,尝试了好几种方式,今天把方式总结一下
第一种方式
添加服务引用,从项目右键添加引用那里添加,输入URL就可以了。如下图:
这种方式只可以访问部分的服务引用,并不能全部访问到
第二种方式
添加WEB服务引用
大多数.net都会使用这种方式来添加引用,优点是添加快速,不用去搞什么东西,缺点是有时候会访问不到其他人的webservice,各种弹窗出错。
第三种方式:网上常见的动态调用方式
在上面两种方式都尝试了不行的情况下,不如试试用一下的方式,下面是一个网上找到动态调用类。
-
using System;
-
using System.Collections.Generic;
-
using System.Linq;
-
using System.Web;
-
using System.Net;
-
using System.IO;
-
using System.Web.Services.Description;
-
using System.CodeDom;
-
using Microsoft.CSharp;
-
using System.CodeDom.Compiler;
-
using System.Reflection;
-
using System.Xml.Serialization;
-
using System.Text;
-
-
namespace HTTPS
-
{
-
public class WSHelper
-
{
-
/// < summary>
-
/// 动态调用web服务
-
/// < /summary>
-
/// < param name="url">WSDL服务地址< /param>
-
/// < param name="methodname">方法名< /param>
-
/// < param name="args">参数< /param>
-
/// < returns>< /returns>
-
public static object InvokeWebService(string url, string methodname, object[] args)
-
{
-
return WSHelper.InvokeWebService(url, null, methodname, args);
-
}
-
/// < summary>
-
/// 动态调用web服务
-
/// < /summary>
-
/// < param name="url">WSDL服务地址< /param>
-
/// < param name="classname">类名< /param>
-
/// < param name="methodname">方法名< /param>
-
/// < param name="args">参数< /param>
-
/// < returns>< /returns>
-
public static object InvokeWebService(string url, string classname, string methodname, object[] args)
-
{
-
string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
-
if ((classname == null) || (classname == ""))
-
{
-
classname = WSHelper.GetWsClassName(url);
-
}
-
try
-
{ //获取WSDL
-
WebClient wc = new WebClient();
-
Stream stream = wc.OpenRead(url + "?WSDL");
-
ServiceDescription sd = ServiceDescription.Read(stream);
-
ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
-
sdi.AddServiceDescription(sd, "", "");
-
CodeNamespace cn = new CodeNamespace(@namespace);
-
//生成客户端代理类代码
-
CodeCompileUnit ccu = new CodeCompileUnit();
-
ccu.Namespaces.Add(cn);
-
sdi.Import(cn, ccu);
-
CSharpCodeProvider icc = new CSharpCodeProvider();
-
//设定编译参数
-
CompilerParameters cplist = new CompilerParameters();
-
cplist.GenerateExecutable = false;
-
cplist.GenerateInMemory = true;
-
cplist.ReferencedAssemblies.Add( "System.dll");
-
cplist.ReferencedAssemblies.Add( "System.XML.dll");
-
cplist.ReferencedAssemblies.Add( "System.Web.Services.dll");
-
cplist.ReferencedAssemblies.Add( "System.Data.dll");
-
//编译代理类
-
CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
-
if (true == cr.Errors.HasErrors)
-
{
-
System.Text.StringBuilder sb = new System.Text.StringBuilder();
-
foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
-
{
-
sb.Append(ce.ToString());
-
sb.Append(System.Environment.NewLine);
-
}
-
throw new Exception(sb.ToString());
-
}
-
//生成代理实例,并调用方法
-
System.Reflection.Assembly assembly = cr.CompiledAssembly;
-
Type t = assembly.GetType(@ namespace + "." + classname, true, true);
-
object obj = Activator.CreateInstance(t);
-
System.Reflection.MethodInfo mi = t.GetMethod(methodname);
-
return mi.Invoke(obj, args);
-
// PropertyInfo propertyInfo = type.GetProperty(propertyname);
-
//return propertyInfo.GetValue(obj, null);
-
}
-
catch (Exception ex)
-
{
-
throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
-
}
-
}
-
private static string GetWsClassName(string wsUrl)
-
{
-
string[] parts = wsUrl.Split('/');
-
string[] pps = parts[parts.Length - 1].Split('.');
-
return pps[0];
-
}
-
-
-
//上面那种方法的调用方式
-
//string url = "http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx";
-
//string[] args = new string[2];
-
//args[0] = "k123";
-
//args[1] = "";
-
//object result = WSHelper.InvokeWebService(url, "getDetailInfoByTrainCode", args);
-
//DataSet ds = (DataSet)result;
-
//this.GridView1.DataSource = ds;
-
//this.GridView1.DataBind();
-
}
-
}
第四种方式:通过HTTP请求来调用
在上面的办法都试过之后,还是无法调用,那就需要通过HTTP请求来调用了,当然除了C#可以实现之外,JS也是可以的,但是JS会出现跨域的问题。
下面是一个HTTP操作类
-
using System;
-
using System.Collections.Generic;
-
using System.Text;
-
using System.Net;
-
using System.IO;
-
using System.Text.RegularExpressions;
-
using System.IO.Compression;
-
using System.Security.Cryptography.X509Certificates;
-
using System.Net.Security;
-
-
namespace RuRo.Common
-
{
-
/// <summary>
-
/// Http连接操作帮助类
-
/// </summary>
-
public class HttpHelper
-
{
-
-
//默认的编码
-
private Encoding encoding = Encoding.Default;
-
//Post数据编码
-
private Encoding postencoding = Encoding.Default;
-
//HttpWebRequest对象用来发起请求
-
private HttpWebRequest request = null;
-
//获取影响流的数据对象
-
private HttpWebResponse response = null;
-
-
-
-
-
/// <summary>
-
/// 根据相传入的数据,得到相应页面数据
-
/// </summary>
-
/// <param name="item">参数类对象</param>
-
/// <returns>返回HttpResult类型</returns>
-
public HttpResult GetHtml(HttpItem item)
-
{
-
//返回参数
-
HttpResult result = new HttpResult();
-
try
-
{
-
//准备参数
-
SetRequest(item);
-
}
-
catch (Exception ex)
-
{
-
result.Cookie = string.Empty;
-
result.Header = null;
-
result.Html = ex.Message;
-
result.StatusDescription = "配置参数时出错:" + ex.Message;
-
//配置参数时出错
-
return result;
-
}
-
try
-
{
-
//请求数据
-
using (response = (HttpWebResponse)request.GetResponse())
-
{
-
GetData(item, result);
-
}
-
}
-
catch (WebException ex)
-
{
-
if (ex.Response != null)
-
{
-
using (response = (HttpWebResponse)ex.Response)
-
{
-
GetData(item, result);
-
}
-
}
-
else
-
{
-
result.Html = ex.Message;
-
}
-
}
-
catch (Exception ex)
-
{
-
result.Html = ex.Message;
-
}
-
if (item.IsToLower) result.Html = result.Html.ToLower();
-
return result;
-
}
-
-
-
-
-
/// <summary>
-
/// 获取数据的并解析的方法
-
/// </summary>
-
/// <param name="item"></param>
-
/// <param name="result"></param>
-
private void GetData(HttpItem item, HttpResult result)
-
{
-
-
//获取StatusCode
-
result.StatusCode = response.StatusCode;
-
//获取StatusDescription
-
result.StatusDescription = response.StatusDescription;
-
//获取Headers
-
result.Header = response.Headers;
-
//获取CookieCollection
-
if (response.Cookies != null) result.CookieCollection = response.Cookies;
-
//获取set-cookie
-
if (response.Headers["set-cookie"] != null) result.Cookie = response.Headers["set-cookie"];
-
-
-
-
//处理网页Byte
-
byte[] ResponseByte = GetByte();
-
-
-
-
if (ResponseByte != null & ResponseByte.Length > 0)
-
{
-
//设置编码
-
SetEncoding(item, result, ResponseByte);
-
//得到返回的HTML
-
result.Html = encoding.GetString(ResponseByte);
-
}
-
else
-
{
-
//没有返回任何Html代码
-
result.Html = string.Empty;
-
}
-
-
}
-
/// <summary>
-
/// 设置编码
-
/// </summary>
-
/// <param name="item">HttpItem</param>
-
/// <param name="result">HttpResult</param>
-
/// <param name="ResponseByte">byte[]</param>
-
private void SetEncoding(HttpItem item, HttpResult result, byte[] ResponseByte)
-
{
-
//是否返回Byte类型数据
-
if (item.ResultType == ResultType.Byte) result.ResultByte = ResponseByte;
-
//从这里开始我们要无视编码了
-
if (encoding == null)
-
{
-
Match meta = Regex.Match(Encoding.Default.GetString(ResponseByte), "<meta[^<]*charset=([^<]*)[\"']", RegexOptions.IgnoreCase);
-
string c = string.Empty;
-
if (meta != null && meta.Groups.Count > 0)
-
{
-
c = meta.Groups[ 1].Value.ToLower().Trim();
-
}
-
if (c.Length > 2)
-
{
-
try
-
{
-
encoding = Encoding.GetEncoding(c.Replace( "\"", string.Empty).Replace("'", "").Replace(";", "").Replace("iso-8859-1", "gbk").Trim());
-
}
-
catch
-
{
-
if (string.IsNullOrEmpty(response.CharacterSet))
-
{
-
encoding = Encoding.UTF8;
-
}
-
else
-
{
-
encoding = Encoding.GetEncoding(response.CharacterSet);
-
}
-
}
-
}
-
else
-
{
-
if (string.IsNullOrEmpty(response.CharacterSet))
-
{
-
encoding = Encoding.UTF8;
-
}
-
else
-
{
-
encoding = Encoding.GetEncoding(response.CharacterSet);
-
}
-
}
-
}
-
}
-
/// <summary>
-
/// 提取网页Byte
-
/// </summary>
-
/// <returns></returns>
-
private byte[] GetByte()
-
{
-
byte[] ResponseByte = null;
-
MemoryStream _stream = new MemoryStream();
-
-
//GZIIP处理
-
if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))
-
{
-
//开始读取流并设置编码方式
-
_stream = GetMemoryStream( new GZipStream(response.GetResponseStream(), CompressionMode.Decompress));
-
}
-
else
-
{
-
//开始读取流并设置编码方式
-
_stream = GetMemoryStream(response.GetResponseStream());
-
}
-
//获取Byte
-
ResponseByte = _stream.ToArray();
-
_stream.Close();
-
return ResponseByte;
-
}
-
-
/// <summary>
-
/// 4.0以下.net版本取数据使用
-
/// </summary>
-
/// <param name="streamResponse">流</param>
-
private MemoryStream GetMemoryStream(Stream streamResponse)
-
{
-
MemoryStream _stream = new MemoryStream();
-
int Length = 256;
-
Byte[] buffer = new Byte[Length];
-
int bytesRead = streamResponse.Read(buffer, 0, Length);
-
while (bytesRead > 0)
-
{
-
_stream.Write(buffer, 0, bytesRead);
-
bytesRead = streamResponse.Read(buffer, 0, Length);
-
}
-
return _stream;
-
}
-
-
-
-
-
/// <summary>
-
/// 为请求准备参数
-
/// </summary>
-
///<param name="item">参数列表</param>
-
private void SetRequest(HttpItem item)
-
{
-
// 验证证书
-
SetCer(item);
-
//设置Header参数
-
if (item.Header != null && item.Header.Count > 0) foreach (string key in item.Header.AllKeys)
-
{
-
request.Headers.Add(key, item.Header[key]);
-
}
-
// 设置代理
-
SetProxy(item);
-
if (item.ProtocolVersion != null) request.ProtocolVersion = item.ProtocolVersion;
-
request.ServicePoint.Expect100Continue = item.Expect100Continue;
-
//请求方式Get或者Post
-
request.Method = item.Method;
-
request.Timeout = item.Timeout;
-
request.KeepAlive = item.KeepAlive;
-
request.ReadWriteTimeout = item.ReadWriteTimeout;
-
if (item.IfModifiedSince != null) request.IfModifiedSince = Convert.ToDateTime(item.IfModifiedSince);
-
//Accept
-
request.Accept = item.Accept;
-
//ContentType返回类型
-
request.ContentType = item.ContentType;
-
//UserAgent客户端的访问类型,包括浏览器版本和操作系统信息
-
request.UserAgent = item.UserAgent;
-
// 编码
-
encoding = item.Encoding;
-
//设置安全凭证
-
request.Credentials = item.ICredentials;
-
//设置Cookie
-
SetCookie(item);
-
//来源地址
-
request.Referer = item.Referer;
-
//是否执行跳转功能
-
request.AllowAutoRedirect = item.Allowautoredirect;
-
if (item.MaximumAutomaticRedirections > 0)
-
{
-
request.MaximumAutomaticRedirections = item.MaximumAutomaticRedirections;
-
}
-
//设置Post数据
-
SetPostData(item);
-
//设置最大连接
-
if (item.Connectionlimit > 0) request.ServicePoint.ConnectionLimit = item.Connectionlimit;
-
}
-
/// <summary>
-
/// 设置证书
-
/// </summary>
-
/// <param name="item"></param>
-
private void SetCer(HttpItem item)
-
{
-
if (!string.IsNullOrEmpty(item.CerPath))
-
{
-
//这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。
-
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
-
//初始化对像,并设置请求的URL地址
-
request = (HttpWebRequest)WebRequest.Create(item.URL);
-
SetCerList(item);
-
//将证书添加到请求里
-
request.ClientCertificates.Add( new X509Certificate(item.CerPath));
-
}
-
else
-
{
-
//初始化对像,并设置请求的URL地址
-
request = (HttpWebRequest)WebRequest.Create(item.URL);
-
SetCerList(item);
-
}
-
}
-
/// <summary>
-
/// 设置多个证书
-
/// </summary>
-
/// <param name="item"></param>
-
private void SetCerList(HttpItem item)
-
{
-
if (item.ClentCertificates != null && item.ClentCertificates.Count > 0)
-
{
-
foreach (X509Certificate c in item.ClentCertificates)
-
{
-
request.ClientCertificates.Add(c);
-
}
-
}
-
}
-
/// <summary>
-
/// 设置Cookie
-
/// </summary>
-
/// <param name="item">Http参数</param>
-
private void SetCookie(HttpItem item)
-
{
-
if (!string.IsNullOrEmpty(item.Cookie)) request.Headers[HttpRequestHeader.Cookie] = item.Cookie;
-
//设置CookieCollection
-
if (item.ResultCookieType == ResultCookieType.CookieCollection)
-
{
-
request.CookieContainer = new CookieContainer();
-
if (item.CookieCollection != null && item.CookieCollection.Count > 0)
-
request.CookieContainer.Add(item.CookieCollection);
-
}
-
}
-
/// <summary>
-
/// 设置Post数据
-
/// </summary>
-
/// <param name="item">Http参数</param>
-
private void SetPostData(HttpItem item)
-
{
-
//验证在得到结果时是否有传入数据
-
if (!request.Method.Trim().ToLower().Contains("get"))
-
{
-
if (item.PostEncoding != null)
-
{
-
postencoding = item.PostEncoding;
-
}
-
byte[] buffer = null;
-
//写入Byte类型
-
if (item.PostDataType == PostDataType.Byte && item.PostdataByte != null && item.PostdataByte.Length > 0)
-
{
-
//验证在得到结果时是否有传入数据
-
buffer = item.PostdataByte;
-
} //写入文件
-
else if (item.PostDataType == PostDataType.FilePath && !string.IsNullOrEmpty(item.Postdata))
-
{
-
StreamReader r = new StreamReader(item.Postdata, postencoding);
-
buffer = postencoding.GetBytes(r.ReadToEnd());
-
r.Close();
-
} //写入字符串
-
else if (!string.IsNullOrEmpty(item.Postdata))
-
{
-
buffer = postencoding.GetBytes(item.Postdata);
-
}
-
if (buffer != null)
-
{
-
request.ContentLength = buffer.Length;
-
request.GetRequestStream().Write(buffer, 0, buffer.Length);
-
}
-
}
-
}
-
/// <summary>
-
/// 设置代理
-
/// </summary>
-
/// <param name="item">参数对象</param>
-
private void SetProxy(HttpItem item)
-
{
-
bool isIeProxy = false;
-
if (!string.IsNullOrEmpty(item.ProxyIp))
-
{
-
isIeProxy = item.ProxyIp.ToLower().Contains( "ieproxy");
-
}
-
if (!string.IsNullOrEmpty(item.ProxyIp) && !isIeProxy)
-
{
-
//设置代理服务器
-
if (item.ProxyIp.Contains(":"))
-
{
-
string[] plist = item.ProxyIp.Split(':');
-
WebProxy myProxy = new WebProxy(plist[0].Trim(), Convert.ToInt32(plist[1].Trim()));
-
//建议连接
-
myProxy.Credentials = new NetworkCredential(item.ProxyUserName, item.ProxyPwd);
-
//给当前请求对象
-
request.Proxy = myProxy;
-
}
-
else
-
{
-
WebProxy myProxy = new WebProxy(item.ProxyIp, false);
-
//建议连接
-
myProxy.Credentials = new NetworkCredential(item.ProxyUserName, item.ProxyPwd);
-
//给当前请求对象
-
request.Proxy = myProxy;
-
}
-
}
-
else if (isIeProxy)
-
{
-
//设置为IE代理
-
}
-
else
-
{
-
request.Proxy = item.WebProxy;
-
}
-
}
-
-
-
-
/// <summary>
-
/// 回调验证证书问题
-
/// </summary>
-
/// <param name="sender">流对象</param>
-
/// <param name="certificate">证书</param>
-
/// <param name="chain">X509Chain</param>
-
/// <param name="errors">SslPolicyErrors</param>
-
/// <returns>bool</returns>
-
private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; }
-
-
-
-
}
-
/// <summary>
-
/// Http请求参考类
-
/// </summary>
-
public class HttpItem
-
{
-
string _URL = string.Empty;
-
/// <summary>
-
/// 请求URL必须填写
-
/// </summary>
-
public string URL
-
{
-
get { return _URL; }
-
set { _URL = value; }
-
}
-
string _Method = "GET";
-
/// <summary>
-
/// 请求方式默认为GET方式,当为POST方式时必须设置Postdata的值
-
/// </summary>
-
public string Method
-
{
-
get { return _Method; }
-
set { _Method = value; }
-
}
-
int _Timeout = 100000;
-
/// <summary>
-
/// 默认请求超时时间
-
/// </summary>
-
public int Timeout
-
{
-
get { return _Timeout; }
-
set { _Timeout = value; }
-
}
-
int _ReadWriteTimeout = 30000;
-
/// <summary>
-
/// 默认写入Post数据超时间
-
/// </summary>
-
public int ReadWriteTimeout
-
{
-
get { return _ReadWriteTimeout; }
-
set { _ReadWriteTimeout = value; }
-
}
-
Boolean _KeepAlive = true;
-
/// <summary>
-
/// 获取或设置一个值,该值指示是否与 Internet 资源建立持久性连接默认为true。
-
/// </summary>
-
public Boolean KeepAlive
-
{
-
get { return _KeepAlive; }
-
set { _KeepAlive = value; }
-
}
-
string _Accept = "text/html, application/xhtml+xml, */*";
-
/// <summary>
-
/// 请求标头值 默认为text/html, application/xhtml+xml, */*
-
/// </summary>
-
public string Accept
-
{
-
get { return _Accept; }
-
set { _Accept = value; }
-
}
-
string _ContentType = "text/html";
-
/// <summary>
-
/// 请求返回类型默认 text/html
-
/// </summary>
-
public string ContentType
-
{
-
get { return _ContentType; }
-
set { _ContentType = value; }
-
}
-
string _UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
-
/// <summary>
-
/// 客户端访问信息默认Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
-
/// </summary>
-
public string UserAgent
-
{
-
get { return _UserAgent; }
-
set { _UserAgent = value; }
-
}
-
Encoding _Encoding = null;
-
/// <summary>
-
/// 返回数据编码默认为NUll,可以自动识别,一般为utf-8,gbk,gb2312
-
/// </summary>
-
public Encoding Encoding
-
{
-
get { return _Encoding; }
-
set { _Encoding = value; }
-
}
-
private PostDataType _PostDataType = PostDataType.String;
-
/// <summary>
-
/// Post的数据类型
-
/// </summary>
-
public PostDataType PostDataType
-
{
-
get { return _PostDataType; }
-
set { _PostDataType = value; }
-
}
-
string _Postdata = string.Empty;
-
/// <summary>
-
/// Post请求时要发送的字符串Post数据
-
/// </summary>
-
public string Postdata
-
{
-
get { return _Postdata; }
-
set { _Postdata = value; }
-
}
-
private byte[] _PostdataByte = null;
-
/// <summary>
-
/// Post请求时要发送的Byte类型的Post数据
-
/// </summary>
-
public byte[] PostdataByte
-
{
-
get { return _PostdataByte; }
-
set { _PostdataByte = value; }
-
}
-
private WebProxy _WebProxy;
-
/// <summary>
-
/// 设置代理对象,不想使用IE默认配置就设置为Null,而且不要设置ProxyIp
-
/// </summary>
-
public WebProxy WebProxy
-
{
-
get { return _WebProxy; }
-
set { _WebProxy = value; }
-
}
-
-
CookieCollection cookiecollection = null;
-
/// <summary>
-
/// Cookie对象集合
-
/// </summary>
-
public CookieCollection CookieCollection
-
{
-
get { return cookiecollection; }
-
set { cookiecollection = value; }
-
}
-
string _Cookie = string.Empty;
-
/// <summary>
-
/// 请求时的Cookie
-
/// </summary>
-
public string Cookie
-
{
-
get { return _Cookie; }
-
set { _Cookie = value; }
-
}
-
string _Referer = string.Empty;
-
/// <summary>
-
/// 来源地址,上次访问地址
-
/// </summary>
-
public string Referer
-
{
-
get { return _Referer; }
-
set { _Referer = value; }
-
}
-
string _CerPath = string.Empty;
-
/// <summary>
-
/// 证书绝对路径
-
/// </summary>
-
public string CerPath
-
{
-
get { return _CerPath; }
-
set { _CerPath = value; }
-
}
-
private Boolean isToLower = false;
-
/// <summary>
-
/// 是否设置为全文小写,默认为不转化
-
/// </summary>
-
public Boolean IsToLower
-
{
-
get { return isToLower; }
-
set { isToLower = value; }
-
}
-
private Boolean allowautoredirect = false;
-
/// <summary>
-
/// 支持跳转页面,查询结果将是跳转后的页面,默认是不跳转
-
/// </summary>
-
public Boolean Allowautoredirect
-
{
-
get { return allowautoredirect; }
-
set { allowautoredirect = value; }
-
}
-
private int connectionlimit = 1024;
-
/// <summary>
-
/// 最大连接数
-
/// </summary>
-
public int Connectionlimit
-
{
-
get { return connectionlimit; }
-
set { connectionlimit = value; }
-
}
-
private string proxyusername = string.Empty;
-
/// <summary>
-
/// 代理Proxy 服务器用户名
-
/// </summary>
-
public string ProxyUserName
-
{
-
get { return proxyusername; }
-
set { proxyusername = value; }
-
}
-
private string proxypwd = string.Empty;
-
/// <summary>
-
/// 代理 服务器密码
-
/// </summary>
-
public string ProxyPwd
-
{
-
get { return proxypwd; }
-
set { proxypwd = value; }
-
}
-
private string proxyip = string.Empty;
-
/// <summary>
-
/// 代理 服务IP ,如果要使用IE代理就设置为ieproxy
-
/// </summary>
-
public string ProxyIp
-
{
-
get { return proxyip; }
-
set { proxyip = value; }
-
}
-
private ResultType resulttype = ResultType.String;
-
-
/// <summary>
-
/// 设置返回类型String和Byte
-
/// </summary>
-
public ResultType ResultType
-
{
-
get { return resulttype; }
-
set { resulttype = value; }
-
}
-
private WebHeaderCollection header = new WebHeaderCollection();
-
/// <summary>
-
/// header对象
-
/// </summary>
-
public WebHeaderCollection Header
-
{
-
get { return header; }
-
set { header = value; }
-
}
-
-
private Version _ProtocolVersion;
-
-
/// <summary>
-
// 获取或设置用于请求的 HTTP 版本。返回结果:用于请求的 HTTP 版本。默认为 System.Net.HttpVersion.Version11。
-
/// </summary>
-
public Version ProtocolVersion
-
{
-
get { return _ProtocolVersion; }
-
set { _ProtocolVersion = value; }
-
}
-
private Boolean _expect100continue = true;
-
/// <summary>
-
/// 获取或设置一个 System.Boolean 值,该值确定是否使用 100-Continue 行为。如果 POST 请求需要 100-Continue 响应,则为 true;否则为 false。默认值为 true。
-
/// </summary>
-
public Boolean Expect100Continue
-
{
-
get { return _expect100continue; }
-
set { _expect100continue = value; }
-
}
-
private X509CertificateCollection _ClentCertificates;
-
/// <summary>
-
/// 设置509证书集合
-
/// </summary>
-
public X509CertificateCollection ClentCertificates
-
{
-
get { return _ClentCertificates; }
-
set { _ClentCertificates = value; }
-
}
-
private Encoding _PostEncoding;
-
/// <summary>
-
/// 设置或获取Post参数编码,默认的为Default编码
-
/// </summary>
-
public Encoding PostEncoding
-
{
-
get { return _PostEncoding; }
-
set { _PostEncoding = value; }
-
}
-
private ResultCookieType _ResultCookieType = ResultCookieType.String;
-
/// <summary>
-
/// Cookie返回类型,默认的是只返回字符串类型
-
/// </summary>
-
public ResultCookieType ResultCookieType
-
{
-
get { return _ResultCookieType; }
-
set { _ResultCookieType = value; }
-
}
-
-
private ICredentials _ICredentials = CredentialCache.DefaultCredentials;
-
/// <summary>
-
/// 获取或设置请求的身份验证信息。
-
/// </summary>
-
public ICredentials ICredentials
-
{
-
get { return _ICredentials; }
-
set { _ICredentials = value; }
-
}
-
/// <summary>
-
/// 设置请求将跟随的重定向的最大数目
-
/// </summary>
-
private int _MaximumAutomaticRedirections;
-
-
public int MaximumAutomaticRedirections
-
{
-
get { return _MaximumAutomaticRedirections; }
-
set { _MaximumAutomaticRedirections = value; }
-
}
-
-
private DateTime? _IfModifiedSince = null;
-
/// <summary>
-
/// 获取和设置IfModifiedSince,默认为当前日期和时间
-
/// </summary>
-
public DateTime? IfModifiedSince
-
{
-
get { return _IfModifiedSince; }
-
set { _IfModifiedSince = value; }
-
}
-
-
}
-
/// <summary>
-
/// Http返回参数类
-
/// </summary>
-
public class HttpResult
-
{
-
private string _Cookie;
-
/// <summary>
-
/// Http请求返回的Cookie
-
/// </summary>
-
public string Cookie
-
{
-
get { return _Cookie; }
-
set { _Cookie = value; }
-
}
-
-
private CookieCollection _CookieCollection;
-
/// <summary>
-
/// Cookie对象集合
-
/// </summary>
-
public CookieCollection CookieCollection
-
{
-
get { return _CookieCollection; }
-
set { _CookieCollection = value; }
-
}
-
private string _html = string.Empty;
-
/// <summary>
-
/// 返回的String类型数据 只有ResultType.String时才返回数据,其它情况为空
-
/// </summary>
-
public string Html
-
{
-
get { return _html; }
-
set { _html = value; }
-
}
-
private byte[] _ResultByte;
-
/// <summary>
-
/// 返回的Byte数组 只有ResultType.Byte时才返回数据,其它情况为空
-
/// </summary>
-
public byte[] ResultByte
-
{
-
get { return _ResultByte; }
-
set { _ResultByte = value; }
-
}
-
private WebHeaderCollection _Header;
-
/// <summary>
-
/// header对象
-
/// </summary>
-
public WebHeaderCollection Header
-
{
-
get { return _Header; }
-
set { _Header = value; }
-
}
-
private string _StatusDescription;
-
/// <summary>
-
/// 返回状态说明
-
/// </summary>
-
public string StatusDescription
-
{
-
get { return _StatusDescription; }
-
set { _StatusDescription = value; }
-
}
-
private HttpStatusCode _StatusCode;
-
/// <summary>
-
/// 返回状态码,默认为OK
-
/// </summary>
-
public HttpStatusCode StatusCode
-
{
-
get { return _StatusCode; }
-
set { _StatusCode = value; }
-
}
-
}
-
/// <summary>
-
/// 返回类型
-
/// </summary>
-
public enum ResultType
-
{
-
/// <summary>
-
/// 表示只返回字符串 只有Html有数据
-
/// </summary>
-
String,
-
/// <summary>
-
/// 表示返回字符串和字节流 ResultByte和Html都有数据返回
-
/// </summary>
-
Byte
-
}
-
/// <summary>
-
/// Post的数据格式默认为string
-
/// </summary>
-
public enum PostDataType
-
{
-
/// <summary>
-
/// 字符串类型,这时编码Encoding可不设置
-
/// </summary>
-
String,
-
/// <summary>
-
/// Byte类型,需要设置PostdataByte参数的值编码Encoding可设置为空
-
/// </summary>
-
Byte,
-
/// <summary>
-
/// 传文件,Postdata必须设置为文件的绝对路径,必须设置Encoding的值
-
/// </summary>
-
FilePath
-
}
-
/// <summary>
-
/// Cookie返回类型
-
/// </summary>
-
public enum ResultCookieType
-
{
-
/// <summary>
-
/// 只返回字符串类型的Cookie
-
/// </summary>
-
String,
-
/// <summary>
-
/// CookieCollection格式的Cookie集合同时也返回String类型的cookie
-
/// </summary>
-
CookieCollection
-
}
-
-
-
}
-
public string PostData()
-
{
-
StringBuilder jsonData = new StringBuilder();
-
HttpHelper http = new HttpHelper();
-
HttpItem item = new HttpItem()
-
{
-
URL = "WWW.BAIDU.COM",//URL 必需项
-
Method = "post",//URL 可选项 默认为Get
-
IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写
-
Cookie = "",//字符串Cookie 可选项
-
Referer = "",//来源URL 可选项
-
Postdata = jsonData.ToString(), //Post数据 可选项GET时不需要写
-
PostEncoding = Encoding.UTF8,
-
Timeout = 100000,//连接超时时间 可选项默认为100000
-
ReadWriteTimeout = 30000,//写入Post数据超时时间 可选项默认为30000
-
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统 可选项有默认值
-
ContentType = "application/x-www-form-urlencoded",//返回类型 可选项有默认值
-
Allowautoredirect = true,//是否根据301跳转 可选项
-
//CerPath = "d:\123.cer",//证书绝对路径 可选项不需要证书时可以不写这个参数
-
//Connectionlimit = 1024,//最大连接数 可选项 默认为1024
-
ProxyIp = "",//代理服务器ID 可选项 不需要代理 时可以不设置这三个参数
-
//ProxyPwd = "123456",//代理服务器密码 可选项
-
//ProxyUserName = "administrator",//代理服务器账户名 可选项
-
ResultType = ResultType.String
-
};
-
HttpResult result = http.GetHtml(item);
-
string html = result.Html;
-
string cookie = result.Cookie;
-
return html;
-
}
最近调用一个JAVA的WebService,调用不上去,搞得我非常郁闷,试到最后面,还是通过HTTP请求才获取到数据。很郁闷!
其实WebService都是用来跨平台的,任何语言都可以互相引用,多尝试几遍总有好办法。