加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService 动态调用帮助类

发布时间:2020-12-17 01:24:46 所属栏目:安全 来源:网络整理
导读:1、WebServiceHelper帮助类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Configuration; using System.CodeDom; using System.CodeDom.Compiler; using System.Net; using Syste

1、WebServiceHelper帮助类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.IO;
using System.Configuration;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Net;
using System.Web.Services;
using System.Web.Services.Description;
using Microsoft.CSharp;
using System.Reflection;

namespace InvokeWebService
{
??? /// <summary>
??? /// WebService动态调用帮助类
??? /// </summary>
??? public static class WebServiceHelper
??? {
??????? /// <summary>
??????? /// 动态调用WebService
??????? /// </summary>
??????? /// <param name="url">WebService地址</param>
??????? /// <param name="MethodName">方法名(模块名)</param>
??????? /// <param name="args">参数列表</param>
??????? /// <returns>object</returns>
??????? public static object InvokeWebSV(string url,string MethodName,object[] args)
??????? {
??????????? return InvokeWebSV(url,null,MethodName,args);
??????? }

??????? /// <summary>
??????? /// 动态调用WebService
??????? /// </summary>
??????? /// <param name="url">WebService地址</param>
??????? /// <param name="ClassName">类名</param>
??????? /// <param name="MethodName">方法名(模块名)</param>
??????? /// <param name="args">参数列表</param>
??????? /// <returns>object</returns>
??????? public static object InvokeWebSV(string url,string ClassName,object[] args)
??????? {??
??????????? string @namespace = "ServiceBase.WebService.DynamicWebLoad";
??????????? if (ClassName == null || ClassName == "")
??????????? {
??????????????? ClassName = GetClassName(url);
??????????? }
??????????? //1、获取服务描述语言(WSDL)
??????????? WebClient WClient = new WebClient();
??????????? Stream stream = WClient.OpenRead(url + "?WSDL");
??????????? ServiceDescription SDescription = ServiceDescription.Read(stream);
??????????? ServiceDescriptionImporter SDImporter = new ServiceDescriptionImporter();
??????????? SDImporter.AddServiceDescription(SDescription,"","");
??????????? CodeNamespace CNamespce = new CodeNamespace(@namespace);
??????????? //2、生成客户端代理代码
??????????? CodeCompileUnit CCompileUnit = new CodeCompileUnit();
??????????? CCompileUnit.Namespaces.Add(CNamespce);
??????????? SDImporter.Import(CNamespce,CCompileUnit);?

??????????? CodeDomProvider CProvider = CodeDomProvider.CreateProvider("CSharp");
????????????
??????????? //3、设定编译器的参数
??????????? CompilerParameters CParameters = new CompilerParameters();
??????????? CParameters.GenerateExecutable = false;
??????????? CParameters.GenerateInMemory = true;
??????????? CParameters.ReferencedAssemblies.Add("System.dll");
??????????? CParameters.ReferencedAssemblies.Add("System.Data.dll");
??????????? CParameters.ReferencedAssemblies.Add("System.Web.Services.dll");
??????????? CParameters.ReferencedAssemblies.Add("System.Xml.dll");
??????????? //4、编译代理类
??????????? CompilerResults CResults = CProvider.CompileAssemblyFromDom(CParameters,CCompileUnit);
??????????? if (true == CResults.Errors.HasErrors)
??????????? {
??????????????? StringBuilder sb = new StringBuilder();
??????????????? foreach (CompilerError CError in CResults.Errors)
??????????????? {
??????????????????? sb.Append(CError.ToString());
??????????????????? sb.Append(System.Environment.NewLine);
??????????????? }
??????????????? throw new Exception(sb.ToString());
??????????? }
??????????? //5、生成代理实例,调用方法
??????????? Assembly assebly = CResults.CompiledAssembly;
??????????? Type type? = assebly.GetType(@namespace + "." + ClassName,true,true);
??????????? object obj = Activator.CreateInstance(type);
??????????? MethodInfo MInfo = type.GetMethod(MethodName);
??????????? return MInfo.Invoke(obj,args);
??????? }

??????? /// <summary>
??????? /// 获得类名
??????? /// </summary>
??????? /// <param name="url">WebService地址</param>
??????? /// <returns>类名称</returns>
??????? private static string GetClassName(string url)
??????? {
??????????? string[] urlItems = url.Split('/');
??????????? string Item = urlItems[urlItems.Length - 1].Split('.')[0];
??????????? return Item;
??????? }
??? }
}

?

2、WebService类

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Data.SqlClient;

namespace TestWebService
{
??? /// <summary>
??? /// Service1 的摘要说明
??? /// </summary>
??? [WebService(Namespace = "http://tempuri.org/")]
??? [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
??? [ToolboxItem(false)]
??? // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
??? // [System.Web.Script.Services.ScriptService]
??? public class Service1 : System.Web.Services.WebService
??? {

??????? [WebMethod]
??????? public string HelloWorld(string name)
??????? {
??????????? return "你好:" + name;
??????? }

??????? [WebMethod]
??????? public DataSet GetData()
??????? {
??????????? SqlConnection conn = new SqlConnection("Server=.;DataBase=MyTest;Uid=sa;Pwd=123456");
??????????? SqlDataAdapter sda = new SqlDataAdapter("select * from userinfo",conn);
??????????? DataSet ds = new DataSet();
??????????? sda.Fill(ds);
??????????? return ds;
??????? }

??????? [WebMethod]
??????? public string Delete(int id)
??????? {
??????????? SqlConnection conn = new SqlConnection("Server=.;DataBase=MyTest;Uid=sa;Pwd=123456");
??????????? string sql = "delete from userinfo where id =" + id;
??????????? SqlCommand cmd = new SqlCommand(sql,conn);
??????????? conn.Open();
??????????? cmd.ExecuteNonQuery();
??????????? conn.Close();
??????????? return "ok";
??????? }
??? }
}
3、客户端调用测试类

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using InvokeWebService;

namespace WebServiceWin
{
??? public partial class Form1 : Form
??? {
??????? public Form1()
??????? {
??????????? InitializeComponent();
??????? }

??????? private void btnHello_Click(object sender,EventArgs e)
??????? {
??????????? string url = "http://localhost:4088/Service1.asmx";
??????????? string[] args = new string[1];
??????????? args[0] = "谭宁江";
??????????? object obj = WebServiceHelper.InvokeWebSV(url,"HelloWorld",args);
??????????? MessageBox.Show(obj.ToString());
??????? }

??????? private void btnBindData_Click(object sender,EventArgs e)
??????? {
??????????? string url = "http://localhost:4088/Service1.asmx";
??????????? object obj = WebServiceHelper.InvokeWebSV(url,"GetData",null);
??????????? DataSet ds = obj as DataSet;
??????????? this.dataGridView1.DataSource = ds.Tables[0];
??????? }

??????? private void btnDelete_Click(object sender,EventArgs e)
??????? {
??????????? string url = "http://localhost:4088/Service1.asmx";??????????? object[] args = new object[1];??????????? args[0] = Convert.ToInt32(this.dataGridView1.CurrentRow.Cells[0].Value.ToString());??????????? object obj = WebServiceHelper.InvokeWebSV(url,"Delete",args);??????????? DataSet ds = WebServiceHelper.InvokeWebSV(url,null) as DataSet;??????????? this.dataGridView1.DataSource = ds.Tables[0];??????? }??? }}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读