我有一个使用 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”,以及一条消息“试图以一种被其访问权限禁止的方式访问套接字。”,正如可以预料的那样,我的服务器从不接受连接。我知道服务器打开了端口,并且可以接受连接,所以这是相当令人困惑的场景。
再次感谢任何人的帮助。