您可能已经知道 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 绑定的主要好处是性能。如果在您的安全的 intranet 环境中的 WCF 服务要快速的 Silverlight 应用程序进行通信可以使用此绑定。
现在此 net.tcp 绑定的目的,是要在 intranet 环境中使用。因为此协议是 Silverlight Socket 实现的基础上生成的同一网络安全限制的约束。Silverlight Socket TCP的限制端口范围是 4502 – 4534 。因此,它要求在我们可以控制防火墙配置环境。以这种方式我们可以轻松地监视 Silverlight 应用程序通信和维护企业网络的安全性。
Net.tcp 协议在 Silverlight 中的也不支持传输层安全性。为例,我们不能有 SSL 通信。
net.tcp 绑定的另一个重要好处是,支持双工通信。现在我们可以使用同一个 HTTP 投票从以前版本的 Silverlight 双工代理,并只需指定该代理将使用 net.tcp 绑定,一切都将工作。我们可以使 WCF 服务使用 HTTP Internet 客户端轮询双工的协议,并为内网客户端使用 net.tcp 协议。编程模型是和以前一样的,使用方法很简单。
当我试图调试使用 net.tcp 绑定一个 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,但它不可能在默认情况下启用。
2) 您必须设置应用程序使用已启用的.net 4.0 框架,并且必须启用 net.tcp 协议。
3) 您还必须使用端口的 net.tcp 绑定 4502 – 4534 范围内。
或者,您可以跳过第二和第三步,做得更快、 更快使用命令提示符。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或在服务中查找:
如果您收到以下错误: 找不到匹配的终结点的绑定 NetTcpBinding 在计划 net.tcp 的基址。已注册的基址计划是 [http]
此问题可能是因为您还没有在服务 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 套接字策略服务器。
以后,您可以用它做同样的事,在托管服务器上的 windows 服务。此控制台应用程序接收来自 Silverlight 客户端的请求,并将套接字策略文件返回到客户端。您必须通过 TCP 通信的 Silverlight 应用程序的服务器上运行此控制台应用程序。
之后,我们有了跨域服务。
Silverlight 4 测试版 Net.tcp 绑定支持,可以说是最重要的新功能。它给我们带来卓越的性能,但一些安全约束了端口的限制。因此,建议将其用于企业网络应用程序或安全的环境中,您可以控制防火墙设置的情况下。它可以是很好的替代方安,对之前的双工 HTTP 或Basic HTTP 绑定的环境中。此协议支持一个简单的使用 WCF 双工的编程模型。我希望在不久的将来我们会看到一个不安全约束的情况下在 Silverlight net.tcp 绑定多更好的支持。