WebService的访问形式主要有:SOAP调用、XMLHTTP POST、GET调用、MicroSoft.XMLDOMC调用、webbehavior.htc调用

我们知道的在C#后台本地调用Webservice最简单、快捷的调用WebService的方法即通过鼠标手动添加web服务引用的方式。实际操作中我们会使用到另外一种方式,即通过HttpWebRequest构造请求。这种方式下以Post和Get两种请求为主,另外还有通用方式调用。一共三种。下面我们来看实际操作的实现方法。

由于这三种方式在实现原理上是相似的。只是具体的方式不同(哈哈,我的表述不是很专业,能理解是怎么回事就行)。于是我们抽象出公共的基类:WebServiceCaller

/// <summary>
/// 访问webservice基类
/// </summary>
public abstract class WebServiceCaller
{
    /// <summary>
    /// 请求WebService
    /// </summary>
    /// <param name="URL">WebService的路径</param>
    /// <param name="MethodName">方法名</param>
    /// <param name="Pars">参数</param>
    /// <returns></returns>
    abstract public System.Xml.XmlDocument RequestWebService(ResquestParams rp);

    /// <summary>
    /// 设置凭证与超时时间
    /// </summary>
    /// <param name="request"></param>
    public static void SetWebRequest(HttpWebRequest request)
    {
        request.Credentials = CredentialCache.DefaultCredentials;
        request.Timeout = 10000;
    }

    /// <summary>
    /// 读取响应输出流
    /// </summary>
    /// <param name="response"></param>
    /// <returns></returns>
    public 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;
    }

    public static String ParsToString(Hashtable Pars)
    {
        StringBuilder sb = new StringBuilder();
        foreach (string k in Pars.Keys)
        {
            if (sb.Length > 0)
            {
                sb.Append("&");
            }
            sb.Append(HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(Pars[k].ToString()));
        }
        return sb.ToString();
    }
}
View Code

相关文章: