国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

.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#筆記謄錄

下一篇:えええ

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 呼玛县| 南漳县| 雷波县| 丁青县| 南平市| 平原县| 婺源县| 神池县| 阳山县| 石景山区| 嵩明县| 垦利县| 谷城县| 宜兴市| 上犹县| 安龙县| 镇雄县| 宁海县| 彩票| 子洲县| 陆丰市| 葫芦岛市| 南和县| 松溪县| 垦利县| 吉首市| 新乡市| 马尔康县| 富锦市| 原阳县| 涞源县| 靖边县| 新安县| 宜丰县| 丰城市| 深州市| 缙云县| 托里县| 东安县| 新龙县| 和田县|