<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技術已經出現很多年了,也在.net界混的風生水起,同時.net也是一個高度封裝的框架,作為在wcf食物鏈最頂端的我們所能做的任務已經簡單的不能再簡單了, 再簡單的話馬路上的大媽也能寫wcf了,好了,wcf最基本的概念我們放在后面慢慢分析,下面我們來看看神奇的3個binding如何KO我們實際場景中的80%的業務場景。 ## 一:basicHttpBinding   作為入門第一篇,也就不深入談談basic中的信道棧中那些啥東西了,你只需要知道有ABC三個要素,注意不是姨媽巾哦,如果需要詳細了解,可以觀賞我[以前的系列](http://www.cnblogs.com/huangxincheng/archive/2011/10/23/2221845.html)。在 這里我就不多說了,太簡單的東西沒意思,先看個例子簡單感受了,你只需知道的是basic走的是http協議就好了,傳輸消息為soap。 1\. 契約 ~~~ using System.Runtime.Serialization; using System.ServiceModel; namespace MyService { [ServiceContract] public interface IHomeService { [OperationContract] int GetLength(string name); } } ~~~ 2\. 實現類 ~~~ using System; using System.Messaging; using System.Threading; namespace MyService { public class HomeService : IHomeService { public int GetLength(string name) { return name.Length; } } } ~~~ 3\. 服務啟動 ~~~ using System; using System.ServiceModel; namespace MyService { class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(HomeService))) { try { host.Open(); Console.WriteLine("服務開啟!"); Console.Read(); } catch (Exception e) { Console.WriteLine(e.Message); } } } } } ~~~ 4\. 配置config文件 ~~~ <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <bindings> <netTcpBinding> <binding name="IHomeServiceBinding" /> </netTcpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name=""> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> <services> <service name="MyService.HomeService"> <endpoint address="http://127.0.0.1:1920/HomeService" binding="basicHttpBinding" contract="MyService.IHomeService"> <identity> <dns value="localhost" /> </identity> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="http://127.0.0.1:1920"/> </baseAddresses> </host> </service> </services> </system.serviceModel> </configuration> ~~~ 5\. 然后通過 servicehost 啟動服務端 ~~~ using System; using System.ServiceModel; namespace MyService { class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(HomeService))) { try { host.Open(); Console.WriteLine("服務開啟!"); Console.Read(); } catch (Exception e) { Console.WriteLine(e.Message); } } } } } ~~~ ![](https://box.kancloud.cn/2015-08-04_55c0aff1e4b32.png) 好了,到現在為止,服務端全部開啟完畢,接下來我們通過“添加服務引用”,來添加對客戶端的引用 ~~~ using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { HomeServiceReference.HomeServiceClient client = new HomeServiceReference.HomeServiceClient(); var s = client.GetLength("12345"); Console.WriteLine("長度為:{0}", s); Console.Read(); } } } ~~~ ![](https://box.kancloud.cn/2015-08-04_55c0aff243b95.png) 麻蛋,就這么簡單,是的,就這樣簡單的五步,基于http的通信就這樣被不小心的完成了,真不好意思。 ## 二:netTcpBinding   有了basic的代碼,現在我們要改成tcp通信,這會通信走的是字節流,很簡單,改一下服務端的config文件就好了,大家也知道這種性能要比basic好。 ~~~ <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="mxbehavior"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> <services> <service name="MyService.HomeService" behaviorConfiguration="mxbehavior"> <endpoint address="net.tcp://localhost:19200/HomeService" binding="netTcpBinding" contract="MyService.IHomeService"> <identity> <dns value="localhost" /> </identity> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> <host> <baseAddresses> <add baseAddress="http://localhost:1920/HomeService"/> </baseAddresses> </host> </service> </services> </system.serviceModel> </configuration> ~~~ ## 三:netMsmqBinding   msmq這個玩意,我想大家都清楚,一個物理上的文件,好處呢,你也明白,就是client和service的所有通信都要經過它的手,這樣任何一方出了問題,只要 它在就沒問題了。同樣我們把tcp改成msmq也是非常簡單的,不過要注意,msmqbinding中是不可以讓契約方法有返回值的。所以我們加上isoneway就好了。 ~~~ using System.Runtime.Serialization; using System.ServiceModel; namespace MyService { [ServiceContract] public interface IHomeService { [OperationContract(IsOneWay = true)] void GetLength(string name); } } ~~~ 然后我在mmc上新建一個消息隊列,如下: ![](https://box.kancloud.cn/2015-08-04_55c0aff30afda.png) 然后我們再改動以下配置文件 ~~~ <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="mxbehavior"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> <bindings> <netMsmqBinding> <binding name="msmqbinding"> <security mode="None"/> </binding> </netMsmqBinding> </bindings> <services> <service name="MyService.HomeService" behaviorConfiguration="mxbehavior"> <endpoint address="net.msmq://localhost/private/homequeue" binding="netMsmqBinding" contract="MyService.IHomeService" bindingConfiguration="msmqbinding"> <identity> <dns value="localhost" /> </identity> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="http://localhost:19200/HomeService"/> </baseAddresses> </host> </service> </services> </system.serviceModel> </configuration> ~~~ ![](https://box.kancloud.cn/2015-08-04_55c0aff35954f.png) 縱觀上面的三種binding,配置起來何其簡單,底層的各種通訊協議貌似對我來說都是透明的,其實呢???wcf在底層做了何其多的事情,而我卻沒有挖掘。。。 這對碼農里說也是一種悲哀啊。。。出了問題就只能禱告上天。。。下一篇我會開始深入剖析。
                  <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>

                              哎呀哎呀视频在线观看