string url = "http://10.120.206.156/Venus4A/services/Venus4AService/WebServiceTest.wsdl";
object hasAlive = WebServiceHelper.InvokeWebService(url,"validateTicket","validateTicket",null);public static object InvokeWebService(string url, string classname, string methodname, object[] args) {
  try {
    string@namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
    if ((classname == null) || (classname == "")) {
      string[] parts = url.Split('/');
      string[] pps = parts[parts.Length - 1].Split('.');
      classname = pps[0];
    }    System.Net.WebClient wc = new System.Net.WebClient();

    System.IO.Stream stream = wc.OpenRead(url + "?WSDL");
    System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream);
    System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter();
    sdi.AddServiceDescription(sd, "", "");
    System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace(@namespace);
    System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();
    ccu.Namespaces.Add(cn);
    sdi.Import(cn, ccu);    Microsoft.CSharp.CSharpCodeProvider csc = new Microsoft.CSharp.CSharpCodeProvider();
    System.CodeDom.Compiler.ICodeCompiler icc = csc.CreateCompiler();    System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.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");    System.CodeDom.Compiler.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 + "Service", true, true);
    Type t = assembly.GetType(@namespace + "." + classname, true, true);
    object obj = Activator.CreateInstance(t);
    System.Reflection.MethodInfo mi = t.GetMethod(methodname);
    if (args == null) return mi.Invoke(obj, null);
    else return mi.Invoke(obj, args);
  } catch(Exception ex) {
    throw ex;
  }
}总是报出 基础连接已关闭,无法连接远程服务。各位大侠,帮帮忙,找找原因以及解决方法。跪求答案。在线等!!!!!走到红色部分时出的问题!

解决方案 »

  1.   

    string url = "http://10.120.206.156/Venus4A/services/Venus4AService/WebServiceTest.wsdl";
      

  2.   

    不行啊!原先的地址是http://10.120.206.156/Venus4A/services/Venus4AService 出现这个问题
    改成这样后 http://10.120.206.156/Venus4A/services/Venus4AService/WebServiceTest 还是出现这个问题。这是那个wsdl文件
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions targetNamespace="http://10.120.206.156:8089/Venus4A/services/Venus4AService" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://10.120.206.156:8089/Venus4A/services/Venus4AService" xmlns:intf="http://10.120.206.156:8089/Venus4A/services/Venus4AService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <!-- 
    WSDL created by Apache Axis version: 1.3
    Built on Oct 05, 2005 (05:23:37 EDT)  -->
    <wsdl:message name="validateTicketRequest">
    <wsdl:part name="name" type="xsd:string"/>
    </wsdl:message>
    <wsdl:message name="validateTicketResponse">
    <wsdl:part name="validateTicketReturn" type="xsd:string"/>
    </wsdl:message>
    <wsdl:portType name="WebServiceTest">
    <wsdl:operation name="validateTicket" parameterOrder="name">
    <wsdl:input message="impl:validateTicketRequest" name="validateTicketRequest"/>
    <wsdl:output message="impl:validateTicketResponse" name="validateTicketResponse"/>
    </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="Venus4AServiceSoapBinding" type="impl:WebServiceTest">
    <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="validateTicket">
    <wsdlsoap:operation soapAction=""/>
    <wsdl:input name="validateTicketRequest">
    <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://venus4Atest" use="encoded"/>
    </wsdl:input>
    <wsdl:output name="validateTicketResponse">
    <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://10.120.206.156:8089/Venus4A/services/Venus4AService" use="encoded"/>
    </wsdl:output>
    </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="WebServiceTestService">
    <wsdl:port binding="impl:Venus4AServiceSoapBinding" name="Venus4AService">
    <wsdlsoap:address location="http://10.120.206.156:8089/Venus4A/services/Venus4AService"/>
    </wsdl:port>
    </wsdl:service>
    </wsdl:definitions>
      

  3.   

    不行啊!原先的地址是http://10.120.206.156/Venus4A/services/Venus4AService 出现这个问题
    改成这样后 http://10.120.206.156/Venus4A/services/Venus4AService/WebServiceTest 还是出现这个问题。这是那个wsdl文件
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions targetNamespace="http://10.120.206.156:8089/Venus4A/services/Venus4AService" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://10.120.206.156:8089/Venus4A/services/Venus4AService" xmlns:intf="http://10.120.206.156:8089/Venus4A/services/Venus4AService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <!-- 
    WSDL created by Apache Axis version: 1.3
    Built on Oct 05, 2005 (05:23:37 EDT)  -->
    <wsdl:message name="validateTicketRequest">
    <wsdl:part name="name" type="xsd:string"/>
    </wsdl:message>
    <wsdl:message name="validateTicketResponse">
    <wsdl:part name="validateTicketReturn" type="xsd:string"/>
    </wsdl:message>
    <wsdl:portType name="WebServiceTest">
    <wsdl:operation name="validateTicket" parameterOrder="name">
    <wsdl:input message="impl:validateTicketRequest" name="validateTicketRequest"/>
    <wsdl:output message="impl:validateTicketResponse" name="validateTicketResponse"/>
    </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="Venus4AServiceSoapBinding" type="impl:WebServiceTest">
    <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="validateTicket">
    <wsdlsoap:operation soapAction=""/>
    <wsdl:input name="validateTicketRequest">
    <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://venus4Atest" use="encoded"/>
    </wsdl:input>
    <wsdl:output name="validateTicketResponse">
    <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://10.120.206.156:8089/Venus4A/services/Venus4AService" use="encoded"/>
    </wsdl:output>
    </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="WebServiceTestService">
    <wsdl:port binding="impl:Venus4AServiceSoapBinding" name="Venus4AService">
    <wsdlsoap:address location="http://10.120.206.156:8089/Venus4A/services/Venus4AService"/>
    </wsdl:port>
    </wsdl:service>
    </wsdl:definitions>