110,536
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
namespace LenWebService
{
/// <summary>
/// Service1 的摘要说明
/// </summary>
[WebService(Namespace = "http://localhost/LenWebService/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public int Add2(int a)
{
return a + 2;
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Net;
using System.Web;
using System.Web.Services;
using System.Web.Services.Description;
using System.Web.Services.Protocols;
using System.Xml.Serialization;
namespace SV
{
public partial class frmCommunity : Form
{
public frmCommunity()
{
InitializeComponent();
}
private void btnChk_Click(object sender, EventArgs e)
{
WebClient client = new WebClient();
string url = this.txtUrl.Text.ToString().Trim();
Stream stream = client.OpenRead(url);
ServiceDescription description = ServiceDescription.Read(stream);
ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
importer.ProtocolName = "Soap";
importer.Style = ServiceDescriptionImportStyle.Client;
importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
importer.AddServiceDescription(description, null, null);
CodeNamespace nmspace = new CodeNamespace();
nmspace.Name = "LenWebService";
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.OutputAssembly = "LenWebClient.dll";
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);
if (result.Errors.HasErrors)
{
lsLog.Items.Add("有错");
}
Assembly asm = Assembly.LoadFrom("LenWebClient.dll");
Type t = asm.GetType("LenWebService.Service1");
object o = Activator.CreateInstance(t);
MethodInfo HelloWord = t.GetMethod("HelloWorld");
string Result = (string)HelloWord.Invoke(o, null);
lsLog.Items.Add(result);
lsLog.Items.Add("结束");
}
private void frmCommunity_Load(object sender, EventArgs e)
{
this.txtUrl.Text = "http://localhost/lenwebservice/service1.asmx?WSDL";
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace SV
{
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name = "Service1Soap", Namespace = "http://localhost/LenWebService/")]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(object[]))]
class LenWebClient : System.Web.Services.Protocols.SoapHttpClientProtocol
{
public LenWebClient()
{
this.Url = "http://localhost/lenwebservice/service1.asmx";
}
[System.Web.Services.Protocols.SoapDocumentMethodAttribute(
"http://localhost/LenWebService/Service1",
RequestNamespace = "http://localhost/LenWebService/",
ResponseNamespace = "http://localhost/LenWebService/",
Use = System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public string HellowWorld()
{
object[] results = this.Invoke("HelloWorld", null);
return ((string)(results[0]));
}
public int Add2(int a)
{
object[] results = this.Invoke("Add2", new object[] { a });
return ((int)(results[0]));
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name = "Service1Soap", Namespace = "http://localhost/LenWebService/")]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(object[]))]
public class SimpleProxy : System.Web.Services.Protocols.SoapHttpClientProtocol
{
public SimpleProxy()
{
this.Url = "http://localhost/lenwebservice/service1.asmx";
}
[System.Web.Services.Protocols.SoapDocumentMethodAttribute(
"http://localhost/LenWebService/Service1",
RequestNamespace = "http://localhost/LenWebService/",
ResponseNamespace = "http://localhost/LenWebService/",
Use = System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int Add2(int a)
{
object[] results = this.Invoke("Add2", new object[] { a });
return ((int)(results[0]));
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Services;
using System.Net;
using System.IO;
using System.Web.Services.Description;
using System.CodeDom;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
namespace HZZYKJ.RTFWS.WEBSERVICE
{
public class WebServiceForRTS
{
#region InvokeWebService
/// <summary>
/// 动态调用WebService
/// </summary>
/// <param name="url">WebService地址</param>
/// <param name="methodname">方法名(模块名)</param>
/// <param name="args">参数列表,无参数为null</param>
/// <returns>object</returns>
public static object InvokeWebService(string url, string methodname, object[] args)
{
return WebServiceForRTS.InvokeWebService(url, null, methodname, args);
}
public static object InvokeWebService(string url, string methodname)
{
return WebServiceForRTS.InvokeWebService(url, null, methodname, null);
}
/// <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 InvokeWebService(string url, string classname, string methodname, object[] args)
{
string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
if ((classname == null) || (classname == ""))
{
classname = WebServiceForRTS.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 csc = new CSharpCodeProvider();
ICodeCompiler icc = csc.CreateCompiler();
//设定编译参数
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);
}
catch (Exception ex)
{
throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
}
}
//最终的返回amsx文件名
private static string GetWsClassName(string wsUrl)
{
string[] parts = wsUrl.Split('/');
string[] pps = parts[parts.Length - 1].Split('.');
return pps[0];
}
#endregion
}
}