WCF中幾個基本知識點整理

來源:互聯網
上載者:User
 整理了幾個WCF裡幾個基本知識點:

1、WCF中的Message

WCF中的訊息對象Message,是有狀態的。它的狀態是MessageState枚舉。共有以下幾種類型:

 

public enum MessageState
{
    Created,
    Read,
    Written,
    Copied,
    Closed
}

對Message對象,只有在Create狀態下,才能讀,否則讀取會有異常。Message

同樣定義了許多Write之類的方法,這些Write方法同樣也只能用於處於Created的訊息。

 

在WCF中,有可能需要對訊息進行一些讀取、等操作。但是讀取操作會改變Message的

狀態,導致再次讀取會有異 常。這時,可以使用Message定義的CreateBufferedCopy方法。

它的簽名如下:

public MessageBuffer CreateBufferedCopy(int maxBufferSize); 

它返回的是MessageBuffer對象,它能進行多次Create而返回Message對象,並且Message的狀態為Created。

2、WCF中的訊息編碼格式:Text、MTOM、Binary。Text格式是與平台無關的;MTOM,基於WS-*MTOM規範,是

大資料量位元據以SOAP傳輸時最佳化使用的格式,也與平台無關;Binary是以二進位格式編碼,

只用於.Net平台上。

3、中繼資料交換終結點中繼資料交換終結點是一類特殊的終結點,也成為MEX 終結點,它支援中繼資料交換的標準;

服務可以根據他發布自己的中繼資料。

對於WebService來說,它是通過WSDL的方式發布中繼資料,這樣對於WebService來說,

是自動發布服務的中繼資料資訊,於是我們可以通過WSDL工具產生WebService的代理類。

 在WCF中,服務是可以選擇不發布中繼資料資訊的,即使是對於它所支援跨平台HTTP協議。

但是我們可以通過發布中繼資料交換終結點,產生服務的代理。

 

WCF自動為服務宿主自動提供了IMetadataExchange介面的實現。對於中繼資料交換終結點,

WCF提供了專門的繫結元素用以對不同的協議(如:HTTP、TCP、IPC)的支援。如HTTP則對應

mexHttpBinding;對於Tcp則對應mexTcpBinding;對於IPC則對應mexNamedPipeBinding。

以下就是對於HTTP、TCP、IPC這幾種協議下中繼資料交換終結點的配置:

 

<system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="mex">
                    <serviceMetadata/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service name="Service.CalculatorService" behaviorConfiguration="mex">
                <host>
                    <baseAddresses>
                        <add baseAddress="net.tcp://127.0.0.1:3636/mexTcp" />
                        <add baseAddress="http://127.0.0.1:6363/mexHttp"/>
                        <add baseAddress="net.pipe://127.0.0.1"/>
                    </baseAddresses>
                </host>
                <endpoint address="net.tcp://localhost:3636/SessionfulCalculator" binding="netTcpBinding" contract="Contract.ICalculator"></endpoint>
                <endpoint address="http://localhost:6363/SessionfulCalculator" binding="wsHttpBinding" contract="Contract.ICalculator"></endpoint>
                <endpoint address="netpipe" binding="netNamedPipeBinding" contract="Contract.ICalculator"></endpoint>
                <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange">    </endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">    </endpoint>
                <endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange">    </endpoint>
            </service>
        </services>
    </system.serviceModel> 

這樣,不管服務所支援的HTTP、TCP、IPC等方式,我們都可以通過SVCUtil工具組建代理程式類

進而訪問服務。

在WCF中,對於HTTP協議而言,我們可以通過直接佈建服務的行為,通過httpGetEnabled="true"

的方式來發布服務的中繼資料資訊,而它不支援其他協議;對於其他協議我們希望發布中繼資料資訊,

通過配置的方式顯然是一種很好的方式。

對於中繼資料交換終結點配置,如:<endpoint address="mex" binding="mexNamedPipeBinding" 

contract="IMetadataExchange"></endpoint>

 

如果address配置為空白或者與behavior中 name配置相同,則可以直接通過SVCUtil加上

baseAddress組建代理程式類。如:

 

如果address和behavior中 name配置不同則組建代理程式類時SVCUtil 需要加上baseAddress +

<endpointaddress="mex" binding="mexNamedPipeBinding"contract="IMetadataExchange" />

中的address的屬性值。如 :

 

使用中繼資料交換終結點時,如果服務所支援的終結點綁定支援HTTP協議,不論如下配置:<behavior name="mex">                    

 <serviceMetadata httpGetEnabled="false"/>

</behavior>

 中httpGetEnabled的值如何,都能組建代理程式類。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.