vb调用 c#.net 需要用户验证的webservice方法
											服务器端用的是.net2005开发的很简单,用c#.net调用一点问题也没有,但vb6就不那么听话了。问题并不是因为vb6读取不到WebService方法,而是WebService进行加密后vb6的soapheader就不知道怎么用了以下为服务器端的代码(测试地址:"http://127.0.0.1/webtest/WebService.asmx")
Credentials.cs
 程序代码:
程序代码:using System;
using System.Web.Services.Protocols;
namespace TestWebService
{
    public class Credentials:SoapHeader
    {
        public string Name;
        public string Password;
    }
}WebService.asmx 的代码为
 程序代码:
程序代码:
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using  TestWebService;
namespace Web
{
    /// <summary>
    /// WebService 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://)]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class WebService : System.Web.Services.WebService
    {
        public WebService()
        {
        }
        public Credentials token;
        [WebMethod(Description = "带soap头的webservice")]
        [SoapHeader("token", Direction = SoapHeaderDirection.In)]
        public string HelloWorld(string username)
        {
            string name = username;
            if (token.Name == "admin" && token.Password == "123")
            {
                return "Hello World" + username;
            }
            else
            {
                throw new ApplicationException("Authentication Failed!");
            }
        }
        [WebMethod]
        public string GetTest(string str)
        {
            return "test"+"--"+str;
        }
    }
}
在.net的客房端调用
 程序代码:
程序代码:using System;
using System.Collections.Generic;
using System.Text;
namespace test
{
    public class MainClass
    {
        static void Main()
        {
            Console.Write(web());
            Console.ReadLine();
        }
        public static string web()
        {
            localhost.WebService myweb = new test.localhost.WebService();
            localhost.Credentials token = new test.localhost.Credentials();
            token.Name = "admin";
            token.Password = "123";
            myweb.CredentialsValue = token;
            try
            {
                return myweb.HelloWorld("hello");
            }
            catch
            {
                return ":(";
            }
        }
    }
}以上是c#.net调用是没有问题的
-------------------------------------------------------------------------------
接下来是用vb6来调用
 程序代码:
程序代码:
Option Explicit
'webservice  地址
Private Const wsurl = "http://127.0.0.1/webtest/WebService.asmx?wsdl"
'btn1_Click调用webservice的方法没有进行加密
Private Sub btn1_Click()
Dim soapclient3 As New SoapClient30
soapclient3.mssoapinit (wsurl)
MsgBox (soapclient3.GetTest("ReturnString"))
End Sub
'btn2_Click调用webservice的HelloWorld方法
Private Sub btn2_Click()
Dim soapclient3 As New SoapClient30
soapclient3.mssoapinit (wsurl)
'试了很多方法,实在不知道怎么样添加HeaderHandler 
'soapclient3.HeaderHandler 
MsgBox (soapclient3.HelloWorld("hello"))
End Sub
有谁知道针对我用.net写的服务端,用vb6来调用HelloWorld的方法



 
											





 
	    

 
	