在程序代码中集成跨域服务文件

由于silverlight跨域文件在很多分布式应用开发中非常常用,其中一些简单的应用中并不须要在程序发布后让用户来动态配置跨域的xml文件,这样程序目录中又要多出一个xml的跨域文件这样显得没什么必要而且增加了发布的复杂性,所以我通过如下方法实现了在程序中直接让跨域文件集成在代码中。

我在启动跨域服务的同时,把跨域文件的定义也集成到代码中了。你也可以通过一些自定义的程序功能去动态地成生跨域文件的动态性。这样一样可以达到让用户去配置跨域规则的功能。而且不用再带着那个clientaccesspolicy.xml文件。呵呵。。

以下是我在启动跨域服务时的代码:

 1:          //本?文?源′创′地?址·:http://funsl.com
 2:          internal void StartupPolicyServer(int maxOnlines)
 3:          {
 4:              _policyBuffer = new byte[371];
 5:              Stream str = new MemoryStream(System.Text.ASCIIEncoding.Default.GetBytes(
 6:  @"<?xml version=""1.0"" encoding =""utf-8""?>
 7:  <access-policy>
 8:    <cross-domain-access>
 9:          <policy>
10:              <allow-from>
11:                  <domain uri=""*"" />
12:              </allow-from>
13:              <grant-to>
14:                  <socket-resource port=""4502-4534"" protocol=""tcp"" />
15:              </grant-to>
16:          </policy>
17:      </cross-domain-access>
18:  </access-policy>"));
19:              //本?文?源′创′地?址·:http://funsl.com
20:              str.Read(_policyBuffer, 0, _policyBuffer.Length);
21:  
22:              _listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
23:              _listener.Bind(new IPEndPoint(IPAddress.Any, 943));
24:              _listener.Listen(maxOnlines);
25:  
26:              _listener.BeginAccept(new AsyncCallback(OnClientConnect), null);
27:          }
28:  

然后通过以下代码启动:

1:  //本?文?原-创′地?址·:http://funsl.com
2:  jacSocket.crossDomain cd = new jacSocket.crossDomain();
3:  cd.StartupPolicyServer(200);
4:  

其中StartupPolicyServer()的参数为跨域服务接爱最大接入客户端数量,请按你的实际情况填写。

posted @ 2012-12-10 09:06  黎东海  阅读(205)  评论(0编辑  收藏  举报