WCF 客户端上传文件到服务器端的问题

JokerChenjb 2016-08-31 05:34:18
现在我编写了个简单的基于WCF上传文件的小例程,出现的问题是不能成功进行上传,说是数据流不可读,有大神能解答不。

程序如下:
接口:

namespace file
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“Ifile”。
[ServiceContract]
public interface Ifile
{
[OperationContract]
void UpLoadFile(UpLoadFileMessage request);
}

[MessageContract]
public class UpLoadFileMessage
{
[MessageHeader]
public string FileName { get; set; }
[MessageBodyMember]
public FileStream FileData { get; set; }
}
}


实现:

public void UpLoadFile(UpLoadFileMessage request)
{
string UploadFolder = "D:\\";
string FileName = request.FileName;
Stream sourceStream = request.FileData;
FileStream targetStream = null;

if (!sourceStream.CanRead)
{
throw new Exception("数据流不可读!");
}


if (!Directory.Exists(UploadFolder))
{
Directory.CreateDirectory(UploadFolder);
}

string filePath = UploadFolder + FileName;
using (targetStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write))
{
const int bufferLen = 4096;
byte[] buffer = new byte[bufferLen];
int count = 0;
while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0)
{
targetStream.Write(buffer, 0, count);
}
targetStream.Flush();
targetStream.Close();
sourceStream.Close();
}
}


配置:

<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyBinding" transferMode="Streamed" messageEncoding="Mtom" maxBufferSize="524288000" maxReceivedMessageSize="524288000" sendTimeout="00:10:00"/>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<dataContractSerializer maxItemsInObjectGraph="524288000"/>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="file.file" behaviorConfiguration="MyBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding" contract="file.Ifile"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
<system.web>
<compilation debug="true"/></system.web></configuration>


客户端:

private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog opd = new OpenFileDialog();
if(opd.ShowDialog()==DialogResult.OK)
{
textBox1.Text = opd.FileName;
}
}

