为什么我的Silverlight套接字策略文件不起作用?(Why does my Silverlig

2019-10-29 07:07发布

我有一个Silverlight客户端,使用SL4,并使用.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,和“且试图通过其访问权限不允许的方式来访问的插座。”的消息,并且可以预期,我的服务器从来没有接受连接。 我知道服务器端口开放,并且可以接受的连接,所以这是非常令人困惑的情况。

再次感谢任何人的帮助。

Answer 1:

尝试:

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);

        if(!socket.ConnectAsync(connectEventArgs))
        {
            ConnectionEstablished(/*Insert Args*/); //Handle real time execution
        }
    }
    catch (Exception e)
    {
        //write error somewhere
    }
}

该文件指出,如果ConnectAsync返回false,那么“关于System.Net.Sockets.SocketAsyncEventArgs的SocketAsyncEventArgs.Completed事件e参数将不会引发传入的对象。”

此外,请确保您的地方记录异常。 有可能是一个例外,你只是发虚过去。

更新

  • 你是否检查了ClientAccessPolicy.xml文件? 您需要用”替换所有的“和”字。
  • 您是否尝试过加入connectEventArgs.UserToken = socket;ConnectAsync(connectEventArgs)电话吗?
  • 在服务器接收请求和发送应答(可能需要使用Wireshark的客户端上的)?
  • 虽然调试并connectEventArgs.Completed指向正确的方法是什么?
  • 调试时,如果“步过”(F10),直到方法返回时会发生什么? 其他的方法叫什么?
  • 调试时,如果“步过”(F10) socket.ConnectAsync(connectEventArgs)但仍处于法)是那里的调试>窗口>线程窗口其他线程? 如果切换到另一个线程(右键单击线程并选择“切换到线程”或双击该线程),会发生什么?

让我知道事情最终会如何。



文章来源: Why does my Silverlight Socket Policy File not work?