• Flex 调用添加了SoapHeader的web service


    1.NET中撰写需要使用SoapHeader验证的Web Service

    代码1:WebService.cs

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

    [WebService(Namespace = "http://www.microsoft.com/")] //名字空间,注意FLEX中调用的时候要手工填写
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
             public class WebService : System.Web.Services.WebService {

             public WebService () {}

             public AuthenticationInfo authenticationInfo;

             [WebMethod]
             [SoapHeader("authenticationInfo")] //为服务添加SoapHeader
             public string HelloWorld() {
                      if (authenticationInfo == null)  {
                               return "验证信息不能为空."
                      }
                      else{
                               if (Authentication.Check(authenticationInfo.username, authenticationInfo.password))  {
                                       return "Hello world!"
                               }
                               else{
                                        return "用户名密码验证失败,你没有权力访问此服务。"
                               }
                      }
             }
    }

    //用户密码验证类
    public class Authentication {
             public static bool Check(string username, string password) {
                     return ((username == "user") && (password == "password"));
             }        
    }

     

    代码2:AuthenticationInfo.cs

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    /// <summary>
    /// AuthenticationInfo 的摘要说明
    /// </summary>
    public class AuthenticationInfo:System.Web.Services.Protocols.SoapHeader{
             public AuthenticationInfo() { }
             public AuthenticationInfo(string username ,string password)         {
                      this.username = username;
                      this.password = password;
             }
             public string username;
             public string password;
    }

     

    2 在.NET中调用使用了SoapHeader的Web Service

    代码3:Form1.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1{
             public partial class Form1 : Form{
                      public Form1() {
                               InitializeComponent();
                      }
                      private void button1_Click(object sender, EventArgs e){
                               localhost.WebService service = new WindowsApplication1.localhost.WebService();
                               localhost.AuthenticationInfo au = new WindowsApplication1.localhost.AuthenticationInfo();
                               au.username = textBox1.Text;
                               au.password = textBox2.Text;
                               service.AuthenticationInfoValue = au;
                               label3.Text = service.HelloWorld();
                      }
             }
    }

     

    3 在Flex调用此Web Service

    代码4:SoapHeaderTest.mxml

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontFamily="simsun" fontSize="12">
    <mx:Script>
    <![CDATA[
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.soap.SOAPHeader;
            private function Invoke():void{
                    ws.clearHeaders(); //先清理一下
                    var auinfo:Authentication = new Authentication(txtUser.text,txtPassword.text); //
                    ws.addHeader(auinfo); //添加
                    ws.HelloWorld(); //调用服务
            }
            private function wsResult(event:ResultEvent):void{
                    lblInformation.text= event.result.toString();
            }
            private function wsFault(event:FaultEvent):void{
                    lblInformation.text= event.message.toString();
            }
    ]]>
    </mx:Script>
    <mx:WebService id="ws" wsdl="http://localhost:4443/WebSites/WebService.asmx?WSDL"
    result="wsResult(event)" fault="wsFault(event)"/>
    <mx:TextInput id="txtUser" x="98" y="94"/>
    <mx:TextInput id="txtPassword" x="98" y="124"/>
    <mx:Label x="29" y="98" text="User:"/>
    <mx:Label x="29" y="128" text="Password:"/>
    <mx:Button x="193" y="166" label="Invoke" click="Invoke()"/>
    <mx:Label x="29" y="213" text="Label" id="lblInformation"/>
    </mx:Application>

    代码5:AuthenticationInfo.as

    package{
            public class AuthenticationInfo{ //字段名称需和.NET端一致
                    public var username:String;
                    public var password:String;
            }
    }

    代码6:Authentication.as

    package{
            import mx.rpc.soap.SOAPHeader;

            public class Authentication extends SOAPHeader{
                    public var username:String;
                    public var password:String;
                    public function Authentication(user:String,password:String){
                            var content:AuthenticationInfo = new AuthenticationInfo();
                            content.username = user;
                            content.password = password;
                            var qname:QName = new QName("http://www.microsoft.com/","AuthenticationInfo");
                            super(qname, content);
                    }
            }
    }

  • 相关阅读:
    filecoin维基
    FIL挖矿未能幸存,中国从此再无矿业!
    区块链基础入门-经典
    JavaScript中的ReferenceError和TypeError等错误的区别
    ueditor富文本图片上传问题
    react ice tree报错type
    react 表单项动态删除,删掉的是最后一个,因为index
    react 踩坑之input框输一个字会自动失去光标
    用blob下载音乐文件
    用blob下载音频并改名
  • 原文地址:https://www.cnblogs.com/mobile/p/636856.html
Copyright © 2020-2023  润新知