当前位置:编程学习 > C#/ASP.NET >>

如何动态调用要身份验证的webservice?

正常不要验证的如下代码,
但是我的webservice是要用户user,密码password的,所以我加上了下面的代码
            web.Credentials = new System.Net.NetworkCredential("user", "password");在 WebClient web = new WebClient();
之后,但是测试发现总是抛出 "请求因 HTTP 状态 401 失败: Unauthorized。"这是什么原因,请高手指点

   private object InvokeWebservice(string url, string classname, string methodname, object[] args)
    {
        try
        {
            WebClient web = new WebClient();

            //   Stream stream = web.OpenRead("http://202.153.196.44/goweb/testWebService.asmx?WSDL");
            Stream stream = web.OpenRead(url + "?WSDL");


            ServiceDescription description = ServiceDescription.Read(stream);

            ServiceDescriptionImporter importer = new ServiceDescriptionImporter();

            importer.ProtocolName = "Soap"; // 指定访问协议。
            importer.Style = ServiceDescriptionImportStyle.Client; // 生成客户端代理。
            importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;

            importer.AddServiceDescription(description, null, null); // 添加 WSDL 文档。

            CodeNamespace nmspace = new CodeNamespace(); // 为代理类添加命名空间,缺省为全局空间。
            CodeCompileUnit unit = new CodeCompileUnit();
            unit.Namespaces.Add(nmspace);

            ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
            CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");

            CompilerParameters parameter = new CompilerParameters();
            parameter.GenerateExecutable = false;
            parameter.GenerateInMemory = true;
            parameter.ReferencedAssemblies.Add("System.dll");
            parameter.ReferencedAssemblies.Add("System.XML.dll");
            parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
            parameter.ReferencedAssemblies.Add("System.Data.dll");

            CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);

            if (!result.Errors.HasErrors)
            {
                Assembly asm = result.CompiledAssembly;
                Type t = asm.GetType(classname); // 如果在前面为代理类添加了命名空间,此处需要将命名空间添加到类型前面。


                object obj = Activator.CreateInstance(t);
                MethodInfo method = t.GetMethod(methodname);
                 

                return method.Invoke(obj, args);
            }
            else return null;


        }
        catch (Exception ex)
        {
            throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
        }
    } --------------------编程问答-------------------- 学习中 --------------------编程问答-------------------- 就是在 return method.Invoke(obj, args); 抛出的请求因 HTTP 状态 401 失败: Unauthorized。"
如果把IIS设为可以匿名访问就可以正常执行 --------------------编程问答-------------------- 帮顶
正在学习 --------------------编程问答-------------------- 帮你顶上去,一定不能让它沉下去。
同时关注此问题 --------------------编程问答-------------------- 顶。。同求答案 --------------------编程问答-------------------- 看下微软提供的一个范例,通过保存session和加密,配合数据库来验证 --------------------编程问答-------------------- 实现身份验证,参考
http://developer.51cto.com/art/200908/141829.htm --------------------编程问答-------------------- 我想知道的是,服务器端配置了不能匿名访问
提供给你账号密码了,怎么动态调用webservice

--------------------编程问答-------------------- webService 做用户验证可以写到SERvice中...自已手写一个,或用系统的验证方式都可以..

你说的慝名访问的问题,是流览器端对服务器的一个访问权限分配的问题.. --------------------编程问答-------------------- 如果不想用惹名访问权限,可以在你服务器上添加一个权限把惹名访问设置为你新加的用户!~ --------------------编程问答-------------------- 楼上朋友可能还不太理解我的意思

服务器端非我所能控制,那边给的就是url地址,和账号、密码

客户端如何用动态调用的方式去调用这个webservice(我不用添加web引用的方式) --------------------编程问答-------------------- mark --------------------编程问答--------------------
引用 11 楼 randomfeel 的回复:
楼上朋友可能还不太理解我的意思

服务器端非我所能控制,那边给的就是url地址,和账号、密码

客户端如何用动态调用的方式去调用这个webservice(我不用添加web引用的方式)


asp.net(C#) 据我所知调WEBSERVICE可以就只有添加web引用的方式

你添加了WEB引用后
声明一个对象,对对像做设置..便如..web.url="给你的Url地址"

是不是用户名与密码也需要那样设置.还得看他给你WS的协议,或使用说明!~!~ --------------------编程问答-------------------- web引用的我知道怎么做,但是这个webservice比较奇怪。。用web引用我试过很多次都调用不成功

用楼主的这种方法可以成功,但是这种方法我不知道怎么设置用户名和密码。。。 --------------------编程问答-------------------- up~~~~~~~ --------------------编程问答-------------------- 顶上啊!!!求解啊。。。 --------------------编程问答--------------------
引用 14 楼 randomfeel 的回复:
web引用的我知道怎么做,但是这个webservice比较奇怪。。用web引用我试过很多次都调用不成功

用楼主的这种方法可以成功,但是这种方法我不知道怎么设置用户名和密码。。。


NetworkCredential 这就是提供用户名、密码的地方啊。

至于楼主的,我估计他根本不清楚用户名和密码,或者说他写的东西可能是从网上抄来的而不是服务器端真实调试过的。 --------------------编程问答-------------------- MARK!!
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,