日期:2014-05-17  浏览次数:20457 次

怎么代码操作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.Reference