- 浏览: 436862 次
- 性别:
- 来自: 唐山
文章分类
最新评论
-
hautbbs:
谢谢分享!
ASP.NET 导出Excel 和csv -
hautbbs:
感谢分享!
ASP.NET 导出Excel乱码的终极解决 -
wyf:
zcl920 写道只能说 看不懂。要发就发全 取一段出来 有什 ...
图片上绘制文字换行处理 -
zcl920:
只能说 看不懂。要发就发全 取一段出来 有什么用。
图片上绘制文字换行处理 -
380086154:
有用,谢谢。
js比较日期
先把文章中要用到一些扩展程序集贴出来。
C#用到了System.Web.Extensions程序集,包括3个文件:
System.Web.Extensions.dll
System.Web.Extensions.Design.dll
AJAXExtensionsToolbox.dll
Flash用到了adobe的corelib-.90程序集:
corelib.swc
网上现在有很多将flash与C# web 服务程序通讯的资料,不过很多都是用remoting或者web service的方式做的,而且很多高手还做了效率比较,结果是基于TCP协议的remoting效率最好,但是这里对remoting就不多说了,并且基于TCP的remoting因为协议不同效率差别肯定明显。我还是介绍在HTTP协议下的通讯方法吧。
这里使用iis作为服务器,服务程序只要能处理客户端提交的数据,能向客户端返回数据就行(当然push做不到,http协议嘛)。所以处理程序大多直接实现IHttpHandle接口,当然从Page继承是一点也没有问题的,因为Page类也实现了IHttpHandle接口,如何继承Page,如何实现IHttpHandle的接口方法就给个例子吧,这个资料挺多的。
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.SessionState;
namespace com.Flight.Script
{
/// <summary>
/// 脚本控制请求,IRequiresSessionState接口没有啥方法,纯粹为了session支持
/// </summary>
public class ScriptHandler : IHttpHandler, IRequiresSessionState
{
/// <summary>
/// 处理脚本请求
/// </summary>
/// <param name="context">脚本名称</param>
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write("输出内容");
}
/// <summary>
/// 是否允许后续请求处理
/// </summary>
public bool IsReusable
{
get
{
return true;
}
}
}
}
这里提一下web.config配置,下面是一个例子,在这里例子里面我修改了扩展名“.do”,这样的配置要求修改iis服务器设置的,如果没有自己的服务器最好别这样做,比较麻烦,可以使用“ashx”或者“axd”都可以。
<httpHandlers>
<add verb="*" path="chat.do" type="com.gs.chat.Chat, Game"/>
</httpHandlers>
下面是服务器上将对象进行JSON序列化的程序,其实JSON序列化就是将一个对象转换成有规律的字符串,能够被别人解读出来,但不是所有的对象都能被序列化,一定要实现了ISerializable接口的类才行,可以参考Hashtable类,这个类就实现了ISerializable接口中的GetObjectData方法,因此这个类型的对象进行反序列化是没有问题的。
using ...
using System.Web.Script.Serialization;
using ...
...
/// <summary>
/// 向客户端返回的数据
/// 默认采用json编码格式
/// </summary>
/// <param name="_result">服务器方法的方会对象</param>
/// <returns>返回字符串</returns>
public virtual string JsonResult(object _result)
{
//返回的字符串
string resultString = "";
//采用了微软的序列化方式
JavaScriptSerializer jss = new JavaScriptSerializer();
resultString = jss.Serialize(_result);
return resultString;
}
/// <summary>
/// 反序列化,从JSON字符串转换到对象
/// </summary>
/// <param name="_jsonstring">JSON串</param>
/// <returns>反序列化得到的对象</returns>
public virtual object JsonObject(string _jsonstring)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
return jss.DeserializeObject(_jsonstring);
}
...
输出都是一样的,直接Write:
context.Response.Write(_text);
这里对于服务器的开发方法可以很多,比如在同一个IHttpHandle中可以写多个处理程序,分别处理不同的请求,然后有个专门的类负责分析要执行哪个方法。下面是发送和接收聊天消息的方法,供参考:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using com.Flight.Web.Ajax;
using System.Text.RegularExpressions;
namespace com.gs.chat
{
public class Chat : AjaxController
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxJsBuilder.RegistType(typeof(Chat));
StartProcess();
}
[SafeMethod("A")]
[AjaxMethod()]
public Hashtable SendMessage(string _msg)
{
string patternForCmd = @"-\|cmd:[a-zA-z]+\|-";
Regex rg = new Regex(patternForCmd, RegexOptions.IgnoreCase | RegexOptions.Singleline);
Match m = rg.Match(_msg);
if (m.Success)
{
string cmd = m.Value;
if (cmd.ToLower().Equals("-|cmd:clear|-"))
{
MessageContainer.MsgContainer.Clear();
}
}
else
{
Message msg = new Message("me", "all", _msg, ToType.ALL);
MessageContainer.MsgContainer.Add(msg);
}
Hashtable rht = new Hashtable();
rht.Add("stat", "OK");
rht.Add("msg", "发送成功。");
return rht;
}
[SafeMethod("A")]
[AjaxMethod()]
public MessageContainer ReceiveMessage(string _u)
{
MessageContainer mc = new MessageContainer();
foreach (Message msg in MessageContainer.MsgContainer)
{
if (msg.From.Equals(_u) || msg.To.Equals(_u))
{
mc.Add(msg);
}
}
return mc;
}
}
}
AjaxController这个类是自己写的,从page继承,用来做一些基本处理,比如JSON序列化啊,反序列化啊,安全检查啊,还有分析客户端要调用的方法之类,后面也会提到一些里面的具体设计。
下面看看客户端的开发,首先是向服务器发送请求,这个比较简单,直接贴一个简单例子,应该都明白
import flash.net.URLLoader;
import flash.net.URLRequest;
var request:URLRequest = new URLRequest(url);
var loader:URLLoader = new URLLoader();
var request_data:String = ajax_flag + "&" + method_flag + method + "&" + parameters;
request.data = request_data;
request.method = URLRequestMethod.POST;
loader.load(request);
主要是在loader的complete事件中处理的时候要注意把服务器返回的字符串进行JSON反序列化,转换成对象,代码如下:
import com.adobe.serialization.json.JSON; //导入使用的到类
在load_complete事件里面写如下代码:
//从事件对象想读取服务器返回的数据,反序列化为对象
var receiveMsg:Object = JSON.decode(event.target.data);
获取receiveMsg对象之后就可以通过点操作符访问属性数据了。以一个HashTable为例,其中的Key就是反序列化后对象的属性,Value就是属性值。
在C#中能够被直接序列化的容器对象很多,可以更具需要选择,如果都不能满足你的要求,也可以自己写一个对象,实现ISerializable接口的GetObjectData方法进行数据传输。
按照上面的实现思路,如果一个IHttpHandle只能处理一种请求那么我们就要写出很多很多的IHttpHandle这样就无法和webservice相提并论了,因为我们知道在webservice中一个service可以提供多个方法响应客户端的请求,这个其实只要我们稍作处理就可以了,比如上面的例子里面我们看到请求字符串中包含了一些特殊的参数:
ajax_flag + "&" + method_flag + method
可以很容易看出来,这里就是用来告诉服务器我要调用哪些方法的参数。
注意:服务器方法在响应请求之前还要做安全判断,这个判断很重要,否则随便就能调用服务器程序那岂不太危险?这里给出一个简单的解决方法,可以采用一个HttpModule做前端判断,如果已经登录,请求参数中没有特殊的符号(防止注入),并且有访问这个HttpHandle的权限那么继续,然后在HttpHandle中给指定的方法加个安全特性代码如下:
[SafeMethod("A")]
[AjaxMethod()]
public MessageContainer ReceiveMessage(string _u)
{
MessageContainer mc = new MessageContainer();
foreach (Message msg in MessageContainer.MsgContainer)
{
if (msg.From.Equals(_u) || msg.To.Equals(_u))
{
mc.Add(msg);
}
}
return mc;
}
[AjaxMethod()]和[SafeMethod("A")]这两个特性说明ReceiveMessage方法是允许客户端调用的,并且用户具有特性A的时候才能执行这个方法,否则报错。
发表评论
-
登录时记住用户名密码的实现方式
2019-06-12 15:11 3039登录的时候记住用户 ... -
CAS 实现单点登录 .NET MVC
2016-05-24 17:14 1134http://www.cnblogs.com/woxpp/p ... -
.NET开发邮件发送功能的全面教程(含邮件组件源码)
2015-03-31 09:43 1174原文地址:http://www.cnblogs.com/he ... -
开发Web组合
2015-01-04 11:39 6151、数据库操作 ORM-Dapper 2、前台界面布局采 ... -
基于 Bootstrap 构建的网站
2014-12-14 14:12 640文档,下载地址:http://v3.bootcss.com ... -
iis8 默认不支持svc解决方法
2014-09-18 18:57 782以下内容对于使用WIN2012 部署V9的时候使用。 ... -
C# 连接Oracle(利用ODP.net,不安装oracle客户端)
2014-07-11 09:37 1698C# 连接Oracle(利用ODP.net,不安装oracl ... -
C# Attribute 特性,过期特性
2014-05-27 15:18 1852通过下列过程将属性应用到代码元素。 通过从 .NE ... -
.NET画实时直方图
2011-12-30 09:37 923using System; using System.Col ... -
设置combobx选中项
2011-12-21 15:20 1036cbRole.SelectedIndex = cbRole.I ... -
文档树状结构化目录管理方法
2011-12-20 09:50 2202本文适用于附件(各类文档、图片和压缩包等,下同)比较多的 ... -
.StringTemplate替换模板
2011-11-03 10:19 1252官方下载 www.StringTemplate. ... -
WCF-IErrorHandler
2011-10-11 16:30 1058使用 IErrorHandler 接口,我们可以更深入地 ... -
ADODB.Stream instead of Scripting.FileSystemObject.
2011-07-04 08:55 1249In a Silverlight 4 OOB App (eve ... -
Scripting.FileSystemObject对象的详细技巧指南
2011-07-03 23:39 1052Scripting.FileSystemObject对象的 ... -
Stream 和 byte[] 之间的转换
2011-07-02 16:52 1078/* - - - - - - - - - - - - - ... -
常用正则表达式
2011-06-15 20:17 798正则表达式用于字符 ... -
DynamicMethod 类
2011-05-11 22:51 1165public delegate String MyMetho ... -
一个通用的快速反射方法(A General Fast Method Invoker)
2011-04-13 22:01 1530普通反射方法 MethodInfo methodIn ... -
C#操作IIS(转)可以写一个工具自己配置网站
2011-03-24 21:08 2271using System; using System.Dir ...
相关推荐
当Flash需要与C#程序通信时,通常是通过Web服务(如SOAP或RESTful API)或WebSocket来实现。C#可以创建Web服务,Flash则作为客户端通过HTTP请求与之通信。另外,WebSocket提供双向实时通信,使得Flash和C#之间能建立...
在IT领域,跨平台通信是常见的需求,尤其是在Web开发中,Flash和C#之间的交互尤为重要。Flash作为一种曾经广泛用于创建动态网页内容的技术,其与后端语言如C#的通信能力,为丰富的用户界面和多媒体应用提供了可能性...
"FlashSocket与C#通讯"是一个关键的主题,涉及到客户端与服务器之间的低延迟、双向通信。以下是关于这个主题的详细解释: FlashSocket,全称Adobe Flash Socket,是Adobe Flash Player支持的一种高级网络功能,它...
本主题将深入探讨如何在BS(Browser-Server,浏览器-服务器)和CS(Client-Server,客户端-服务器)架构下实现Flash与C#之间的通信。 Flash是一款由Adobe公司开发的多媒体创作平台,它允许开发者创建动态的、交互式...
在IT领域,尤其是在Web开发中,Flash与C#的交互是一项重要的技术,它允许富互联网应用程序(RIA)和服务器端程序之间进行数据交换,提升用户体验。本资源"Flash与C#交互全集(bs与cs)"提供了全面的指导,涵盖了B/S...
在C#和Flash之间建立通信,通常采用以下几种方法: 1. **Socket通信**:C#可以通过System.Net.Sockets命名空间中的Socket类创建服务器端,Flash使用AS3的Socket类作为客户端,两者通过TCP/IP协议进行双向数据传输。...
标题中的“C# Socket单端口多种通讯协议服务”是指使用C#的Socket类库来构建一个服务器,该服务器可以在单一端口上同时支持多种不同的通讯协议,如HTTP、WebSocket、Flex策略和Fast中间件。这是一项高级技术,因为它...
这个资源包“OpenFlashChart C# flash图形控件使用 demo”包含了作者三年来在系统软件项目实施过程中积累的实践经验,为C#开发者提供了一个很好的学习和参考平台。 OpenFlashChart的主要优点在于它的灵活性和可定制...
为了让两者通信,我们需要使用ActionScript(Flash的编程语言)和C#.NET之间的接口,这个接口通常通过HTTP服务或者Flash的LocalConnection对象来建立。 1. **使用Flash ExternalInterface API**: Flash Player...
本项目通过Visual Studio(VS)提供的工具和技术实现这一功能,主要涉及的知识点包括C#编程语言、ASP.NET Web应用程序框架以及前端交互技术。 1. **ASP.NET Web Forms或MVC**: C# Web开发通常基于ASP.NET平台,...
在IT行业中,数据可视化是至关重要的,它能够帮助我们更好地理解和解释复杂的数据。...开发者需要掌握C#的数据处理、Flash的ActionScript编程以及两者之间的通信技术,才能充分发挥这一组合的优势。
通过深入研究这套源码,学习者可以了解到Web应用的基本架构,理解客户端-服务器通信的流程,掌握Flash和C#的结合使用,同时对WebQQ的工作机制有更深入的理解。对于想要从事Web开发,特别是富互联网应用(RIA)开发的...
"c#+flash+js实现多文件无刷新上传带进度条"是一个技术方案,它结合了C#、Flash(AS3)和JavaScript三种技术来提供高效且用户体验良好的文件上传功能。这个方案的关键在于实现了多文件选择、无刷新页面更新以及上传...
【标题】:“Flash雷达源程序”是一个基于Adobe Flash CS3开发的交互式应用程序,它被设计为一个可嵌入的控件,可以集成到其他Web页面或项目中,用于显示实时或模拟的雷达数据。这样的程序在教育、游戏、气象预报、...
JSON(JavaScript Object Notation)是一种...综上所述,这个"json_lib"压缩包可能是为了满足不同编程语言和框架下处理JSON数据的需求,提供了一系列的库或工具,使得开发者能够更加便捷地在各自的开发环境中使用JSON。
Flex中的JSON应用主要涉及到使用ActionScript 3(AS3)处理JSON数据,这是一种轻量级的数据交换格式,常用于Web服务与客户端之间的通信。在Flex开发中,由于Flex是基于AS3的,所以理解如何在Flex中使用JSON至关重要...
在C#编程中,结合JavaScript实现Flash动态切换图片是一种常见的技术,主要应用于Web应用程序中,为用户提供丰富的交互体验。下面将详细讲解如何利用C#和JavaScript实现这一功能,并涉及相关知识点。 1. C#后端处理...
首先,C#(读作"C sharp")是一种由微软开发的面向对象的编程语言,它被广泛用于Windows和Web应用程序的开发,特别是在.NET Framework或.NET Core平台上。C#支持多种现代编程特性,如泛型、lambda表达式、异步编程等...
6. **JSON(JavaScript Object Notation)**:另一种轻量级的数据交换格式,虽然不是Flex原生支持的,但通过库如AS3CoreLib,可以在Flex中解析和生成JSON数据,与C#服务进行通信。 7. **安全性**:跨域策略文件...
1. **Flash技术**:Adobe Flash是一款用于创建动画、图形、交互式内容和应用程序的软件,尤其在Web上广泛使用。它可以创建丰富的用户界面,实现动态效果和多媒体集成。在本项目中,Flash可能用于设计相册的用户界面...