首页 新闻 会员 周边

请教访问web service的问题

0
悬赏园豆:50 [已关闭问题]

客户提供一个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;
            }
        }

水果篮子的主页 水果篮子 | 初学一级 | 园豆:153
提问于:2010-01-11 09:55
< >
分享
其他回答(2)
0

先换个开发环境试下吧。如果还不行就可能是服务的问题,联系客户处理下晒。

齐.net | 园豆:1421 (小虾三级) | 2010-01-11 10:11
我在我同事那里试过,也是不行。另外,客户那边一直强调我们可以访问一部分方法的
支持(0) 反对(0) 水果篮子 | 园豆:153 (初学一级) | 2010-01-11 10:21
那对客户有点无语了……, 你应该在看下那个地址得到的东西是否符合WSDL。
支持(0) 反对(0) 齐.net | 园豆:1421 (小虾三级) | 2010-01-11 11:48
0

自己下载wsdl安装

风浪 | 园豆:2996 (老鸟四级) | 2010-01-11 15:44
0

看你现在的情况,还没有连上客户的web service

你先试下http://......?wsdl,这个服务在浏览器中能访问不?

要是不能访问说明,你们的客户端根本就连不上服务器,那就要想办法找出是网络除了问题,还是防火墙

能访问的话,你要问一下,可以那边web service调用的验证机制是怎么样的

persialee | 园豆:3217 (老鸟四级) | 2010-01-13 09:49
能连得上,但是location指定的地址都是内部的,如http://10.0.0.....,这是不是他们的问题?
支持(0) 反对(0) 水果篮子 | 园豆:153 (初学一级) | 2010-01-13 15:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册