当前位置: 代码迷 >> ASP.NET >> 如何代码操作Web Service里的EndPoint节点中的Address
  详细解决方案

如何代码操作Web Service里的EndPoint节点中的Address

热度:2126   发布时间:2013-02-25 00:00:00.0
怎么代码操作Web Service里的EndPoint节点中的Address
XML code
        <client>            <endpoint address="http://localhost:1002/FileCenter/Document_Service.asmx"                binding="basicHttpBinding" bindingConfiguration="Document_ServiceSoap"                contract="FileServer_Service.Document_ServiceSoap" name="Document_ServiceSoap" />        </client>


想把Address那个属性变成动态赋值的


怎么弄??

------解决方案--------------------------------------------------------
我教你动态去调用WS吧。
C# code
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Net;using System.IO;using System.Web.Services.Description;using System.CodeDom;using Microsoft.CSharp;using System.CodeDom.Compiler;using System.Reflection;namespace WebServicesHelp{    /// <summary>    /// 调用传统的WebService    /// Add by Dylan     /// Date 2012/03/08    /// </summary>    public class InvokeWebService    {        /// <summary>        /// 调用传统webservice(不知道类名)        /// </summary>        /// <param name="url">服务地址</param>        /// <param name="methodName">方法名</param>        /// <param name="args">方法参数</param>        /// <returns></returns>        public static object InvokeWS(string url, string methodName, object[] args)        {            return InvokeWS(url, null, methodName, args);        }        /// <summary>        ///         /// </summary>        /// <param name="url">服务地址</param>        /// <param name="calssName">类名</param>        /// <param name="methodName">服务地址</param>        /// <param name="args">方法参数</param>        /// <returns></returns>        public static object InvokeWS(string url, object calssName, string methodName, object[] args)        {            string namespaceStr = "WebServicesHelp";//WebServicesHelp            if (calssName == null )            {                calssName = InvokeWebService.GetWsClassName(url);            }            try            {                //获取WSDL                WebClient wc = new WebClient();                Stream stream = wc.OpenRead(url + "?WSDL");//例如:http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl                ServiceDescription sd = ServiceDescription.Read(stream);//读取服务描述                #region 摘自MSDN                //使用 ServiceDescriptionImporter 类可以方便地将 WSDL 说明中包含的信息导入到 System.CodeDom.CodeCompileUnit 对象                //通过调整 Style 参数的值,可以指示 ServiceDescriptionImporter 实例生成客户端代理类                //(通过透明调用该类可提供 Web 服务的功能)或生成抽象类(该类封装 Web 服务的功能而不实现该功能)。                //然后可直接调用或以选择的语言导出生成的 CodeCompileUnit 对象中的代码。                #endregion                ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();                sdi.AddServiceDescription(sd, "", "");                CodeNamespace cn = new CodeNamespace(namespaceStr);                //动态生成客户端代理类代码                CodeCompileUnit ccu = new CodeCompileUnit();                ccu.Namespaces.Add(cn);                sdi.Import(cn, ccu);                CSharpCodeProvider csc = new CSharpCodeProvider();//提供对 C# 代码生成器和代码编译器的实例的访问。                //ICodeCompiler icc = csc.CreateCompiler();//ICodeCompiler接口在.NET 2.0中就过时了                               //设定编译参数                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);//.NET 2.0就过时了                CompilerResults cr = csc.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());                }                //生成代理实例,并使用反射调用方法                Assembly assembly = cr.CompiledAssembly;                Type[] types = assembly.GetTypes();//获取该程序集中所有的类型(方便异常调试时候检查)                Type t = assembly.GetType(namespaceStr + "." + calssName);                MethodInfo[] methodInfo = t.GetMethods();//获取该类包含的所有方法信息(方便异常调试时候检查)                object obj = Activator.CreateInstance(t);//获取实例                MethodInfo mi = t.GetMethod(methodName);                return mi.Invoke(obj, args);//调用实例方法,返回结果                //object obj = assembly.CreateInstance(namespaceStr + "." + calssName);//必须使用名称空间+类名称 --获得对象实例                //result = (string)mi.Invoke(obj, args);//调用实例方法               // result = (string)mi.Invoke(null, args);//静态方法                          //return result;            }            catch (Exception ex)            {                //写日志 ......               // throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));                throw new Exception(ex.Message);            }        }        /// <summary>        /// 根据web服务公开的URL地址,获取“类名”        /// </summary>        /// <param name="wsUrl">http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getDatabaseInfo</param>        /// <returns>"MobileCodeWS"</returns>        private static string GetWsClassName(string wsUrl)        {            string[] parts = wsUrl.Split('/');            string[] pps = parts[parts.Length - 1].Split('.');            return pps[0];        }    }}
  相关解决方案