麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

.net在不同情況下調用帶soapheader的webservice的方式

2019-11-14 13:56:28
字體:
來源:轉載
供稿:網友

國慶長假到了,本想出去玩玩,無奈自己屌絲一枚,啥都沒有,只能自己宅在家里思考思考人生。不過人生還是過于復雜,一時間也想不出個所以然,只能是整理一下在工作中遇到的一些小問題,首先是關于帶soapheader的webservice。

 

一、webservice大家都用的比較頻繁,有時也有一些帶soapheader的webservice,首先一種最簡單的調用soapheader的情況就是,如果對方的webservice也是用.net寫的,可能會是這種方式

     [WebMethod]        [SoapHeader("Header")]        public string HelloWorld()        {            if (Header.username == "admin" && Header.passWord == "123")            {                return "Hello World";            }            else            {                throw new Exception("驗證失敗");            }        }        public class AuthHeader : SoapHeader        {            public string username;            public string password;        }

之后我們在通過添加服務引用或者是利用vs的wsdl工具生成代理類,都會把上面的AuthHeader類型給生成好,我們要做的就是簡單的賦值工作了

public void PRocessRequest(HttpContext context)        {            context.Response.ContentType = "text/plain";            //要調用的webservice的類型,自動生成在代理類中            SoapHeaderTest soapTest = new SoapHeaderTest();            //要調用的soapheader的類型,自動生成在代理類中            AuthHeader authHeader = new AuthHeader();            authHeader.username = "admin";            authHeader.password = "123";            soapTest.AuthHeaderValue = authHeader;            string content = soapTest.HelloWorld();            context.Response.Write(content);        }

通過這種方式就可以通過驗證調用webservice獲取返回信息了。

 

二、有些時候我們發現我們調用對方的webservice一直失敗,然后添加的服務引用或者是代理類中也沒有soapheader的類型,然后客戶告訴我們,你要調用接口必須傳soapHeader,這個soapHeader在.net中是這樣的

    [DataContract(Namespace = "http://xxx.xxx.xxxxx")]    public class AuthHeader    {        public string username { get; set; }        public string password { get; set; }    }

我們把這個AuthHeader按照上面的格式寫好。然后在調用webservice中的方法之前加上我們的soapheader,代碼如下:

        //添加服務引用生成的類型            SoapTestService.SoapHeaderTestSoapClient client = new SoapTestService.SoapHeaderTestSoapClient();            //客戶告訴我們AuthHeader的類型,然后自己在程序中對應寫出來            AuthHeader header = new AuthHeader();            header.username = "admin";            header.password = "123";            //開始加入監控頭信息            AddressHeader soapheader = AddressHeader.CreateAddressHeader("AuthHeader",  // Header Name                                       "http:xxx.xxx.xxxxx",//地址頭的命名空間                                       header);//傳人的AuthHeader            EndpointAddressBuilder eab = new EndpointAddressBuilder(client.Endpoint.Address);            eab.Headers.Add(soapheader);//將地址頭加入進去            client.Endpoint.Address = eab.ToEndpointAddress();            //結束加入監控頭信息

之后在調用webservice的方法就可以成功調用并獲取返回內容了。

 

三、最后一種情況就是人家只告訴你需要加一個這樣的

<AuthHeader>

<username>用戶名</username>

<password>密碼</password>

</AuthHeader>

這個時候就需要使用我們的SoapUI了,我們來用soapui看看我們報文吧

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">   <soap:Header/>   <soap:Body>      <tem:HelloWorld/>   </soap:Body></soap:Envelope>

發現怎么<soap:Header/>中是空的呢,然后我們按照別人給的格式將soapheader中填上

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">   <soap:Header>      <AuthHeader>         <username>admin</username>         <password>123</password>      </AuthHeader>   </soap:Header>   <soap:Body>      <tem:HelloWorld/>   </soap:Body></soap:Envelope>

然后這樣發送過去,發現webservice成功訪問并且接收到返回值了,哎,任務時間比較緊迫,只能用最簡單也是最笨的方法了,替換數據然后在把報文發過去

 string url = ConfigurationManager.AppSettings["ContractWebService"].ToString();                                //通過webservice的地址創建HttpWebRequest                                var webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url));                                webRequest.Accept = "text/xml";                                webRequest.Method = "POST";//請求方式,必須寫                                //將請求報文寫進去                                using (var requestStream = webRequest.GetRequestStream())                                {                                    using (var textWriter = new StreamWriter(requestStream))                                    {                                        textWriter.Write(SoapXml);//這里的soapxml就是我們要發送報文的字符串                                    }                                }                                       //發出請求并且獲取響應信息                                WebResponse wr = webRequest.GetResponse();                                string retString = "";                                //將返回的xml格式的報文取出                                using (Stream myResponseStream = wr.GetResponseStream())                                {                                    using (StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("UTF-8")))                                    {                                         retString = myStreamReader.ReadToEnd();                                    }                                }

最終返回的xml中的內容也只能是自己解析了。。。

可能遇到后面兩種情況的會少一些,希望大家有其他的方式可以分享一下。最后祝大家國慶節快樂!


上一篇:C#筆記謄錄

下一篇:えええ

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 在线中文资源免费 | 精品国产欧美一区二区 | 日韩欧美高清片 | 黄色二区三区 | 成人在线视频精品 | 亚洲第一色片 | 欧美激情性色生活片在线观看 | 久久精品国产精品亚洲 | 中文欧美日韩 | 中文字幕网站在线 | 成人三级黄色片 | 久产久精品 | 爱草成年 | 成人在线视频在线观看 | 性爱视频在线免费 | 美女被免费网站在线软件 | 亚洲伊人色欲综合网 | 狼人狠狠干 | 国产91免费看| 亚洲成人免费电影 | 亚洲国产美女视频 | 草久影视| 国产成人精品区一区二区不卡 | 久久亚洲精品久久国产一区二区 | 欧美视频国产 | 中文字幕一区二区三区四区 | 精品国产一区二区三区四区阿崩 | 国产羞羞视频在线免费观看 | 黄色免费入口 | 一级免费观看 | 越南一级黄色片 | 欧美国产91 | 99sesese| 欧美精品亚洲人成在线观看 | 特片网久久 | 国产成人高清在线 | 欧美另类激情 | 欧美精品网址 | 成人免费观看av | 一区二区久久精品66国产精品 | 精品一区二区视频在线观看 |