<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                通常我們去大保健的時候,都會找姑娘問一下這里能提供什么服務,什么價格,這時候可能姑娘會跟你口述一些服務或者提供一份服務清單,這樣的話大 家就可以做到童嫂無欺,這樣一份活生生的例子,在wcf中同樣是一個道理,只有client了解service能提供哪些功能,client才可以根據server提供的功能進行 消費,那問題來了,service怎么把功能提供給client進行選擇呢???這個就是我這一篇要聊的wsdl(web service description language)。。。 ## 一:wsdl    現在你已經知道了,wsdl就是server提供給client的清單,那下面問題就來了。server是如何提供的呢???你要是比較仔細的話,可能會知道我在上一 篇提到的一個endpoint,如下截圖。 ![](https://box.kancloud.cn/2015-08-04_55c0b0d0f31e3.png) 在上面這幅圖中,你可以看到,Homeservice提供了兩個端點,一個是“服務端點“,一個是“元數據端點”。并且你也看到了,元數據的端點地址是 http://192.168.16.16:19200/mex,當client通過svcutil訪問這個地址的時候,就拿到了server能提供的功能清單,然后client就可以根據這些功能生成一 個代理文件,然后的然后,就是你懂得,各種啪啪啪,XXXClient。 ## 二:眼見為實 1.見證wsdl  要想看見wsdl,你只需要通過http://localhost:19200打開服務地址、如下圖: ![](https://box.kancloud.cn/2015-08-04_55c0b0d128506.png) 然后點擊:http://localhost:19200/?singleWsdl ![](https://box.kancloud.cn/2015-08-04_55c0b0d1769dd.png) 現在你看到的就是server功能清單,太tmd的重量級了,已經完完全全果體在世人前了,下一小節我們再詳細的分析下。 2\. 見證client端的XXXclient   剛才我也說了,當你用vs做“服務引用”的時候,svcutil會根據http://localhost:19200/mex的地址來查看wsdl,然后生成代理,下面我們具體來看一下。 ![](https://box.kancloud.cn/2015-08-04_55c0b0d1909fe.png) 點擊確定之后,我們就可以看到在?Service References 文件夾下面生成了一個Reference.cs 文件。 ![](https://box.kancloud.cn/2015-08-04_55c0b0d20a31b.png) 然后我們打開Reference.cs,就可以看到一個繼承于ClientBase的HomeServiceClient。 ![](https://box.kancloud.cn/2015-08-04_55c0b0d22e176.png) ## 三:詳細分析wsdl文件   學wcf,你一定要像svcutil一樣能夠看得懂wsdl。 1\. 首先看下server提供了一個Update操作,參數是一個id,一個Student這個自定義的復雜類型,同時返回也是Student這個 ? ? 復雜類型。 ~~~ namespace MyService { [ServiceContract] public interface IHomeService { [OperationContract] Student Update(int id, Student stu); } } ~~~ ?2\. wsdl這個xml文件,剛才你也看到了,下面我們一個個節點看看 ? portType 和 operation節點   當你看到下面的截圖后,我想你也能猜的出來,portType就是契約(IHomeService),operation就是契約方法(Update),不過有點意思的是,在operation 下面你看到了一個input,一個output,這個就是所謂的 ”輸入消息“,”輸出消息”,那是什么意思呢??? 也就是說client到server的消息叫做“輸入消息”,server到 client端叫做“輸出消息”,到這里你應該似乎明白了,我C#中的Update方法是有入參和出參的,然而這映射到wsdl中就是兩條消息,input和output,這個也就是經典 的“請求-響應“模式。 ![](https://box.kancloud.cn/2015-08-04_55c0b0d793dbb.png) 好了,繼續往下看,在wsdl:input和wsdl:output中分別有一個Action屬性,這個非常有意思,wcf的底層就是通過這個地址來找到對應的方法,比如我們看到的代理 類中的Update方法上面就有這么一段。 ![](https://box.kancloud.cn/2015-08-04_55c0b0d7a8510.png) ? message 和 types節點   繼續往下看的話,你會發現input和output中還有一個message屬性,對應的為IHomeService_Update_InputMessage和IHomeService_Update_OutputMessage, 這個正好是message節點的引用,如下圖: ![](https://box.kancloud.cn/2015-08-04_55c0b0d9124e4.png) 從這個圖中,你可以看到input和output下面都有一個wsdl:part節點,這個就是表明input和output中需要攜帶的參數,比如element="tns:Update",就引用了 element中Name=Update的節點,如下圖: ![](https://box.kancloud.cn/2015-08-04_55c0b0d927774.png) 好了,最后我再截一張圖,可以看到,傳輸協議為soap,服務地址等等。。。然后就沒什么好說的了。 ![](https://box.kancloud.cn/2015-08-04_55c0b0d94079b.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看