我一整天都在尝试让我的 Silverlight 应用程序与 WCF net.tcp 绑定一起工作并且无法成功,即使在我看来我已经做对了所有事情,包括在谷歌搜索之后......
我有一个带有 basicHttpBinding 端点的 WCF 服务,它运行良好,并且由于我的 WCF 服务和我的 Silverlight 应用程序在同一个网络上,我告诉自己“为什么不尝试 HTTP 以外的其他东西?”
所以我开始用谷歌搜索看看必须做什么,这是我做了什么:
服务器
- 检查 Net.Tcp Listener Adapter 服务是否正在运行
IIS
- 在我的网站上启用 net.tcp 绑定,绑定信息设置为“4502:*”
- 向托管我的 WCF 服务的应用程序添加了 net.tcp 协议
- 在 clientaccesspolicy.xml 文件中添加了一个策略以允许端口 4502-4536 上的套接字连接
WCF 服务
- 添加了一个 net.tcp 绑定,Security 设置为 None
- 为我的服务添加了一个带有此绑定的端点,保持常规 HTTP 端点
完成所有这些之后,我可以将我的 WCF 服务与 WcfTestClient 一起使用,它可以看到两个端点(HTPP 和 net.tcp),并且它们都像魅力一样工作。
在我的 Silverlight 应用程序中,我可以更新我的服务引用(我添加了我的服务的 HTTP 地址,而不是 TCP 一个),它还可以看到两个端点,因为它在 ServiceReferences.ClientConfig 中添加了 TCP 端点。正如我在谷歌搜索时看到的,Silverlight 不支持 netTcpBinding,因此它将绑定描述为带有 a 和 a 元素的自定义绑定。
我在我遵循的不同教程中看到,对于 HTTP 绑定,Silverlight 要求提供一个套接字策略文件来检查客户端是否可以访问 WCF 服务。在 SL4 Beta 中,此文件由 TCP 在端口 943 上请求。对于 SL4 RC 和 RTM,它由 HTTP 在端口 80 上请求,因为它是用于 HTTP 绑定的。
问题是,当我使用设置为使用 net.tcp 绑定的代理启动我的应用程序时,我检查了 Fiddler,在任何时候都没有请求 clientaccesspolicy.xml,并且当套接字策略文件不是时出现经典错误present : TCP 错误代码 10013: 试图以访问权限禁止的方式访问套接字。
谷歌搜索后,我发现 SL 使用服务器的 IP 地址而不是其名称来查找此文件,但在客户端计算机上的浏览器中尝试http://IP_OF_MY_SERVER/clientaccesspolicy.xml会按预期提供文件...
所以我在这里有点迷路,我真的很想让它看到除了 HTTP 和 WCF 之外的东西......
有人有任何线索猜测会发生什么???由于该服务与带有 net.tcp 绑定的 WcfTestCLient 一起按预期工作,我猜这与 SL 有特殊关系......
谢谢阅读 :-)