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 System.Net;
using System.IO;
using System.Web;//需要右键添加.NET组件System.Web,System.Web.Services,System.Web.Extensions。
using System.Web.Services;
using System.Web.Services.Description;
using System.Web.Services.Protocols;
using System.Xml.Serialization;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
namespace myWebServiceNameSpace
{
class myWebServiceClass
{
/// <summary>
/// webservice返回是string的,使用该方法
/// </summary>
/// <param name="url">调用webservice的url</param>
/// <param name="className">webservice的类</param>
/// <param name="methodName">调用webservice的方法</param>
/// <param name="parameters">方法的参数</param>
/// <returns>string</returns>
public string resultString(string url, string className, string methodName, object[] parameters)
{
string resultA = "";
try
{
// 1. 使用 WebClient 下载 WSDL 信息。
WebClient client = new WebClient();
url = url + "?WSDL";
Stream stream = client.OpenRead(url);
// 2. 创建和格式化 WSDL 文档。
ServiceDescription description = ServiceDescription.Read(stream);
// 3. 创建客户端代理代理类。
ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。
importer.ProtocolName = "Soap"; //指定访问协议。
importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。
importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
importer.AddServiceDescription(description, null, null); //添加WSDL文档。
// 4. 使用 CodeDom 编译客户端代理类。
CodeNamespace nmspace = new CodeNamespace(); //命名空间
CodeCompileUnit unit = new CodeCompileUnit();
unit.Namespaces.Add(nmspace);
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters parameter = new CompilerParameters();
parameter.GenerateExecutable = false;
parameter.ReferencedAssemblies.Add("System.dll");
parameter.ReferencedAssemblies.Add("System.XML.dll");
parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
parameter.ReferencedAssemblies.Add("System.Data.dll");
CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);
// 5. 使用 Reflection 调用 WebService。
Assembly asm = result.CompiledAssembly;
Type t = asm.GetType(className); //参数为web服务中的类名
object o = Activator.CreateInstance(t);
MethodInfo method = t.GetMethod(methodName);//参数方法名
resultA = (string)method.Invoke(o, parameters);
}
catch (Exception ex)
{
resultA = ex.ToString();
}
return resultA;
}
/// <summary>
/// webservice返回是DataSet的,使用该方法
/// </summary>
/// <param name="url">调用webservice的url</param>
/// <param name="className">webservice的类</param>
/// <param name="methodName">调用webservice的方法</param>
/// <param name="parameters">方法的参数</param>
/// <returns>DataSet</returns>
public DataSet resultDataSet(string url, string className, string methodName, object[] parameters)
{
DataSet resultA =null;
try
{
// 1. 使用 WebClient 下载 WSDL 信息。
WebClient client = new WebClient();
url = url + "?WSDL";
Stream stream = client.OpenRead(url);
// 2. 创建和格式化 WSDL 文档。
ServiceDescription description = ServiceDescription.Read(stream);
// 3. 创建客户端代理代理类。
ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。
importer.ProtocolName = "Soap"; //指定访问协议。
importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。
importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
importer.AddServiceDescription(description, null, null); //添加WSDL文档。
// 4. 使用 CodeDom 编译客户端代理类。
CodeNamespace nmspace = new CodeNamespace(); //命名空间
CodeCompileUnit unit = new CodeCompileUnit();
unit.Namespaces.Add(nmspace);
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters parameter = new CompilerParameters();
parameter.GenerateExecutable = false;
parameter.ReferencedAssemblies.Add("System.dll");
parameter.ReferencedAssemblies.Add("System.XML.dll");
parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
parameter.ReferencedAssemblies.Add("System.Data.dll");
CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);
// 5. 使用 Reflection 调用 WebService。
Assembly asm = result.CompiledAssembly;
Type t = asm.GetType(className); //参数为web服务中的类名
object o = Activator.CreateInstance(t);
MethodInfo method = t.GetMethod(methodName);//参数方法名
resultA = (DataSet)method.Invoke(o, parameters);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return resultA;
}
}
}
以上是.cs中的代码。
private void button3_Click(object sender, EventArgs e)
{
myWebServiceNameSpace.myWebServiceClass myWeb = new myWebServiceNameSpace.myWebServiceClass();
string url = "http://10.19.1.55/123/WebService1.asmx";
string className = "WebService1";
string methodName = "addition";
object[] parameters = new object[2];
parameters[0] = 1;
parameters[1] = 2;
double a = myWeb.resultString(url, className, methodName, parameters);
MessageBox.Show(a.ToString());
}
以上是主程序中的代码。