WCF 學習筆記(二)

來源:互聯網
上載者:User
WCF中Host和Client端都可以使用app.config 進行配置,然後程式根據配置產生相應的方法。因為這些都被包進WCF中,所以使用者可以通過修改config 進行服務的設定。

在學習筆記 一中,我們實現了一個http協議下的C/S的結構的程式。
可以直接修改設定檔,來將其修改成一個tcp協議下的程式。
HostServer的app.config 修改如下: 1<?xml version="1.0" encoding="utf-8" ?>
 2<configuration>
 3  <system.serviceModel>
 4    <services>
 5      <service name="TESTWCF.MyData.MyDataService" behaviorConfiguration="serviceBehavior">
 6          <!--<endpoint binding="basicHttpBinding" contract="TESTWCF.MyData.IMyDataService" address="MyData" />-->
 7          <endpoint binding="netTcpBinding" contract="TESTWCF.MyData.IMyDataService" address="MyData" />
 8
 9          <!--<endpoint binding="mexHttpBinding" contract="IMetadataExchange" address="mex" />-->
10        <host>
11          <baseAddresses>
12            <!--<add baseAddress="http://localhost:8090"/>-->
13              <add baseAddress="net.tcp://localhost:8010"/>
14
15          </baseAddresses>
16        </host>
17      </service>
18    </services>
19
20    <behaviors>
21      <serviceBehaviors>
22        <behavior name="serviceBehavior">
23          <serviceMetadata httpGetEnabled="false" />
24        </behavior>
25      </serviceBehaviors>
26    </behaviors>
27  </system.serviceModel>
28</configuration>

這裡修改了binding的屬性,修改為netTcpBinding .並且修改baseAddresses中的協議的地址。
如果要修改別的方式,比如MSQ等,可以直接修改該檔案。
在WCF中支援9種邦定的方式,如下:
BasicHttpBinding: 用於把 WCF 服務當作 ASMX Web 服務。用於相容舊的Web ASMX 服務。
WSHttpBinding: 比 BasicHttpBinding 更加安全,通常用於 non-duplex 服務通訊。
WSDualHttpBinding: 和 WSHttpBinding 相比,它支援 duplex 類型的服務。
WSFederationHttpBinding: WS-Federation 安全通訊協議。
NetTcpBinding: 使用 TCP 協議,用於在區域網路(Intranet)內跨機器通訊。有幾個特點:可靠性、事務支援和安全,最佳化了 WCF 到 WCF 的通訊。限制是服務端和用戶端都必須使用 WCF 來實現。
NetNamedPipeBinding: 使用具名管道進行安全、可靠、高效的單機服務通訊方式。
NetMsmqBinding: 使用訊息佇列在不同機器間進行非串連通訊。
NetPeerTcpBinding: 使用 P2P 協議在多機器間通訊。
MsmqIntegrationBinding: 將 WCF 訊息轉化為 MSMQ 訊息,使用現有的訊息佇列系統進行跨機器通訊。如 MSMQ。

介面對應的協議及Encoding如下表:

如果要使HostServer同時支援Http。TCP的方式,可以直接上面中的注釋的部分開啟。

Client端app.config 修改以適應HostServer的修改。
app.config 修改後如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
  
    <client>
  <endpoint address="net.tcp://localhost:8010/MyData" binding="netTcpBinding"
                contract="TESTWCF.MyData.IMyDataService" />
      <!--<endpoint address="http://localhost:8090/MyData" binding="basicHttpBinding"
                contract="TESTWCF.MyData.IMyDataService" />-->
    </client>
  </system.serviceModel>
</configuration>

以上修改後,Client端變為使用tcp 的協議和HostServer互動。
以上修改均不需要修改code,既可實現。

另外,中午看過一遍文章,覺得在上一篇中,應該將MyData只定義介面的部分,而具體類可以定義在HostServer中,實現該介面,這樣做可以將介面部分定義為一個dll,可以供Client端使用,同時可以使具體的實現不能暴露出去。
當然Client已可以使用組建代理程式類的那種方法,但是覺得那樣很麻煩,直接使用定義好的介面給Client就好啊。

Client中使用ClientBase的類,繼承該類,實現不同的初始化函數可以使Client端更靈活的使用app.config中的定義。將在以後的學習中陸續記錄下各種的實現的方式。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.