WCF 服务主机和 Silverlight 5 通过 net.tcp 的跨域策略文件

2023-11-29

我有一个本地托管的 WCF 服务和一个与之通信的 silverlight 5 应用程序。默认情况下,silverlight 在调用 WCF 服务时尝试通过 HTTP 获取跨域策略文件。我需要更改此设置,以便策略文件通过 net.tcp 端口 943 提供服务。

我已经设置了一个本地 tcp 监听器,它通过端口 943 提供策略文件,并且我有遵循了这个技术我建立了一个虚拟套接字连接,以便通过 TCP 获取策略文件,因为每个应用程序生命周期仅检索一次该文件。 tcp 服务器按预期受到攻击,我得到SocketError财产价值为Success(尽管我必须注意,启动侦听器后第一次访问 TCP 服务器时,结果始终是访问被拒绝)。

据我所知,策略文件要么无效,因为 silverlight 应用程序仍然无法连接,要么上述技术不适用于 silverlight 5。

我想知道的是我正在做的事情是否可行并且我做得正确,否则是否有其他方法可以通过 tcp 成功下载策略文件并消除通过 HTTP 检索它的需要。

Thanks


我写了一篇关于在 WPF 中托管 silverlight 以及将 WCF 与 http 侦听器一起使用的长文:

如何在 WPF 4 应用程序中托管 Silverlight 4 应用程序?

现在,虽然没有直接回答您的问题,但它确实展示了如何创建策略文件的 http 版本。

我还写了一些通过端口 943 提供策略侦听器的东西,但我找不到发布源代码的位置 - 所以我会继续挖掘。据我所知,silverlight 对策略文件进行级联查找,如果它在端口 80 上没有获得连接,它将在端口 943 上查找。

我希望这对某些地方有帮助。

好的,这是我用于 net.TCP 传输的策略侦听器,即不是基于 HTTP 的。我想您现在已经解决了这个问题,抱歉耽搁了。现在它可能对其他人有用。

我一直在寻找 MS 的东西,说它们从 HTTP 级联到 TCP,但是,我不能,因此不得不假设它是废话,然后又改变了。

无论哪种方式,如果您使用 net.TCP 服务进行调用,并且想要它的侦听器,则以下代码应该有所帮助:

#region "Policy Listener"

// This is a simple policy listener
// that provides the cross domain policy file for silverlight applications
// this provides them with a network access policy
public class SocketPolicyListener
{

    private TcpListener listener = null;
    private TcpClient Client = null;
    byte[] Data;
    private NetworkStream netStream = null;

    private string listenaddress = "";

    // This could be read from a file on the disk, but for now, this gives the silverlight application
    // the ability to access any domain, and all the silverlight ports 4502-4534
    string policyfile = "<?xml version='1.0' encoding='utf-8'?><access-policy><cross-domain-access><policy><allow-from><domain uri='*' /></allow-from><grant-to><socket-resource port='4502-4534' protocol='tcp' /></grant-to></policy></cross-domain-access></access-policy>";

    // the request that we're expecting from the client
    private string _policyRequestString = "<policy-file-request/>";

    // Listen for our clients to connect
    public void Listen(string ListenIPAddress)
    {
        listenaddress = ListenIPAddress;
        if (listener == null)
        {
            listener = new TcpListener(IPAddress.Parse(ListenIPAddress), 943);

            // Try and stop our clients from lingering, keeping the socket open:
            LingerOption lo = new LingerOption(true, 1);
            listener.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger,lo);
        }

        listener.Start();

