【发布时间】:2012-05-19 11:31:13
【问题描述】:
我有一个使用 SL4 的 silverlight 客户端和一个使用 .NET 4 的 C# 服务器。服务器在 4525 上打开一个端口,客户端打算连接到该端口。现在,如果我可以要求您简单地阅读以下内容,我们可能可以避免我不得不发布任何进一步的代码:
客户端尝试与服务器建立连接,打开策略文件的连接,请求策略文件,并返回策略文件。没有发生的是客户端中的 onConnect 事件。在我实现策略服务器之前,客户端会在 4525 上连接,并执行 onConnect 事件,但由于没有策略服务器而立即失败。现在我已经实现了策略服务器,它似乎永远不会检测到它的交付完成。
这里是传输摘要:
Client:
<policy-file-request/>
Server:
<?xml version="1.0" encoding ="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from>
<domain uri="*:4525" />
</allow-from>
<grant-to>
<socket-resource port="4525" protocol="tcp" />
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
有效;我要回答的唯一问题是:我是否遗漏了我的策略文件中的某些内容,或者我是否需要以任何特定方式结束其向客户的提交,以便我的客户检测其交付?
Things of note:
The Client successfully establishes its connection to the policy server
The policy server successfully writes the policy back to the client
The 'real' servers port is successfully opened
The client 'can' connect to the 'real' server
感谢大家的宝贵时间,我相信有人能够提供帮助。
代码请求 客户端连接
不确定这对寻找答案是否有任何进一步的影响;但是:
private static DnsEndPoint IP_END_POINT = new DnsEndPoint("192.168.0.36", 4525, AddressFamily.InterNetwork);
public MainPage()
{
try
{
InitializeComponent();
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketAsyncEventArgs connectEventArgs = new SocketAsyncEventArgs();
connectEventArgs.RemoteEndPoint = IP_END_POINT;
connectEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(ConnectionEstablished);
socket.ConnectAsync(connectEventArgs);
}
catch (Exception e)
{
}
}
新开发 “连接已建立”触发!
事实证明,如果我想要一分钟左右,我的“ConnectionEstablished”事件最终会触发。然而,我从中得到的并不是那么令人鼓舞。
我最终得到一个 SocketError 的“AccessDenied”,并显示一条消息“试图以一种访问权限禁止的方式访问套接字。”,正如可以预料的那样,我的服务器从不接受连接.我知道服务器已经打开了端口,并且可以接受连接,所以这是相当令人困惑的场景。
再次感谢大家的帮助。
【问题讨论】:
-
很难说不知道您使用什么系统将 Silverlight 应用程序与服务器连接。
-
“系统”是什么意思?我在 Windows 7 环境、客户端和服务器中运行。 Chrome 正在运行客户端。服务器为策略服务器和“真实”服务器打开一个 TcpListener。
-
您还想知道什么?
-
据我所知,只有一种方法可以将 Silverlight Socket 连接到任何类型的服务器,那就是通过 ConnectAsync 方法,正如我所提到的,我知道该方法有效。跨度>
-
客户端如何连接到TcpListener?问题大概就在那里。我没有我的套接字代码,但如果你可以发布你的代码(说明客户端如何启动连接),我会在大约 6 小时后回家查看它。
标签: c# silverlight sockets cross-domain-policy