Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在web应用程序的客户端运行C#代码_C#_Asp.net_Silverlight - Fatal编程技术网

在web应用程序的客户端运行C#代码

在web应用程序的客户端运行C#代码,c#,asp.net,silverlight,C#,Asp.net,Silverlight,我的服务器上有代码,运行得很好。它必须在远程站点上抓取几页才能正常工作。我知道有些用户可能想滥用我的网站,因此我希望它在客户端运行,而不是运行使用webclient和HttpRequest的代码,因此如果滥用,用户可能会将其IP列入黑名单,而不是我的服务器。如何在客户端运行此代码?我认为silverlight可能是一个解决方案,但我对此一无所知。我认为您可以选择silverlight或某种桌面应用程序 除非有jquery库或其他客户端脚本语言可以做同样的事情,否则这是一个有趣的请求(没有双关语)

我的服务器上有代码,运行得很好。它必须在远程站点上抓取几页才能正常工作。我知道有些用户可能想滥用我的网站,因此我希望它在客户端运行,而不是运行使用webclient和HttpRequest的代码,因此如果滥用,用户可能会将其IP列入黑名单,而不是我的服务器。如何在客户端运行此代码?我认为silverlight可能是一个解决方案,但我对此一无所知。

我认为您可以选择silverlight或某种桌面应用程序


除非有jquery库或其他客户端脚本语言可以做同样的事情,否则这是一个有趣的请求(没有双关语)。如果您确实使用Silverlight,那么可能不需要将逻辑移植到它,而是在其中创建一个简单的代理类,接收来自服务器应用程序的请求,并将其转发给脏工作。与传入响应相同:让您的Silverlight代理将其发送回服务器应用程序

通过这种方式,您可以在某些情况下通过Silverlight代理运行服务器应用程序,在其他情况下可以自行运行(无代理)。silverlight插件应该提供一个一致的API来编程,无论它运行在哪个浏览器上

如果在web浏览器中使用代理解决方案,您甚至可以完全跳过Silverlight,使用JavaScript/AJAX调用。当然,这类东西通常充满了浏览器兼容性问题,而且肯定是一个模糊的推/拉实现,但我认为JavaScript可以访问域和URL,并且(在某些情况下使用)不局限于它起源的域和URL


如果Silverlight security妨碍了您研究其他类型的可编程(图灵完整)浏览器插件,如Java、Flash等。如果内存正常,对于Java插件,它只能通过网络与其源域通信。这种安全性对于您的爬行需求来说限制太多

是的,Silverlight是一种解决方案,它允许您在客户机上运行有限的.NET代码子集。只需谷歌搜索,就可以获得更多关于不可用内容的信息

我不知道您试图实现的场景是什么,以及是否需要实时结果,但我想缓存爬网结果可能是个好主意


如果您正在寻找,您应该能够找到一些适合您的JavaScript框架。

根据对称性,您的代码滥用客户端机器不是很容易吗?特别是当您(根据需要)访问客户端计算机的文件系统时。Silverlight在“沙箱”中运行,这意味着出于安全原因对其设置了很多限制(即使在v4中,您也可以将文件保存到用户的驱动器中,但您得到的唯一信息是没有路径和FileStream实例的文件名)。您不太可能从Silverlight执行web爬网,尤其是在跨域安全的情况下。@Rory:+1非常不可能。很遗憾你没有输入这个作为答案。看起来我可以做一些我需要的事情,但我需要改变我的代码,使之不值得。答案是正确的,并且被接受,看起来我将改为写/复制粘贴到桌面应用程序。