WebService_Unity

WebService_Unity

#region 访问地址

    //服务地址,该地址可以放到程序的配置文件中,这样即使服务地址改变了,也无须重新编译程序。  
    string url = "http://192.168.0.1/gjddwWebService/services/RealTimeService";

    //客户端代理服务命名空间,可以设置成需要的值。  
    string ns = string.Format("ProxyServiceReference");

    //获取WSDL  
    WebClient wc = new WebClient();
    Stream stream = wc.OpenRead(url + "?WSDL");
    ServiceDescription sd = ServiceDescription.Read(stream);//服务的描述信息都可以通过ServiceDescription获取  
    string classname = sd.Services[0].Name;

    ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
    sdi.AddServiceDescription(sd, "", "");
    CodeNamespace cn = new CodeNamespace(ns);

    //生成客户端代理类代码  
    CodeCompileUnit ccu = new CodeCompileUnit();
    ccu.Namespaces.Add(cn);
    sdi.Import(cn, ccu);
    CSharpCodeProvider csc = new CSharpCodeProvider();

    //设定编译参数  
    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 = csc.CompileAssemblyFromDom(cplist, ccu);
    if (cr.Errors.HasErrors == true)
    {
        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 t = assembly.GetType(ns + "." + classname, true, true);
    object obj = Activator.CreateInstance(t);

    #endregion

你可能感兴趣的:(WebService_Unity)