private void button2_Click(object sender, EventArgs e)
{
string filepath = textBox1.Text;
string FileName = Path.GetFileName(filepath);
FileStream FileData = new FileStream(filepath, FileMode.Open, FileAccess.Read);
file.IfileClient client = new file.IfileClient();
try
{
client.UpLoadFileAsync(FileName, FileData);
MessageBox.Show("成功!");
}
catch
{
MessageBox.Show("错误!");
}



有谁知道原因么???
还有个问题,如果使用的绑定是wsHttpBinding,如何进行文件传输?
...全文
156 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
第1章 登录验证模块 1 1.1 开发站点前的配置 1 1.1.1 创建Web站点 1 1.1.2 使用站点安全工具配置身份验证模式 2 1.1.3 配置站点的数据存储方式 4 1.1.4 定制自己的数据存储方式 4 1.2 最普通的登录方式 6 1.2.1 用户注册功能 6 1.2.2 用户的登录功能 7 1.2.3 修改密码功能 8 1.2.4 在登录页面中添加注册导航功能 8 1.2.5 显示登录用户名和用户状态功能 8 1.2.6 根据用户登录身份显示不同效果页功能 9 1.3 基于角色的登录方式 10 1.3.1 在应用程序中启用角色 10 1.3.2 创建角色 10 1.3.3 创建角色访问规则 11 1.3.4 赋予用户角色权限 11 1.3.5 验证角色的登录 12 1.4 匿名用户的授权管理 12 1.5 小结 13 第2章 缓存管理模块 14 2.1 数据库缓存依赖的优点 14 2.2 开始使用缓存 15 2.2.1 开启应用程序的缓存功能 15 2.2.2 配置缓存依赖的数据库 15 2.2.3 为SQL Server启用缓存通知 16 2.3 控件级数据缓存功能 16 2.3.1 添加时间戳和数据 16 2.3.2 观察缓存数据的变化 18 2.4 页面级数据缓存依赖功能 18 2.4.1 配置页面的缓存属性 18 2.4.2 完善模块中两个功能的导航 19 2.5 小结 20 第3章 个性化设置模块 21 3.1 简单类型的个性化设置功能 21 3.1.1 设置个性化的项目 21 3.1.2 配置个性化信息 22 3.1.3 个性化用户登录站点 22 3.1.4 保存个性化设置 22 3.1.5 显示个性化设置 23 3.2 复杂类型的个性化设置功能 23 3.2.1 设计复杂个性化的项目 24 3.2.2 配置复杂项目 25 3.2.3 保存复杂项目的设置 25 3.2.4 获取复杂项目的设置并显示 26 3.3 匿名用户的个性化设置功能 27 3.3.1 启用匿名用户的个人配置属性 28 3.3.2 设计匿名用户的登录功能 28 3.3.3 将匿名用户的个性化设置移植到已验证用户 30 3.4 完善系统对3个功能的导航 31 3.5 小结 31 第4章 投票模块 32 4.1 一个简单的投票系统 32 4.1.1 设计投票功能的数据存储方式 32 4.1.2 投票项目管理功能 33 4.1.3 投票功能 37 4.1.4 图形化显示投票结果功能 38 4.2 防止重复投票技术 40 4.2.1 利用Session对象 40 4.2.2 利用Cookies对象 41 4.2.3 验证IP和登录时间 41 4.2.4 小范围调查 42 4.3 一个完整的投票系统 42 4.3.1 投票系统的功能模块 42 4.3.2 投票系统的数据库架构 43 4.3.3 数据库中数据之间的关系 43 4.3.4 投票主题管理 44 4.3.5 投票项目管理 52 4.3.6 投票功能管理 54 4.3.7 投票系统后台权限管理 59 4.4 小结 60 第5章 RSS模块 61 5.1 RSS的定义 61 5.2 RSS的作用 61 5.3 RSS的订阅原理 62 5.3.1 RSS的工作原理 62 5.3.2 RSS订阅工具的使用 63 5.4 在网站内加入RSS功能 65 5.4.1 使用Microsoft提供的RSS工具包 65 5.4.2 一个简单的RSS阅读器 66 5.4.3 一个复杂的RSS阅读器 67 5.4.4 让站点提供订阅功能 69 5.5 小结 70 第6章 在线编辑模块 71 6.1 在线编辑的原理 71 6.2 编辑器的界面 71 6.3 一个简单的在线编辑器 72 6.3.1 在线编辑窗口的界面设计 72 6.3.2 在线编辑的功能实现 73 6.3.3 在线编辑的运行效果 74 6.4 多功能在线编辑器的介绍 74 6.4.1 FreeTextBox编辑器 74 6.4.2 FCKEditor在线编辑器 76 6.5 小结 79 第7章 在线支付模块 80 7.1 在线支付介绍 80 7.1.1 在线支付的安全保障 80 7.1.2 在线支付的优点 80 7.2 在线支付的流程 81 7.3 使用支付宝实现在线支付 81 7.3.1 支付宝接口概述 81 7.3.2 支付宝接口服务下载 81 7.4 使用支付宝实现在线支付的实例 82 7.4.1 在项目中加入支付宝程序 82 7.4.2 设计订单提交功能 82 7.4.3 获取支付成功后的返回信息 84 7.4.4 设置支付过程中的通知 88 7.4.5 实现订单到支付宝的提交 90 7.5 小结 92 第8章 电子邮件模块 93
asp.net 4揭秘.第1卷》 第一部分 构建asp.net页面 第1章 asp.net framework概览2 1.1 asp.net和.net framework5 1.1.1 框架类库5 1.1.2 公共语言运行库10 1.2 asp.net控件11 1.2.1 asp.net控件概览11 1.2.2 html控件12 1.2.3 理解和处理控件事件13 1.2.4 视图状态18 1.3 asp.net页面22 1.3.1 动态编译23 1.3.2 控件树25 1.3.3 使用代码隐藏页面27 1.3.4 处理页面事件30 1.3.5 使用page.ispostback属性32 1.3.6 调试和跟踪asp.net页面33 1.3.7 跟踪页面执行36 1.4 安装asp.net38 .1.5 小结40 第2章 使用标准控件41 2.1 显示信息41 2.1.1 使用label控件41 2.1.2 使用literal控件45 2.2 接收用户输入48 2.2.1 使用textbox控件48 2.2.2 使用checkbox控件54 2.2.3 使用radiobutton控件57 2.3 提交表单数据60 2.3.1 使用button控件61 2.3.2 使用linkbutton控件62 2.3.3 使用imagebutton控件65 2.3.4 button控件使用客户端脚本68 2.3.5 执行跨页面发送70 2.3.6 指定默认按钮73 2.3.7 处理command事件74 2.4 显示图像77 2.4.1 使用image控件77 2.4.2 使用imagemap控件78 2.5 使用panel控件82 2.6 使用hyperlink控件87 2.7 小结89 第3章 使用验证控件90 3.1 验证控件概述90 3.1.1 验证控件与javascript93 3.1.2 使用page.isvalid94 3.1.3 设置display属性94 3.1.4 突出显示验证错误95 3.1.5 使用验证组99 3.1.6 禁用验证103 3.2 使用requiredfieldvalidator控件104 3.3 使用rangevalidator控件108 3.4 使用comparevalidator控件109 3.5 使用regularexpressionvalidator控件114 3.6 使用customvalidator控件116 3.7 使用validationsummary控件122 3.8 创建自定义验证控件126 3.8.1 创建lengthvalidator控件127 3.8.2 创建ajaxvalidator控件129 3.9 小结134 第4章 使用rich控件135 4.1 接收上传文件135 4.1.1 把文件保存到文件系统136 4.1.2 把文件保存到数据库139 4.1.3 上传大文件142 4.2 显示日历147 4.2.1 创建弹出式日期选择器150 4.2.2 根据数据库表呈现日历152 4.3 显示广告156 4.3.1 在xml文件中保存广告157 4.3.2 在数据库表中存储广告160 4.3.3 跟踪显示和转到161 4.4 显示不同的页面视图166 4.4.1 显示选项卡式页面视图166 4.4.2 显示多部分表单168 4.5 显示向导170 4.6 显示silverlight内容174 4.7 小结177 第二部分 设计asp.net网站 第5章 使用母版页设计网站180 5.1 创建母版页180 5.1.1 创建默认内容183 5.1.2 嵌套母版页186 5.1.3 在母版页中使用图片和超链接191 5.1.4 在web配置文件中注册母版页193 5.2 修改母版页内容194 5.2.1 使用title属性194 5.2.2 使用page.header属性194 5.2.3 暴露母版页属性196 5.2.4 对母版页使用findcontrol方法198 5.3 动态加载母版页200 5.4 小结203 第6章 使用主题设计网站204 6.1 创建主题204 6.2 在主题中添加皮肤205 6.2.1 创建命名皮肤206 6.2.2 theme与stylesheetthemes208 6.2.3 禁用主题209 6.2.4 在web配置文件中注册主题211 6.3 在主题中添加css212 6.3.1 在主题中添加多个css215 6.3.2 使用css改变页面布局215 6.4 创建全局主题219 6.5 动态应用主题220 6.6 小结225 第7章 使用用户控件创建定制控件226 7.1 创建用户控件226 7.1.1 在web配置文件中注册用户控件228 7.1.2 暴露用户控件的属性229 7.1.3 暴露用户控件的事件231 7.1.4 创建addressform控件235 7.2 ajax和用户控件240 7.3 动态加载用户控件242 7.3.1 使用引用指令243 7.3.2 创建多页面向导247 7.4 小结254 第三部分 数据访问 第8章 数据访问概述256 8.1 使用databound控件256 8.1.1 使用列表控件256 8.1.2 使用表格式databound控件259 8.1.3 使用层次databound控件262 8.1.4 使用其他数据绑定控件264 8.2 使用datasource控件266 8.3 使用编程式数据绑定270 8.4 模板和数据绑定表达式272 8.4.1 使用模板272 8.4.2 使用数据绑定表达式275 8.4.3 使用双向数据绑定表达式278 8.5 sql server 2008 express概述280 8.5.1 sql server express 特性280 8.5.2 sql server 2008 express管理工具281 8.5.3 服务器端数据库与本地数据库282 8.6 数据库驱动的web应用程序示例284 8.7 小结287 第9章 使用sqldatasource控件288 9.1 创建数据库连接289 9.1.1 连接到microsoft sql server289 9.1.2 连接到其他数据库292 9.1.3 在web配置文件中保存连接字符串293 9.1.4 对连接字符串加密294 9.2 执行数据库命令296 9.2.1 执行内联sql语句296 9.2.2 执行存储过程298 9.2.3 过滤数据库行300 9.2.4 改变数据源模型302 9.2.5 处理sql命令执行错误303 9.2.6 取消sql命令执行306 9.3 在sqldatasource控件中使用asp.net参数308 9.3.1 使用asp.net参数对象308 9.3.2 使用asp.net的controlparameter对象311 9.3.3 使用asp.net的cookieparameter对象315 9.3.4 使用asp.net的formparameter对象317 9.3.5 使用asp.net的profileparameter对象319 9.3.6 使用querystringparameter对象320 9.3.7 使用sessionparameter对象322 9.4 通过程序执行sqldatasource命令323 9.4.1 添加ado.net参数324 9.4.2 执行insert、update和delete命令325 9.4.3 执行select命令327 9.5 使用sqldatasource控件缓存数据库数据330 9.6 小结332 第10章 使用列表控件333 10.1 列表控件概述333 10.1.1 声明列表项333 10.1.2 绑定到数据源335 10.1.3 确定被选中的列表项338 10.1.4 追加数据项342 10.1.5 启用自动回传343 10.1.6 使用列表项集合345 10.2 使用dropdownlist控件348 10.3 使用radiobuttonlist控件350 10.4 使用listbox控件351 10.5 使用checkboxlist控件355 10.6 使用bulletedlist控件357 10.7 创建自定义的列表控件361 10.8 小结368 第11章 使用gridview控件369 11.1 gridview控件基础369 11.1.1 显示数据369 11.1.2 选择数据372 11.1.3 使用数据键374 11.1.4 数据排序376 11.1.5 数据分页381 11.1.6 编辑数据388 11.1.7 显示空数据391 11.1.8 格式化gridview控件395 11.1.9 在gridview控件中使用viewstate397 11.2 在gridview控件中使用字段398 11.2.1 使用boundfield398 11.2.2 使用checkboxfield401 11.2.3 使用commandfield402 11.2.4 使用buttonfield404 11.2.5 使用hyperlinkfield407 11.2.6 使用imagefield411 11.2.7 使用templatefield414 11.3 gridview控件的事件417 11.3.1 突出显示gridview行417 11.3.2 显示列汇总419 11.3.3 显示嵌套的主从表单421 11.4 扩展gridview控件424 11.4.1 创建长文本字段424 11.4.2 创建删除按钮字段428 11.4.3 创建验证字段430 11.5 小结432 第12章 使用detailsview控件和formview控件433 12.1 使用detailsview控件433 12.1.1 使用detailsview控件显示数据433 12.1.2 在detailsview控件中使用字段436 12.1.3 使用detailsview控件显示空数据437 12.1.4 使用detailsview控件对数据分页439 12.1.5 使用detailsview控件更新数据445 12.1.6 使用detailsview控件插入数据452 12.1.7 使用detailsview控件删除数据455 12.1.8 detailsview控件的事件456 12.1.9 格式化detailsview控件459 12.2 使用formview控件461 12.2.1 使用formview控件显示数据461 12.2.2 使用formview控件对数据分页463 12.2.3 使用formview控件编辑数据467 12.2.4 使用formview控件插入数据470 12.2.5 使用formview控件删除数据473 12.3 小结475 第13章 使用repeater控件和datalist控件476 13.1 使用repeater控件476 13.1.1 使用repeater控件显示数据476 13.1.2 在repeater控件中使用模板479 13.1.3 repeater控件的事件处理484 13.2 使用datalist控件490 13.2.1 使用datalist控件显示数据490 13.2.2 在多列中显示数据492 13.2.3 在datalist控件中使用模板494 13.2.4 使用datalist控件选择数据496 13.2.5 使用datalist控件编辑数据499 13.2.6 格式化datalist控件503 13.3 小结505 第14章 使用listview和datapager控件506 14.1 使用listview控件506 14.1.1 使用layouttemplate和itemtemplate507 14.1.2 使用grouptemplate510 14.1.3 选择一行512 14.1.4 数据库数据排序515 14.1.5 编辑数据库数据516 14.2 使用datapager控件522 14.2.1 创建自定义分页用户界面524 14.2.2 使用datapager控件进行数据源分页526 14.3 小结527 第15章 使用chart控件528 15.1 chart控件的基础知识528 15.1.1 使用chart控件显示数据528 15.1.2 排序和过滤数据532 15.1.3 统计公式534 15.2 定制图表的外观539 15.2.1 定制背景和绘图区540 15.2.2 3d图表543 15.3 多级报告543 15.4 小结544 第16章 使用queryextender控件545 16.1 queryextender控件介绍545 16.2 使用声明性语法查询数据545 16.2.1 使用controlfilter- expression进行查询545 16.2.2 使用customexpression进行查询546 16.2.3 使用dynamicfilter- expression进行查询546 16.2.4 使用methodexpression进行查询546 16.2.5 使用orderbyexpression进行排序547 16.2.6 使用propertyexpression进行查询547 16.2.7 使用rangeexpression进行查询548 16.2.8 使用searchexpression进行查询548 16.3 使用queryextender控件创建示例页面549 16.4 小结551 第四部分 创建组件 第17章 创建组件554 17.1 创建基本组件554 17.1.1 组件和动态编译556 17.1.2 app_code文件夹中不同语言的组件557 17.1.3 声明方法557 17.1.4 声明字段和属性559 17.1.5 声明构造函数563 17.1.6 重载方法和构造函数564 17.1.7 声明命名空间565 17.1.8 创建部分类566 17.1.9 继承和abstract类567 17.1.10 声明接口569 17.1.11 使用访问修饰符570 17.1.12 智能提示和组件571 17.1.13 在组件中使用asp.net内部对象573 17.2 创建组件库575 17.2.1 编译组件库575 17.2.2 向类库中添加引用578 17.3 架构思考581 17.3.1 创建多层应用程序581 17.3.2 创建用户界面层581 17.3.3 创建业务逻辑层584 17.3.4 创建数据访问层587 17.4 小结591 第18章 使用objectdatasource 控件592 18.1 使用objectdatasource控件表示对象592 18.1.1 绑定到组件593 18.1.2 绑定到datareader594 18.1.3 绑定到dataset596 18.1.4 绑定到linq to sql查询597 18.1.5 绑定到web服务598 18.2 使用objectdatasource控件与参数601 18.2.1 使用不同的参数类型604 18.2.2 作为参数传递对象607 18.3 使用objectdatasource控件分页、排序和过滤数据610 18.3.1 用户界面分页611 18.3.2 数据源分页613 18.3.3 用户界面排序618 18.3.4 数据源排序620 18.3.5 过滤数据624 18.4 处理objectdatasource控件的事件628 18.4.1 添加和修改参数628 18.4.2 处理方法的执行错误631 18.4.3 处理objectcreating事件635 18.5 objectdatasource控件与并发访问636 18.6 扩展objectdatasource控件639 18.6.1 创建自定义的objectdata- source控件639 18.6.2 创建自定义参数对象642 18.7 小结647 第19章 用ado.net创建数据访问 组件648 19.1 连接模式数据访问649 19.1.1 使用connection对象652 19.1.2 使用command对象660 19.1.3 使用datareader对象677 19.2 非连接模式数据访问683 19.2.1 使用dataadapter对象684 19.2.2 使用datatable对象689 19.2.3 使用dataview对象696 19.2.4 使用dataset对象699 19.3 执行异步数据库命令701 19.3.1 使用异步ado.net方法701 19.3.2 使用异步asp.net页面703 19.4 使用.net framework创建数据库对象706 19.4.1 启用clr集成706 19.4.2 使用.net framework创建用户自定义类型707 19.4.3 使用用户自定义类型创建数据访问层710 19.4.4 使用.net framework创建存储过程713 19.4.5 创建存储过程程序集714 19.5 小结718 第20章 使用linq to sql访问数据库720 20.1 c#和vb.net的新特性720 20.1.1 理解自动属性721 20.1.2 理解初始化器721 20.1.3 理解类型推断723 20.1.4 理解匿名类型724 20.1.5 理解泛型724 20.1.6 理解lambda表达式726 20.1.7 理解扩展方法729 20.1.8 理解linq730 20.2 创建linq to sql实体732 20.2.1 手工创建实体732 20.2.2 使用linq to sql designer创建实体735 20.2.3 构建实体关联737 20.2.4 使用linqdatasource控件738 20.3 使用linq to sql执行标准数据库命令741 20.3.1 linq to objects与linq to sql741 20.3.2 使用linq to sql进行选择742 20.3.3 使用linq to sql进行插入748 20.3.4 使用linq to sql进行更新751 20.3.5 使用linq to sql进行删除754 20.3.6 动态查询755 20.3.7 调试linq to sql759 20.4 创建自定义的linq实体基类761 20.4.1 使用实体基类762 20.4.2 使用entitybase类执行标准数据访问操作762 20.4.3 用entitybase类执行验证764 20.5 小结768 第21章 包含wcf数据服务的数据访问769 21.1 wcf数据服务概述769 21.2 使用包含service reference的数据服务770 21.3 使用包含数据上下文的数据服务773 21.4 小结775 第五部分 站点导航 第22章 使用导航控件778 22.1 理解站点地图778 22.2 使用sitemappath控件780 22.3 使用menu控件785 22.3.1 声明式添加menu条目785 22.3.2 组合使用menu控件和multiview控件788 22.3.3 绑定到站点地图791 22.3.4 绑定到xml文件794 22.3.5 绑定到数据库数据797 22.3.6 定制menu控件800 22.3.7 使用menu控件的模板806 22.4 使用treeview控件808 22.4.1 声明式地添加树视图节点808 22.4.2 在treeview控件中显示复选框812 22.4.3 绑定到站点地图814 22.4.4 绑定到xml文件815 22.4.5 绑定到数据库数据817 22.4.6 使用延时加载和ajax820 22.4.7 定制treeview控件824 22.5 创建分层的sql数据源控件830 22.6 小结832 第23章 使用站点地图834 23.1 使用sitemapdatasource控件834 23.2 使用sitemap类840 23.3 高级站点地图配置844 23.3.1 使用安全修整844 23.3.2 合并多个站点地图848 23.3.3 创建自定义的站点地图属性850 23.4 创建自定义站点地图提供程序851 23.4.1 创建autositemapprovider852 23.4.2 创建sqlsitemapprovider856 23.5 创建google的sitemap文件860 23.6 小结863 第24章 高级页面导航865 24.1 重映射url865 24.2 使用virtualpathprovider类872 24.2.1 virtualpathprovider类的局限性873 24.2.2 理解virtualpathprovider类873 24.2.3 注册virtualpathprovider类874 24.3 小结875 第25章 使用asp.net的url路由引擎876 25.1 url路由介绍876 25.2 基础url路由方案877 25.2.1 映射基础url877 25.2.2 映射包含参数的url878 25.2.3 映射包含多个段的url879 25.2.4 通过路由链接到其他页面879 25.3 高级url路由880 25.3.1 使用包含默认参数的路由880 25.3.2 使用约束路由881 25.3.3 路由的安全问题882 25.4 小结882

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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