天天看點

Silverlight 4 的 WCF NET.TCP 協定

介紹

您可能已經知道 Silverlight 4 測試版釋出了,它有很多新的功能。net.tcp 綁定支援是其中一項最重要的功能。現在在 Silverlight 4 中我們可以通過 WCF web 服務使用的 net.tcp 協定。

如果您已經使用過 Silverlight 3 你可能會有一些 WCF web 服務。Silverlight 3 中你隻是限于使用 WCF 服務基礎的 http 綁定。其中一個 Silverlight 3 主要性能方面的改進是添加序列化和反序列化的二進制格式的基本 http 綁定到二進制編碼的可能性。預設情況下 Net.tcp 綁定使用二進制消息編碼。

為什麼要使用 net.tcp 綁定?

net.tcp 綁定的主要好處是性能。如果在您的安全的 intranet 環境中的 WCF 服務要快速的 Silverlight 應用程式進行通信可以使用此綁定。 

現在此 net.tcp 綁定的目的,是要在 intranet 環境中使用。因為此協定是 Silverlight Socket 實作的基礎上生成的同一網絡安全限制的限制。Silverlight Socket TCP的限制端口範圍是 4502 – 4534 。是以,它要求在我們可以控制防火牆配置環境。以這種方式我們可以輕松地監視 Silverlight 應用程式通信和維護企業網絡的安全性。

Net.tcp 協定在 Silverlight 中的也不支援傳輸層安全性。為例,我們不能有 SSL 通信。

Net.tcp 雙功能支援

net.tcp 綁定的另一個重要好處是,支援雙工通信。現在我們可以使用同一個 HTTP 投票從以前版本的 Silverlight 雙工代理,并隻需指定該代理将使用 net.tcp 綁定,一切都将工作。我們可以使 WCF 服務使用 HTTP Internet 用戶端輪詢雙工的協定,并為内網用戶端使用 net.tcp 協定。程式設計模型是和以前一樣的,使用方法很簡單。

安裝的問題

當我試圖調試使用 net.tcp 綁定一個 WCF 應用程式的示例我遇到了以下問題。我經常收到錯誤: net.tcp 的協定不支援

Silverlight 4 的 WCF NET.TCP 協定

看來 Visual Studio 內建 Cassino 伺服器支援隻有 HTTP 激活。是以之後,我試着将部署到 IIS 應用程式。

隻 IIS7 有為 net.tcp 綁定支援,是以您必須具有 IIS7,您的計算機上安裝了。

對 Windows 程序激活服務 (WAS) 承載 WCF 服務與内部 IIS7 net.tcp 綁定。若要啟用 WAS 上承載 IIS7 的 net.tcp 你必須做幾件事:

1) 您必須啟用 Windows Communication Foundation 的 HTTP 激活功能。IIS 的一個重要功能是能夠在收到該應用程式的 HTTP 請求的激活一個 web 應用程式。一個類似的功能存在 IIS7 的 net.tcp,但它不可能在預設情況下啟用。

Silverlight 4 的 WCF NET.TCP 協定

2) 您必須設定應用程式使用已啟用的.net 4.0 架構,并且必須啟用 net.tcp 協定。

Silverlight 4 的 WCF NET.TCP 協定

3) 您還必須使用端口的 net.tcp 綁定 4502 – 4534 範圍内。

Silverlight 4 的 WCF NET.TCP 協定

或者,您可以跳過第二和第三步,做得更快、 更快使用指令提示符。IIS 提供了一個新的指令行實用程式,配置網站: Appcmd.exe。指令将用新的綁定支援預設的 web 站點更新配置檔案 WAS,applicationHost.config:

%windir%\system32\inetsrv\appcmd.exe set site           
"Default Web Site" -+bindings.[protocol=          
'net.tcp',bindingInformation='*']        

之後,您需要檢查 net.tcp 受監聽端擴充卡服務是否正在運作。您可以通過執行以下指令 sc query NetTcpActivator或在服務中查找:

Silverlight 4 的 WCF NET.TCP 協定

如果您收到以下錯誤: 找不到比對的終結點的綁定 NetTcpBinding 在計劃 net.tcp 的基址。已注冊的基址計劃是 [http]

Silverlight 4 的 WCF NET.TCP 協定

此問題可能是因為您還沒有在服務 web.config 檔案中指定的 net.tcp 綁定的基址。你需要指定一個類似于下面的基址:

endpoint address="net.tcp://localhost:4502/wcservice/Service.svc"      

如果我們要生成用戶端代理,并且我們有我們的服務中隻指定 net.tcp 綁定我們必須使用 net.tcp 綁定設定該中繼資料 Exchange (mex) 終結點:

<endpoint address="mex"         
binding="mexTcpBinding"         
contract="IMetadataExchange" />        

也要允許共享同一個端口上不同的服務我們必須啟用端口共享服務的 net.tcp。我們可以通過在指令提示符下執行以下指令: C:\sc.exe config NetTcpPortSharing start= demand

之後,您必須允許通過 TCP 通信 Silverlight 應用程式。伺服器必須明确允許這樣的連接配接。這是通過 TCP 端口費為 943 上公開一個 TCP Socket政策。

這是一Socket的示例政策檔案看起來像:

<?xml version="1.0" encoding ="utf-8"?>      
<access-policy>      
<cross-domain-access>      
<policy>      
<allow-from>      
<domain uri="*"/>      
</allow-from>      
<grant-to>      
<socket-resource port="4502-4506" protocol="tcp" />      
</grant-to>      
</policy>      
</cross-domain-access>      
</access-policy>      

為了使我們的開發更容易,從 Microsoft 庫 Janczuk 已建立控制台應用程式的免費模闆,如 TCP 套接字政策伺服器。

Silverlight 4 的 WCF NET.TCP 協定

以後,您可以用它做同樣的事,在托管伺服器上的 windows 服務。此控制台應用程式接收來自 Silverlight 用戶端的請求,并将套接字政策檔案傳回到用戶端。您必須通過 TCP 通信的 Silverlight 應用程式的伺服器上運作此控制台應用程式。

Silverlight 4 的 WCF NET.TCP 協定

之後,我們有了跨域服務。

摘要

Silverlight 4 測試版 Net.tcp 綁定支援,可以說是最重要的新功能。它給我們帶來卓越的性能,但一些安全限制了端口的限制。是以,建議将其用于企業網絡應用程式或安全的環境中,您可以控制防火牆設定的情況下。它可以是很好的替代方安,對之前的雙工 HTTP 或Basic HTTP 綁定的環境中。此協定支援一個簡單的使用 WCF 雙工的程式設計模型。我希望在不久的将來我們會看到一個不安全限制的情況下在 Silverlight net.tcp 綁定多更好的支援。

轉載于:https://www.cnblogs.com/jacle169/archive/2012/12/09/2810036.html