Webservice返回SoapHeader


Webservice在請求中加入自定義的SoapHeader,比較常用的場景是在SoapHeader中攜帶用戶登陸信息,由服務端進行身份驗證。今天遇到一個需求,除了在請求時要攜帶SoapHeader外,在返回值中也要返回一個結構不同的SoapHeader對象。簡單點,在參數中增加ref  outHeader,也可以實現需求。但是客戶的WebService接口並不是這樣設計的。於是找到下面的處理方法:

定義兩個SoapHeader類:

    public class InSoapHeader : SoapHeader
    {

        public InSoapHeader()
        {

        }

        public string UserName { get; set; }

        public string Ip { get; set; }

        public string Token { get; set; }
    }

    public class OutSoapHeader : SoapHeader
    {

        public OutSoapHeader()
        {

        }

        public string Ip { get; set; }
    }

編寫WebService服務:

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class WebService1 : System.Web.Services.WebService
    {
        private InSoapHeader _inSoapHeader;

        public InSoapHeader InSoapHeader
        {
            get { return _inSoapHeader; }
            set { _inSoapHeader = value; }
        }

        private OutSoapHeader _outSoapHeader=new OutSoapHeader();//給定初始值,否則在返回時會null public OutSoapHeader OutSoapHeader
        {
            get { return _outSoapHeader; }
            set { _outSoapHeader = value; }
        }

        [WebMethod]
        [SoapHeader("InSoapHeader", Direction = SoapHeaderDirection.In)] [SoapHeader("OutSoapHeader", Direction = SoapHeaderDirection.Out)] public string HelloWorld()
        {
            OutSoapHeader.Ip = "123123";
            return string.Empty;
        }
    }

客戶端調用程序:

        private void btnCall_Click(object sender, EventArgs e)
        {
            ServiceReference1.WebService1SoapClient cli = new ServiceReference1.WebService1SoapClient();
            ServiceReference1.InSoapHeader inheader = new ServiceReference1.InSoapHeader() { Ip="127.0.0.1",Token="N",UserName="N"};
            ServiceReference1.OutSoapHeader outheader;

            string result = string.Empty;
            outheader=cli.HelloWorld(inheader,out result);//這時候返回值自動放到了參數中,和普通的方法還是有區別的。

            System.Diagnostics.Debug.WriteLine(outheader.Ip);
            //輸出123123
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM