客户提供一个web serivice的url, 客户强调里面提供的方法中有部分我们可以访问,有部分我们访问不了。
我曾经尝试用通过在VS.NET里add web service reference的方法进行编程,但是没有添加成功,提示“Unable to download following files from http://......?wsdl. Do you want to skip these files and continue?”(其中http://......为客户提供的url),我选择Yes跳过这个错误,但是访问不了引进的类。
后来我尝试用动态访问的方法去访问,结果并没有访问成功,得到“Unable to connect to the remote server”的错误提示,如下是我在网上搜的代码,并应用到我的代码里,请问大家,下面的代码有问题,还是这种方法本来就不是解决我问题的方法,大家有不有什么别的建议?在此先谢谢大家!
public static object InvokeWebService(string url, string methodname, object[] args)
{
try
{
string @namespace = "WebService.DynamicWebCalling";
string[] parts = url.Split('/');
string[] pps = parts[parts.Length - 1].Split('.');
string 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, true, true);
object obj = Activator.CreateInstance(t);
System.Reflection.MethodInfo mi = t.GetMethod(methodname);
return mi.Invoke(obj, args);
}
catch (Exception ex)
{
throw ex;
}
}
先换个开发环境试下吧。如果还不行就可能是服务的问题,联系客户处理下晒。
自己下载wsdl安装
看你现在的情况,还没有连上客户的web service
你先试下http://......?wsdl,这个服务在浏览器中能访问不?
要是不能访问说明,你们的客户端根本就连不上服务器,那就要想办法找出是网络除了问题,还是防火墙
能访问的话,你要问一下,可以那边web service调用的验证机制是怎么样的