- 博客(0)
- 资源 (33)
- 问答 (1)
- 收藏
- 关注
WCF开发入门教程
WCF开发必备教程,亲身感受!
首先会是WCF分布式开发基础概念的介绍,其次会设计各个知识点详细的介绍和应用,中间会穿插与以前技术的对比分析,涉及服务契约、数据契约、操作契约、事物、安全、消息队列等重要概念。同样作为老徐一贯的风格,我会尽
量做到文章的调理清晰、系统详细、通俗易懂!也会放出标注的详细代码供大家参考学习。
2013-04-26
c# 流断点上传
客户端
/// <summary>
/// 服务器端地址,部署时为Web端的地址,可以用配置文件实现
/// </summary>
public static string serverPath;
/// <summary>
/// 上传文件(按照文件名称上传,支持断点)
/// </summary>
/// <param name="fileName">待上传文件全路径</param>
/// <param name="byteCount">上传时的流量控制,文件较大时,用于切割文件上传</param>
/// <param name="msg">错误信息</param>
/// <returns>成功或者失败</returns>
public static bool UpLoadFile(string fileName, int byteCount,out string msg)
{
msg = "";
bool result = true;
long cruuent = GetServerFileLength(fileName);
FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader bReader = new BinaryReader(fStream);
long length = fStream.Length;
fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1);
#region 开始上传文件
try
{
#region 续传处理
byte[] data;
if (cruuent > 0)
{
fStream.Seek(cruuent, SeekOrigin.Current);
}
#endregion
#region 分割文件上传
for (; cruuent <= length; cruuent = cruuent + byteCount)
{
if (cruuent + byteCount > length)
{
data = new byte[Convert.ToInt64((length - cruuent))];
bReader.Read(data, 0, Convert.ToInt32((length - cruuent)));
}
else
{
data = new byte[byteCount];
bReader.Read(data, 0, byteCount);
}
try
{
Hashtable parms = new Hashtable();
parms.Add("fileName", fileName);
parms.Add("npos", cruuent.ToString());
parms.Add("method", "SaveUpLoadFile");
byte[] byRemoteInfo = PostData(serverPath, data, parms);
}
catch (Exception ex)
{
msg = ex.ToString();
result = false;
break;
}
#endregion
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
bReader.Close();
fStream.Close();
}
GC.Collect();
#endregion
return result;
}
/// <summary>
/// 调用服务器端方法,或者服务器端,同名称的文件,已经上传的大小
/// </summary>
/// <param name="fileName">待上传文件全路径</param>
/// <returns>服务器端文件的大小,如果以前没有上传过,则返回0</returns>
private static long GetServerFileLength(string fileName)
{
fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1);
Hashtable parms = new Hashtable();
parms.Add("fileName", fileName);
parms.Add("method", "GetServerFileLength");
long length = 0;
byte[] data = new byte[0];
byte[] byRemoteInfo = PostData(serverPath, data, parms);
string sRemoteInfo = System.Text.Encoding.Default.GetString(byRemoteInfo);
length = Convert.ToInt64(sRemoteInfo);
return length;
}
/// <summary>
/// 向服务器端提交数据
/// </summary>
/// <param name="serverURL">服务器端地址</param>
/// <param name="data">要发送的数据</param>
/// <param name="parms">附加参数,用URL的方式将此参数附件到地址中</param>
/// <returns>服务器端返回的 byte[]</returns>
private static byte[] PostData(string serverURL, byte[] data, Hashtable parms)
{
System.Net.WebClient webClientObj = new System.Net.WebClient();
if (parms != null)
{
serverURL = serverURL + "?";
foreach (string key in parms.Keys)
{
serverURL = serverURL + key + "=" + parms[key].ToString() + "&";
}
serverURL.TrimEnd('&');
}
byte[] byRemoteInfo = webClientObj.UploadData(serverURL, "POST", data);
return byRemoteInfo;
}
接收端
/// <summary>
/// 保存文件(从URL参数中获取文件名、当前指针,将文件流保存到当前指针后)
/// 如果是第一次上传,则当前指针为0,代码执行与续传一样,只不过指针没有偏移
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="npos">当前指针偏移</param>
/// <returns></returns>
public int SaveUpLoadFile(string fileName, long npos)
{
int upLoadLength = Convert.ToInt32(HttpContext.Current.Request.InputStream.Length);
string file = HttpContext.Current.Server.MapPath("/" + fileName);
//string path = HttpContext.Current.Server.MapPath("/");
//fileName = path + "UpLoad\\" + fileName;
FileStream fStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite);
//偏移指针
fStream.Seek(npos, SeekOrigin.Begin);
//从客户端的请求中获取文件流
BinaryReader bReader = new BinaryReader(HttpContext.Current.Request.InputStream);
try
{
byte[] data = new byte[upLoadLength];
bReader.Read(data, 0, upLoadLength);
fStream.Write(data, 0, upLoadLength);
return 1;
}
catch
{
//TODO 添加异常处理
}
finally
{
//释放流
fStream.Close();
bReader.Close();
}
return -1;
}
2015-11-24
最新aspose破解版
网络上的最新版本 没测试 纯粹收藏下吧 里面的readme资料很详细 大家对应自己的net版本去看看吧
Aspose.BarCode for .NET v5.4.0.0
- Aspose.Cells for .NET v7.4.1.0
- Aspose.Diagram for .NET v3.0.0.0
- Aspose.Email for .NET v2.7.0.0
- Aspose.Imaging for .NET v1.7.1.0
- Aspose.OCR for .NET v1.4.0.0
- Aspose.Pdf for .NET v7.7.0.0
- Aspose.Slides for .NET v7.2.0.0
- Aspose.Tasks for .NET v5.2.0.0
- Aspose.Words for .NET v13.2.0.0
2014-08-07
在From中嵌入Word实现公式编辑器
里面包含一个外国人写的在Form中嵌入Word的控件。可以实现应用程序的一些复杂要求,比如对文本进行排版,可以录入复杂的数学公式等功能。里面还有一个经过我写的程序实现不需要引用控件,直接用代码调用Word。肯定有用
2013-08-29
最新9个C# .NET Winform的多线程进度条源码
包含9个不同的进度条源码,C#多线程、进度条、C#多线程进度条、progressBar、实例源码、C#.NET winform 利用多线程技术,值得参考和学习!
2013-08-07
DxTreeList的Demo 常用功能
原连接MS SQLServer:
Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial
Catalog=TreeList;Data Source=.\sqlexpress
根据需要修改。原测试库名字为:TreeList
原测试表为:
create table
(
id integer primary key,
pid integer,
aName varchar(255),
sequence integer;
)
包含了DXTreeList的一些基本功能。如上下移动记录,增删改等功能。
2013-06-03
WCF实例-源码(WcfDemo)
WCF实例--Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。
2013-04-28
SQLServer2008如何更好的备份一个200多G的数据库
2015-06-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人