Web Service 中有如方法
 [WebMethod(Description="名片用户 输入用户名,密码登录系统",EnableSession=true)]
    public bool ValidateUser(string userName,string password)
    {
        if(userName=="admin"&&password=="admin")
         return true;
        return false;
    }代理类中使用如下方法可以成功调用:    [System.Web.Services.Protocols.SoapDocumentMethodAttribute(RequestNamespace = "http://callcard.zdit.cn/")]
    public bool ValidateUser(string userName, string password)
    {
        object[] objs = new object[] { userName, password };
        object[] results = this.Invoke("ValidateUser",objs);
        return (bool)(results[0]);
    }
但使用 把以上方法中的参数名改为基它名字, 就不能成功执行.
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute(RequestNamespace = "http://callcard.zdit.cn/")]
   public bool ValidateUser(string name, string pwd)
   {
        object[] objs = new object[] { name, pwd};
        object[] results = this.Invoke("ValidateUser",objs);
        return (bool)(results[0]);
    }

解决方案 »

  1.   

    如果改了则应该跟webserivce的wsdl对应不起来了,也就是不匹配了,所以调用失败,个人理解
      

  2.   

    也就是说,更改之后的代理类不符合原webservice的定义了。你调用时传递的soap消息中的name和pwd节点不符合原webservice定义。
      

  3.   

    调用不成功的意思是..
    可以执行到Web Service 定义的方法中去.
    但参数就没有传过去了.如.调用第二个ValidateUser:
    ValidateUser("name","pwd");
    到了Web Service中就成了执行ValidateUser(null,null)
      

  4.   

    正常啊,客户端发往服务段的soap消息中的userName和password节点没有赋值,因为代理类中定义的是name和pwd节点。所以匹配不起来,我觉得这个问题你多看看webservice基本概念就行了,sdk的文档里有。我觉得我的看法是基本对的
      

  5.   

    XML解析中,无法找到userName的节点。。
    因为你传过去的是NAME,
    userName节点值为null
      

  6.   

    要调用Web Service中的ValidateUser(string userName,string password)又想在代理类中用
    [........]
    Login(string userName,string password )

        .....
    }
    该如何写..
      

  7.   

    即代理类中的方法名 和Service中的方法名不同...
    应该如何写
      

  8.   

    我使用
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute(
            Action = "http://callcard.zdit.cn/ValidateUser",
            RequestNamespace = "http://callcard.zdit.cn/",
            RequestElementName = "ValidateUser",
            ResponseElementName = "Login"
            )]
        public bool Login(string userName, string password)
        {
            object[] results = this.Invoke("Login", new object[] { userName, password });
            return (bool)(results[0]);
        }
    这种方法来调用...
    但执行后的结果又无法返回来..