using Microsoft.SqlServer.Server;
using System;
using System.Collections;
using System.Data.SqlTypes;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
public class UserDefinedFunctionsz
{
private static readonly Hashtable _xmlNamespaces = new Hashtable();
[SqlFunction]
public static string GetDataTable_P(string WSURL, string PName, string Values)
{
string result;
try
{
Hashtable hashtable = new Hashtable();
hashtable["PName"] = PName;
hashtable["MaterialUse"] = Values;
XmlDocument xmlDocument = UserDefinedFunctionsz.QuerySoapWebService(WSURL, PName, hashtable);
result = xmlDocument.InnerText.ToString();
}
catch (Exception ex)
{
throw ex;
}
return result;
}
[SqlFunction]
public static string GetDataTable_V(string WSURL, string PName, string Values)
{
string result;
try
{
Hashtable hashtable = new Hashtable();
hashtable["PName"] = PName;
hashtable["MaterialUse"] = Values;
XmlDocument xmlDocument = UserDefinedFunctionsz.QuerySoapWebService(WSURL, PName, hashtable);
result = xmlDocument.InnerText.ToString();
}
catch (Exception ex)
{
throw ex;
}
return result;
}
public static XmlDocument QueryPostWebService(string URL, string MethodName, Hashtable Pars)
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(URL + "/" + MethodName);
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
UserDefinedFunctionsz.SetWebRequest(httpWebRequest);
byte[] data = UserDefinedFunctionsz.EncodePars(Pars);
UserDefinedFunctionsz.WriteRequestData(httpWebRequest, data);
return UserDefinedFunctionsz.ReadXmlResponse(httpWebRequest.GetResponse());
}
public static XmlDocument QueryGetWebService(string URL, string MethodName, Hashtable Pars)
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(string.Concat(new string[]
{
URL,
"/",
MethodName,
"?",
UserDefinedFunctionsz.ParsToString(Pars)
}));
httpWebRequest.Method = "GET";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
UserDefinedFunctionsz.SetWebRequest(httpWebRequest);
return UserDefinedFunctionsz.ReadXmlResponse(httpWebRequest.GetResponse());
}
public static XmlDocument QuerySoapWebService(string URL, string MethodName, Hashtable Pars)
{
if (UserDefinedFunctionsz._xmlNamespaces.ContainsKey(URL))
{
return UserDefinedFunctionsz.QuerySoapWebService(URL, MethodName, Pars, UserDefinedFunctionsz._xmlNamespaces[URL].ToString());
}
return UserDefinedFunctionsz.QuerySoapWebService(URL, MethodName, Pars, UserDefinedFunctionsz.GetNamespace(URL));
}
private static XmlDocument QuerySoapWebService(string URL, string MethodName, Hashtable Pars, string XmlNs)
{
UserDefinedFunctionsz._xmlNamespaces[URL] = XmlNs;
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "text/xml; charset=utf-8";
httpWebRequest.Headers.Add("SOAPAction", string.Concat(new string[]
{
"\"",
XmlNs,
XmlNs.EndsWith("/") ? "" : "/",
MethodName,
"\""
}));
UserDefinedFunctionsz.SetWebRequest(httpWebRequest);
byte[] data = UserDefinedFunctionsz.EncodeParsToSoap(Pars, XmlNs, MethodName);
UserDefinedFunctionsz.WriteRequestData(httpWebRequest, data);
XmlDocument xmlDocument = new XmlDocument();
XmlDocument xmlDocument2 = new XmlDocument();
xmlDocument = UserDefinedFunctionsz.ReadXmlResponse(httpWebRequest.GetResponse());
XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(xmlDocument.NameTable);
xmlNamespaceManager.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
string innerXml = xmlDocument.SelectSingleNode("//soap:Body/*/*", xmlNamespaceManager).InnerXml;
xmlDocument2.LoadXml("<root>" + innerXml + "</root>");
UserDefinedFunctionsz.AddDelaration(xmlDocument2);
return xmlDocument2;
}
private static string GetNamespace(string URL)
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(URL + "?WSDL");
UserDefinedFunctionsz.SetWebRequest(httpWebRequest);
WebResponse response = httpWebRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(streamReader.ReadToEnd());
streamReader.Close();
return xmlDocument.SelectSingleNode("//@targetNamespace").Value;
}
private static byte[] EncodeParsToSoap(Hashtable Pars, string XmlNs, string MethodName)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.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>");
UserDefinedFunctionsz.AddDelaration(xmlDocument);
XmlElement xmlElement = xmlDocument.CreateElement("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
XmlElement xmlElement2 = xmlDocument.CreateElement(MethodName);
xmlElement2.SetAttribute("xmlns", XmlNs);
if (Pars != null)
{
foreach (string text in Pars.Keys)
{
XmlElement xmlElement3 = xmlDocument.CreateElement(text);
xmlElement3.InnerXml = UserDefinedFunctionsz.ObjectToSoapXml(Pars[text]);
xmlElement2.AppendChild(xmlElement3);
}
}
xmlElement.AppendChild(xmlElement2);
xmlDocument.DocumentElement.AppendChild(xmlElement);
return Encoding.UTF8.GetBytes(xmlDocument.OuterXml);
}
private static string ObjectToSoapXml(object o)
{
XmlSerializer xmlSerializer = new XmlSerializer(o.GetType());
MemoryStream memoryStream = new MemoryStream();
xmlSerializer.Serialize(memoryStream, o);
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(Encoding.UTF8.GetString(memoryStream.ToArray()));
if (xmlDocument.DocumentElement != null)
{
return xmlDocument.DocumentElement.InnerXml;
}
return o.ToString();
}
private static void SetWebRequest(HttpWebRequest request)
{
request.Credentials = CredentialCache.DefaultCredentials;
request.Timeout = 100000;
}
private static void WriteRequestData(HttpWebRequest request, byte[] data)
{
request.ContentLength = (long)data.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
}
private static byte[] EncodePars(Hashtable Pars)
{
return Encoding.UTF8.GetBytes(UserDefinedFunctionsz.ParsToString(Pars));
}
private static string ParsToString(Hashtable Pars)
{
StringBuilder stringBuilder = new StringBuilder();
if (Pars != null)
{
foreach (string text in Pars.Keys)
{
if (stringBuilder.Length > 0)
{
stringBuilder.Append("&");
}
stringBuilder.Append(text + "=" + Pars[text].ToString());
}
}
return stringBuilder.ToString();
}
private static XmlDocument ReadXmlResponse(WebResponse response)
{
StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string xml = streamReader.ReadToEnd();
streamReader.Close();
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
return xmlDocument;
}
private static void AddDelaration(XmlDocument doc)
{
XmlDeclaration newChild = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.InsertBefore(newChild, doc.DocumentElement);
}
}
SQL调用Web Service
猜你喜欢
转载自blog.csdn.net/mxbing1984/article/details/82530007
今日推荐
周排行