<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 一: 服務是端點的集合   當你在開發wcf的時候,你或許已經注意到了一個service可以公布多個endpoint,確實是這樣,在wcf中有一句很經典的話,叫做“服務是端點的集合",就 比如說一個普普通通的服務,它就公布了一個服務端點,一個元數據端點,對吧。。。 ![](https://box.kancloud.cn/2015-08-04_55c0b2d2bb760.png) 仔細一想,這個問題就好玩了,既然一個service可以公布多個endpoint,而且我還知道wcf中有很多的binding,這些binding對應著很多的傳輸方式,那是不是 說我一個service可以用多種協議方法對外公布,比如說同時以nettcp,basic,msmqbinding,udp等方式公布,對吧,那這樣的話是不是超級好玩,如果對方 是非.net程序,那就可以調用我的basic,如果對方是.net程序,那是不是可以調用我的nettcp,對不對。。。當然啦,wcf無所不能,這是一個史上無比強大的牛 逼框架,牛逼的要死,已經逼得程序員只需隨便改幾個配置就能達到完全不一樣的效果。。。下面我同時用nettcp和basic的方式來同時公布服務,好了,現在我 們就來見證奇跡吧。。。 Service: ~~~ using System; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Channels; using System.Threading; namespace MyService { public class HomeService : IHomeService { public Student Update(Student message) { return new Student() { Name = "一線碼農" }; } } [DataContract] public class Student { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } } } ~~~ Host : ~~~ class Program1 { static void Main(string[] args) { ServiceHost host = new ServiceHost(typeof(HomeService), new Uri("http://192.168.1.105:1920")); host.AddServiceEndpoint(typeof(IHomeService), new BasicHttpBinding(), "HomeServie"); host.AddServiceEndpoint(typeof(IHomeService), new NetTcpBinding(), "net.tcp://192.168.1.105:1921/HomeServieTcp"); host.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = true }); host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex"); host.Open(); Console.Read(); } } ~~~ Client端: ~~~ class Program { static void Main(string[] args) { //basic 方式 ChannelFactory<IHomeService> factory = new ChannelFactory<IHomeService>(new BasicHttpBinding(), new EndpointAddress("http://192.168.1.105:1920/HomeServie")); var client = factory.CreateChannel(); var result = client.Update(new Student() { }); //nettcp方式 factory = new ChannelFactory<IHomeService>(new NetTcpBinding(), new EndpointAddress("net.tcp://192.168.1.105:1921/HomeServieTcp")); client = factory.CreateChannel(); result = client.Update(new Student() { }); } } ~~~ 通過上面的代碼,是不是已經發現,我在client端,既可以用basic的方式調用,又可以用nettcp的方式調用,這個技巧是不是感覺wcf無比強大呢??? ## 二:Host寄宿多個Service   我們知道wcf的寄宿方式有很多種,有iis,有windowservice,還有簡單方便的console方式,而默認情況下,我們最通常的方法都是一個service,一個寄宿, 而其實呢??? 其實一個寄宿host可以承載多個service,看起來是不是很好玩,如果說你有10個servcie,現在你只需要用一個console host就能寄宿起來,廢 話不多說,我演示一下給你看就好了。 Service: ~~~ namespace MyService { [ServiceContract] public interface IHomeService { [OperationContract] Student Update(Student message); } [ServiceContract] public interface IFlyService { [OperationContract] Student Fly(Student stu); } } ~~~ Host: ~~~ class Program1 { static void Main(string[] args) { //第一個: 這是Home服務 ServiceHost host = new ServiceHost(typeof(HomeService), new Uri("http://192.168.1.105:1920")); host.AddServiceEndpoint(typeof(IHomeService), new BasicHttpBinding(), "HomeServie"); host.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = true }); host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex"); host.Open(); Console.WriteLine("Home服務開啟。。。。"); //第一個: 這是Fly服務 var host2 = new ServiceHost(typeof(FlyService), new Uri("http://192.168.1.105:1930")); host2.AddServiceEndpoint(typeof(IFlyService), new BasicHttpBinding(), "FlyServie"); host2.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = true }); host2.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex"); host2.Open(); Console.WriteLine("Fly服務開啟。。。。"); Console.Read(); } } ~~~ ![](https://box.kancloud.cn/2015-08-04_55c0b2d9d667a.png) 有沒有看到,現在兩個服務都開啟了,這種方式看起來是不是很爽呀,否則的話,你需要開啟兩個Host,這樣的話,我的手續就精簡了。。。對吧。。 ## 三: Tcp中的端口共享    這玩意聽起來大家都懂,端口共享嘛,不就是兩個程序共享一個端口,對吧,在通常情況下,我們肯定會認為這無法做到,其實呢?在Wcf中我們還是可以玩 的,也就是一個PortSharingEnabled的事!!!如果說端口可以共享的話,那我們的service是不是就可以少開辟幾個端口呢?同樣這也方便我們進行service的管 理,下面我給大家繼續演示一下。。。很好玩的,么么噠 ![](https://box.kancloud.cn/2015-08-04_55c0b2da31db3.png) 可以看到,我的兩個host都是用1920的端口,并且現在我真的開啟起來啦。。。。好了,三種技巧都說到了,我想你在現實的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>

                              哎呀哎呀视频在线观看