WebService SoapHeader的使用

Web服务的简单Demo:
1.创建WebService

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;


public class MyServiceClassHeader : SoapHeader
{
    
public string UsN;
    
public string PaW;
}

/// <summary>
/// MyServiceClassHeader 的摘要说明
/// </summary>

[WebService(Namespace = "http://test/")]
[WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
public class MyServiceClass : System.Web.Services.WebService
{

    
public MyServiceClass()
    
{

        
//如果使用设计的组件,请取消注释以下行 
        
//InitializeComponent(); 
    }


    
public MyServiceClassHeader MSCH;

    [WebMethod]
    [SoapHeader(
"MSCH", Direction = SoapHeaderDirection.In)]
    
public string Login()
    
{
        
if (MSCH != null)
        
{
            
if (MSCH.MustUnderstand)
            
{
                
string UserName = MSCH.UsN;
                
string PassWord = MSCH.PaW;
                
if (UserName == "qbc" && PassWord == "qbc")
                
{
                    
return "登录成功!";
                }

                
else
                
{
                    
return "登录错误!";
                }

            }

            
else
            
{
                
return "消息头不是必懂的!";
            }

        }

        
else
        
{
            
return "无头消息!";
        }

    }


}

我们使用了一个新的类MyServiceClassHeader,而这个新类继承自SoapHeader这个。在这个MyServiceClassHeader中我们定义了两个公共变量UsNPaW,分别来存储用户名和密码。为了能帮助大家理解,我们简要的说明一下SoapHeader的用途,在Soap消息中可以包含一个消息的头,可以在这里添加并传递一些如用户名和密码等类似的简单数据,我们将在《系列》的后面介绍Soap消息的结构。在Login方法中还要多定义一个属性[SoapHeader("MSCH",Direction = SoapHeaderDirection.In)],这样我们就从消息头中取出了用户名和密码做验证并返回一个验证结果。

2.调用WebService
先要添加Web应用,改名为:WebAdd
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsPro
{
   
public partial class Login : Form
    
{
        
public Login()
        
{
            InitializeComponent();
        }


        
private void Btn_Login_Click(object sender, EventArgs e)
        
{
            MyServ.MyServiceClassHeader MyHeader 
= new MyServ.MyServiceClassHeader();
            MyServ.MyServiceClass MyWebServ 
= new MyServ.MyServiceClass();
            MyHeader.UsN 
= this.tB_UserName.Text;
            MyHeader.PaW 
= this.tB_PassWord.Text;
            MyHeader.MustUnderstand 
= true;
            MyWebServ.MyServiceClassHeaderValue 
= MyHeader;
            
string LoginOK = MyWebServ.Login();
            MessageBox.Show(LoginOK);
            
if (LoginOK == "登录成功!")
            
{
                
//……
            }

        }

}

首先我们要实例化WebService的SoapHeader类(第1行),然后给这个WebService的SoapHeader类中的各个成员赋值(第3行和第4行),第5行是说这个SoapHeader是否让WebService中的某个方法必须处理的(大家可以把值改为false运行后测试一下看看返回什么提示框),最关键的一句话是写使用SoapHeader必不可少的就是第6行,这句话是将这个实例化的SoapHeader具体绑定到一个WebService的某个类调用上,当调用绑定后的这个类时,就会在由代理类生成的Soap消息中将这个SoapHeader生成进去。之后就是我们前面介绍的调用WebService中的方法和显示返回值(第7行和第8行)。
        这里还必须要说明的是一定要实例化SoapHeader,绝对不能在调用WebService的某个方法之后才给SoapHeader各个成员赋值,在调用之前至于是先绑定还是先赋值均可。
原文地址:https://www.cnblogs.com/newwind521/p/725332.html