silverlight与ashx

subufan 2015-07-07 02:36:12
我用webclient上传文件,后台建立ashx用于保存文件,然后将文件名存入到数据库中并取得了新插入项主键id,我想返回这个id给silverlight客户端,请问该怎么做?换句话说,silverlight如何获取ashx的返回值?
UploadHander.ashx如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Data.SqlClient;
using WebGISApp.Web.General;

namespace WebGISApp.Web
{
/// <summary>
/// UploadHandler 的摘要说明
/// </summary>
public class UploadHandler : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
string filename = Uri.UnescapeDataString(Convert.ToString(context.Request.QueryString["InputFile"]));
string fileExtend = System.IO.Path.GetExtension(filename);
string fid = Uri.UnescapeDataString(Convert.ToString(context.Request.QueryString["Fid"]));
string newGuidName = "";
string errorString = "";
SqlConnection sqlConnection = SqlHelper.OpenSqlConnection(ref errorString);
SqlCommand myComm = new SqlCommand();
myComm.Connection = sqlConnection;
SqlTransaction st = sqlConnection.BeginTransaction();
myComm.Transaction = st;
try
{
newGuidName = Guid.NewGuid().ToString() + fileExtend;
context.Response.ContentType = "text/plain";
context.Response.ContentEncoding = System.Text.Encoding.Unicode;
int ids = -1;
try
{
if (fid.Trim().ToUpper() != "NULL")
{
myComm.CommandText = string.Format(XMLHelper.GetCommandString("CataLogConfig/DeleteFileInfo", "value"), fid);
File.Delete(context.Server.MapPath("~/" + Convert.ToString(myComm.ExecuteScalar())));
}
string strSQL = XMLHelper.GetCommandString("CataLogConfig/AddFileInfo", "value");
myComm.CommandText = strSQL;
myComm.Parameters.AddWithValue("@FileName", filename);
myComm.Parameters.AddWithValue("@GuidName", "Files/" + newGuidName);

//if (type.Trim() == "img")
//{
// myComm.Parameters.AddWithValue("@Bid", bid);
//}
//else if (type.Trim() == "doc")
//{
// myComm.Parameters.AddWithValue("@Did", did);
//}
ids = Convert.ToInt32(myComm.ExecuteScalar());
st.Commit();
}
catch
{
ids = -2;
st.Rollback();
return;
}
finally
{
context.Response.Write(ids.ToString());
}

using (FileStream fileStream = File.Create(context.Server.MapPath("~/Files/" + newGuidName)))
{
byte[] bufferData = new byte[4096];
int bytesToBeRead;
while ((bytesToBeRead = context.Request.InputStream.Read(bufferData, 0, bufferData.Length)) != 0)
{
fileStream.Write(bufferData, 0, bytesToBeRead);
}
fileStream.Close();
}
}
catch
{
st.Rollback();
}
finally
{
myComm.Dispose();
sqlConnection.Dispose();
}
}

public bool IsReusable
{
get
{
return false;
}

}
}
}
...全文
385 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果你能够贴出 sl 端的源代码,你就会直接看到 e.Result 获取返回的 Stream。
  • 打赏
  • 举报
回复
引用 楼主 subufan 的回复:
我用webclient上传文件,后台建立ashx用于保存文件,
提出你的silverlight!你是在 silverlight 程序中用webclient 上传文件的吗?
subufan 2015-07-08
  • 打赏
  • 举报