        WaitForClientConnect();
    }

    private void WaitForClientConnect()
    {
        listener.BeginAcceptTcpClient(new AsyncCallback(OnClientConnected), listener);
    }

    public void StopPolicyListener()
    {
        if (Client.Connected)
        {
            // Should never reach this point, as clients
            // are closed if they request the policy
            // only clients that open the connection and
            // do not submit a policy request will remain unclosed
            Client.Close();
        }

        listener.Stop();
    }

    public void RestartPolicyListener()
    {
        listener.Start();
    }

    // When a client connects:
    private void OnClientConnected(IAsyncResult ar)
    {
        if (ar.IsCompleted)
        {
            // Get the listener that handles the client request.
            TcpListener listener = (TcpListener)ar.AsyncState;

            // End the operation and display the received data on 
            // the console.
            Client = listener.EndAcceptTcpClient(ar);

            // Try and stop our clients from lingering, keeping the socket open:
            LingerOption lo = new LingerOption(true, 1);
            Client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, lo);

            // Set our receive callback     
            Data = new byte[1024];
            netStream = Client.GetStream();
            netStream.BeginRead(Data, 0, 1024, ReceiveMessage, null);
        }

        WaitForClientConnect();
    }

    // Read from clients.
    public void ReceiveMessage(IAsyncResult ar)
    {
        int bufferLength;
        try
        {
            bufferLength = Client.GetStream().EndRead(ar);

            // Receive the message from client side.
            string messageReceived = Encoding.ASCII.GetString(Data, 0, bufferLength);

            if (messageReceived == _policyRequestString)
            {
                // Send our policy file, as it's been requested
                SendMessage(policyfile);

                // Have to close the connection or the
                // silverlight client will wait around.
                Client.Close();
            }
            else
            {
                // Continue reading from client. 
                Client.GetStream().BeginRead(Data, 0, Data.Length, ReceiveMessage, null);
            }
        }
        catch (Exception ex)
        {
            throw new Exception(Client.Client.RemoteEndPoint.ToString() + " is disconnected.");
        }
    }

    // Send the message.
    public void SendMessage(string message)
    {
        try
        {
            byte[] bytesToSend = System.Text.Encoding.ASCII.GetBytes(message);
            //Client.Client.Send(bytesToSend,SocketFlags.None);
            Client.GetStream().Write(bytesToSend,0, bytesToSend.Length);
            Client.GetStream().Flush();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}
#endregion
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF 服务主机和 Silverlight 5 通过 net.tcp 的跨域策略文件 的相关文章

  • 如何解决“HTTP 错误 404.3 - 未找到”错误?

    简单的问题 我启动 VS2008 并创建一个新的 WCF 服务应用程序 这将创建一个默认应用程序 并使用一些测试方法来显示它的工作原理 我按 CTRL F5 确实有效 伟大的 但是 它使用 Visual Studio 开发服务器 我不想支持
  • 如何研究.NET 中的非托管内存泄漏?

    我有一个通过 MSMQ 运行的 WCF 服务 内存随着时间的推移逐渐增加 表明存在某种内存泄漏 我在本地运行该服务并使用 PerfMon 监视一些计数器 CLR 内存托管堆字节总数保持相对恒定 而进程的私有字节随着时间的推移而增加 这让我相
  • 如何自动执行/安排 IIS 中托管的 WCF 服务调用?

    我有一个非常简单的服务合同 用于管理自己的数据导入 类似于 using System ServiceModel namespace Company Services Domain Contract ServiceContract Name
  • WCF - 进行多次调用时随机客户端超时

    我有一个WPF客户端通过以下方式请求数据WCF服务托管于IIS 7 服务方法调用存储过程 SQL 2012 using EF检索一些数据 由于需要加载大量数据 因此客户端会多次调用服务方法 以 分解 数据加载并避免大量负载和超时 我们使用生
  • 复制到其他计算机时无法在 WcfTestClient 中添加服务

    我想在另一台计算机上运行 WcfTestClient VS2012 中包含的一个 而不安装 VS2012 这可能吗 在我已经安装了 NET 4 5 的机器上 但是当我尝试添加 Web 服务时 它给了我以下堆栈跟踪 Exception Tex
  • 本地计算机上的服务启动然后停止,某些服务如果没有被其他服务或程序使用则自动停止

    我创建了一个示例 Windows 服务并成功安装了我的服务 但是在要启动服务时 我收到以下错误 本地计算机上的此服务启动然后停止 如果其他服务或程序未使用某些服务 则会自动停止 我的配置文件代码
  • EF 和 WCF 错误 - SQL Server Compact 不适用于 ASP.NET 开发

    您好 我有一个简单的 wpf 应用程序设置来使用在另一个项目中运行的测试 wcf 服务 该服务使用实体框架从附加到 wcf 服务项目的 SQL Compact 3 5 sdf 中检索几行 我收到 SQL Server Compact 不适用
  • 将 fetch 与 Content-Type 结合使用时出现 CORS 错误 [重复]

    这个问题在这里已经有答案了 我正在尝试从 FireFox 中的不同域向 REST Web 服务发送 POST 请求 我为此使用 JavaScript 获取 函数 我在 IIS 中托管 REST Web 服务 在我在 JavaScript 中
  • 如何在WCF Rest服务中从流上传图像

    我正在尝试创建 wcf 服务 该服务将上传 pdf doc xls 图像等文件 但 pdf txt 文件正在上传并正确打开 但是当我尝试上传图像文件时 文件正在上传 但是图像不可见 OperationContract WebInvoke M
  • 我希望能够使用 lambda 表达式来指定要通过 wcf 服务返回的值范围

    我不知道这是否可能 但这会很酷 问题是这是否可能 但如果可能的话 举一个例子 我不确定您将使用什么方法签名来将 lambda 表达式传递到其中 例如方法IList
  • 在 WCF 上重用我的 PagedList 对象

    问题 我有一个自定义集合PagedList
  • WCF 服务已超出最大数组长度配额 (16384)

    我有一个 wsf 服务和一个客户端应用程序 在尝试与客户端和服务进行通信时 我收到以下消息 格式化程序在尝试反序列化消息时引发异常 尝试反序列化参数时出错http tempuri org blob http tempuri org blob
  • 如何使用 WSDL 和 XSD 的注释生成 .NET 类

    有一些 XSD 和 WSDL 我想从它们生成 C 代码 我使用了 svcutil exe 但它不会从 XSD 注释生成 XML 注释
  • 从一个客户端使用多个 WCF 服务

    我的网络场有 10 台运行 IIS 的服务器 在每台服务器上我都有相同的网站和相同的 WCF 服务 它公开了一些用于读取 删除缓存 会话 应用程序变量和其他内部数据的功能 在其他一些 Web 服务器上 我有一个 管理 Web 应用程序 它是
  • nHibernate + wcf + Isession

    我有一个包含 3 个项目的 C 解决方案 数据 WCF 和 UI 第一个是与数据库对话的类库 它通过第二个项目公开 该项目的类型为 WCF 服务库 原因是它将在第三个项目 称为 UI 的 Asp net 应用程序 作为指向 dll 的简单
  • WCF - AsyncPattern=true 或 IsOneWay=true

    我的 WCF 服务中很少有方法需要花费大量时间 生成报告和发送电子邮件 根据目前的要求 要求客户端应用程序只需提交请求 然后不等待整个过程完成 它将允许用户继续在客户端应用程序中执行其他操作 而不是等待整个过程完成 我很困惑该走哪条路 As
  • WCF 服务中的“即发即忘”

    我在 Azure 上有很多 WCF REST 服务 在某些 WCF 服务中 我向外部服务调用 Http 请求 例如发送电子邮件 短信 对非关键第三方服务的 http 请求 我不希望这阻碍我对客户电话的响应 需要一些关于在这种情况下使用的模式
  • 使用 ELMAH 记录 WCF 服务的异常

    我们正在使用优秀的ELMAH http code google com p elmah处理 ASP NET 3 5 Web 应用程序中未处理的异常 这对于除使用 REST 功能使用的 WCF 服务之外的所有站点都非常有效 当操作方法中发生应
  • 创建WCF数据服务以在服务主机中使用

    我有一个服务应用程序 它通过不同的绑定托管多个 WCF 端点 我现在想在同一服务主机中托管 WCF 数据服务 这个帖子 https stackoverflow com questions 2926767 wcf data service h
  • 使用 WCF 支持“application/x-www-form-urlencoded”发布数据的最佳方式?

    我正在基于 W3C 规范构建 WCF 服务 该规范定义了接受 application x www form urlencoded 发布数据的 RESTful Web 服务端点 默认情况下 WCF 不支持这种类型的消息编码 我发现了许多创建如

随机推荐

  • 如何将 CString 和 std::string std::wstring 相互转换?

    CString非常方便 同时std string与STL容器更加兼容 我在用hash map 然而 hash map不支持CStrings 作为键 所以我想转换CString into a std string 写一个CString哈希函数
  • 如何获取 ASP.NET 应用程序的根文件夹

    我正在尝试获取应用程序的根文件夹 我使用了以下代码 但这给出了bin文件夹 但我需要的是应用程序的根文件夹 有可能得到这个吗 This is the full directory and exe name String fullAppNam
  • 这个 php 结构是什么意思:$html->redirect("URL")?

    我在 php 的其他地方看到过这个 gt 我以前学PHP的一本书里有这个 但是从来没有解释过 它有什么作用 如何工作 我知道重定向位 但是 html 变量和重定向函数发生了什么 提前致谢 注意 如果您不知道 对象 是什么 则下一段可能没有意
  • 如何使用executemany将Python中的字典列表插入MySQL

    我目前正在使用 MySQL 和 Python 从网络上抓取数据 具体来说 我正在抓取表数据并将其插入到我的数据库中 我当前的解决方案有效 但我觉得它效率极低 如果我不重写代码 很可能会锁定我的数据库 这是我目前使用的 部分代码 itemBa
  • 如何使用Python 3登录SAPGUI?

    我正在尝试使用 Python 登录 SAPGUI 以便创建一个脚本来自动运行事务 但我遇到了问题 每当我尝试登录时 我都会收到
  • 如何在RelativeLayout之外或屏幕之外显示一个ImageView?如何在屏幕左上角显示橡胶

    我已经设置了一个相对视图 其中包含所有元素 按钮 图像等 这是我的 Android 应用程序的标题页 现在我想在整个布局的左上角覆盖 LITE 横幅 我的问题是 LITE 横幅图像是一个倾斜的红色橡胶 我需要将其左上角点设置为屏幕上的 45
  • VS2013中如何让项目继承另一个项目的设置?

    我想创建一个本机 C 项目 它从同一解决方案中的另一个本机 C 项目继承其设置 因此 如果我要更改基础项目的设置 它将反映在派生项目中 这可能吗 我使用 继承 这个词是因为我在项目设置中看到了这一点 尽管我不确定它是从哪里继承的 项目设置共
  • Spyder anaconda 在 Linux 上因分段错误而崩溃

    我刚刚在 Linux 上安装了 Anaconda 当尝试打开spyder 从导航器或终端 时 它不起作用 当我尝试在终端中打开它时 出现以下错误 分段错误 核心转储 我完全更新了Conda 但无法解决问题 我使用的是 Conda 版本 4
  • 说<有什么用?扩展 SomeObject> 而不是

    所以我正在查看一些 Java 代码并偶然发现 List
  • 如何通过多线程代码python提高Webscraping代码速度

    下面是我的代码 我在其中逐行编写 大约有900页 10行 每行5个数据 有什么办法可以让它更快吗 目前正在采取80 min将数据导出到 csv 中 有什么方法可以向页面发出并行请求并使此代码更高效 import requests from
  • ManyToMany 字段的 Django 自定义小部件

    有谁知道有一个显示 2 个选择框的小部件 一个显示模型中所有对象的列表 另一个显示已选择的对象 然后 用户可以从第一个列表中选择一个对象 单击 gt gt 按钮将其移动到 选定 列表 然后 当保存表单时 所选列表中的对象将保存在多对多字段中
  • 使用 JQ 替换 JSON 模板中的变量

    我想用值 Hello Jack 填充 json 模板 但 Hello 部分应保留在模板内 有什么方法可以做到这一点 我尝试了下面的代码 但它给了我错误 jq n arg person Jack my key Hello person jq
  • C# 判断文件是否被修改的方法

    我想在对文件进行一些修改后提示用户保存文件 但问题是我一生都无法这样做 有些人建议使用FileInfo类 但它只给你lastWriteTime LastAccessTime and CreationTime 我想用FileInfo类而不是F
  • Android 中 getResources() 的实现

    我刚刚开始学习android编程 我对getResources 方法产生了疑问 我注意到 当我创建一个 Resources 对象时 我所要做的就是 Resources res getResources 第一个疑问是为什么我必须这样做并且我不
  • 如何从facebook sdk获取用户生日?

    如何通过以下方式获取用户生日user getBirthday Session openActiveSession this true new Session StatusCallback callback when session chan
  • 处理 vimrc 时检测到错误: - 如何在 vim 中获取 pugins

    今天我正在制作自定义 vimrc 但它给了我这个错误 它不允许我使用任何插件 有人可以帮助告诉我做错了什么吗 这些行是它显示的错误 E117 Unknown function plug begin line 10 E492 Not an e
  • 无法安装react-beautiful-dnd包

    以下是安装包时的完整错误堆栈消息 npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree npm ERR npm ERR While resolvin
  • 用户更新标签后渲染 Highcharts

    我正在尝试创建一个图表生成器 我有用户输入的图例标题和位置 我希望用户输入标题 当单击 模糊 时 图表将根据他们输入的内容进行更新 问题是图表第一次渲染 但是我永远无法让字符再次渲染 这是代码的快速摘要 legendlocation sel
  • 根据验证程序,远程证书无效[重复]

    这个问题在这里已经有答案了 运行以下代码 我得到一个异常 using var client new Pop3Client client Connect provider ServerWithoutPort provider Port tru
  • WCF 服务主机和 Silverlight 5 通过 net.tcp 的跨域策略文件

    我有一个本地托管的 WCF 服务和一个与之通信的 silverlight 5 应用程序 默认情况下 silverlight 在调用 WCF 服务时尝试通过 HTTP 获取跨域策略文件 我需要更改此设置 以便策略文件通过 net tcp 端口