回复
没有人回答吗。。。
1.概述 该组件提供类似ADO.NET编程接口,可以直接在Silverlight端访问Web端数据库。可以实现在Web端无需事先手工编写或自动创建任何程序代码和数据实体类的情况下, 便可在Silverlight端对Web端数据库进行增加、删除、修改、查询等数据操作。此外, 还支持访问数据库的存储过程(StoredProcdures)、视图(Views)、自定义函数(User Defined Functions)等。 2、使用前的准备 2.1组件Lib文件 该组件包含3个文件: System.Data.Silverlight.dll、 System.Data.Silverlight.Web.dll DataHandler.ashx 2.1.1System.Data.Silverlight.dll Silverlight端需引用的程序集,引用该程序集还需要引用关联的程序集,包含: System.ComponentModel.DataAnnotations.dll System.Windows.Controls.Data.dll System.Windows.Controls.Data.Input.dll System.Windows.Data.dll System.Xml.Linq.dll 该程序集中定义了一套DataSet、DataTa对象,作为数据通讯的数据格式,完全兼容ADO.NET中的DataSet、DataTable,两者之间可以通过XML互相转换,提供相应的转换方法。程序中还定义了一套DbConnection、DbCommand对象,用于向Web端发起数据库操作命令,使用方式类似ADO.NET。 2.1.2 System.Data.Silverlight.Web.dll Web服务器端文件,需要把该程序集拷贝到网站Bin目录,无需引用。 2.1.3 DataHandler.ashx Web服务器端的文件,需要把该文件拷贝到网站根目录。 2.2同步方式操作数据库示例 //创建一个数据连接 DbConnection conn = new DbConnection("Server=192.168.0.7;DataBase=JitonClient;Uid=sa;Pwd=jiton;"); //创建一个数据命令 DbCommandSyn cmd = new DbCommandSyn(); //设置命令的连接 cmd.Connection = conn; //设置SQL语句,可以是存储过程 cmd.CommandText = "SELECT [UserId],[UserName],[GroupId] FROM [Usertb] WHERE [GroupId]=@GroupId"; //设置命令类型,一般SQL语句是Text,存储过程是StoredProcedure cmd.CommandType = DbCommandType.Text; //设置执行类型 cmd.ExecuteType = DbExecuteType.Reader; //添加一个参数,无参数可以不添加 cmd.Parameters.Add(new DbParameter(DbType.Int32, "@GroupId", 5)); //执行命令,得到结果 DbCommandExecuteResult result = cmd.Execute(); if (!string.IsNullOrEmpty(result.ErrMsg))//首先判断ErrMsg是否有值,有表示执行过程发生错误 { MessageBox.Show("发生错误:" + result.ErrMsg); } else { DataTable dt = result.ReaderResult; //将数据显示在DataGrid中 this.dataGrid1.ItemsSource = dt.Rows; } 2.3异步方式操作数据库示例 //创建一个数据连接 DbConnection conn = new DbConnection("Data Source=|DataDirectory|CSmsPlatThird.db;Pooling=true;FailIfMissing=false"); //设置使用的数据访问程序集 conn.AssemblyName = "System.Data.SQLite"; //设置数据工厂,这里是SQLite的数据工厂 conn.DbProviderFactory = "System.Data.SQLite.SQLiteFactory"; //创建一个数据命令 DbCommandAsyn cmd = new DbCommandAsyn(); //设置命令的连接 cmd.Connection = conn; //设置SQL语句,可以是存储过程 cmd.CommandText = "SELECT [Id],[Content],[PlatFlag],[DateTime] FROM [T_Logger] WHERE [Id]>=@Id"; //设置命令类型,一般SQL语句是Text,存储过程是StoredProcedure cmd.CommandType = DbCommandType.Text; //设置执行类型 cmd.ExecuteType = DbExecuteType.Reader; //添加一个参数,无参数可以不添加 cmd.Parameters.Add(new DbParameter(DbType.Int32, "@Id", 3)); //设置命令执行完毕的委托事件 cmd.ExecuteEnd += new EventHandler(cmd_ExecuteEnd); //异步执行命令 cmd.Execute(); void cmd_ExecuteEnd(object sender, DbCommandExecuteResult e) { if (!string.IsNullOrEmpty(e.ErrMsg))//首先判断ErrMsg是否有值,有表示执行过程发生错误 { MessageBox.Show("发生错误:" + e.ErrMsg); } else { DataTable dt = e.ReaderResult; //将数据显示在DataGrid中 this.dataGrid1.ItemsSource = dt.Rows; } } 2.4对其它数据库的支持 该组件默认支持SQL Sserver,理论上也可支持其它数据库,只要数据库提供对应的ADO.NET实现接口,已经测试过Access、SQLite。操作其它数据库时必须把对应的ADO.NET实现接口的程序集拷贝到网站Bin目录下面,操作SQL Server无需该步骤。比如操作SQLite数据库,需要把SQLite的ADO.NET实现接口程序集System.Data.SQLite.dll文件拷贝到网站Bin下面。此外还需指定DbConnection对象的AssemblyName、DbProviderFactory属性的值。 //创建一个数据连接 DbConnection conn = new DbConnection("Data Source=|DataDirectory|CSmsPlatThird.db;Pooling=true;FailIfMissing=false"); //设置使用的数据访问程序集 conn.AssemblyName = "System.Data.SQLite"; //设置数据工厂,这里是SQLite的数据工厂 conn.DbProviderFactory = "System.Data.SQLite.SQLiteFactory"; 其它操作步骤和操作SQL Server无差异,完整的示例代码见2.3中的示例。 2.5技术交流 有任何问题可以加入唯一指定的专用QQ群153079750进行反馈交流,也欢迎加入笔者的另一个Silverlight技术群175213051进行交流。

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