WCF 中获取绝对路径问题
来源:互联网 发布:淘点点 淘宝外卖 编辑:程序博客网 时间:2024/06/05 15:55
在WCF中想使用Server.Map获取当前服务发布目录的绝对路径。可是在调试时却发现:
“System.Web.HttpContext.Current.Server.MapPath("..." + filename);”
“当没有开启ASP.NET相容模式时(aspNetCompatibilityEnabled="true"),WCF不支持HttpContext, HttpApplication,大部分文章都建议修改<serviceHostingEnvironment aspNetCompatibilityEnabled="true">使WCF可使用ASP.NET传统做法。”
最后有两种解决方法:
string t1 = System.Web.HttpContext.Current.Server.MapPath("~");//以上写法在WCF未开aspNetCompatibilityEnabled时,//会因HttpContext.Current == null发生错误
string t2 = System.Web.Hosting.HostingEnvironment.MapPath("~");
//以上写法在WCF中使用没有问题
但以上两种方法在单元测试里始终为NULL返回
第三种方法:
var rootDirectory = System.AppDomain.CurrentDomain.BaseDirectory; var relativeDirectory = Path.Combine("Photos", obj.AlbumId.ToString()); var dir = Path.Combine(rootDirectory, relativeDirectory); if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);
var fileName = Guid.NewGuid().ToString() + "." + obj.ImageType; var filePath = Path.Combine(dir, fileName); var fileStream = new MemoryStream(obj.ImageData); var bitmap = Bitmap.FromStream(fileStream); bitmap.Save(filePath);
第三种方法也可用在单元测试里,测试通过
1.在WCF服务端使用HttpContext.Current为空的解决方案:
1)在服务端WCF的类上加描述[AspNetCompatibilityRequi rements(RequirementsMode = AspNetCompatibilityRequi rementsMode.Allowed)]
2)在服务端WEBCONFIG的节点里加 2.在WCF服务端使用HttpContext.Current.Server.MapPath的替代解决方案:
System.Web.Hosting.HostingEnvironment.MapPath("~/Upload" + fileFolder);
3.解决大文件byte[]传输的问题:
服务端,Web.config文件里,Bindings节是空的,而Service也没有指定bindingConfiguration属性,那么它们采用的就是默认的65535的大小。
问题找到,解决就比较容易了:
在Bindings节添加新的Binding设置(位于system.serviceModel节点),指定最大接受数据:
<</SPAN>bindings> <</SPAN>basicHttpBinding> <</SPAN>binding name="LargeData" maxReceivedMessageSize="2147483647" messageEncoding="Text" transferMode="Streamed" sendTimeout="00:10:00" /> </</SPAN>basicHttpBinding> </</SPAN>bindings>之后给相应的Service指定bindingConfiguration属性:
<</SPAN>service behaviorConfiguration="Server.Service.WcfServiceBehavior" name="Server.Service.WcfService"> <</SPAN>endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeData" contract="Server.Service.WcfService" /> <</SPAN>endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </</SPAN>service>这样就可以从客户端发送足够大的数据了。
P.S.:
.net默认只能传4M的文件,所以尽管设定了Wcf两端的配置,还是超不出.net的限定,所以如果要传输大文件,还需要在System.Web节下加上
<</SPAN>httpRuntimemaxRequestLen
gth ="102400" />这里的单位是KB,这样就可以传100M的文件了。当然,这么大的文件,最好还是分段传输比较好。
4.出现下列错误的解决方案:
① 无法处理消息,这很可能是因为操作“http://tempuri.org/”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配。
解决方法:只需在客户端和服务端的binding节点内修改如下节点: <</SPAN>securitymode="None"></</SPAN>security> ② 超时问题
解决方法:客户端的
- WCF 中获取绝对路径问题
- WCF 获取文件绝对路径问题
- Struts2中获取绝对路径
- jsp中获取绝对路径
- JAVA获取绝对路径的问题
- JSP中获取当前绝对路径
- Java中获取项目绝对路径
- 获取绝对路径 去除路径的% 空格问题
- JS获取input file绝对路径问题
- Tomcat下获取项目绝对路径问题
- 获取绝对路径去除路径的%空格问题
- war包部署时获取绝对路径问题
- Java中获取绝对路径出现% 20(路径被转码)的问题
- Ruby中获取当前脚本的绝对路径
- IE8中如何获取中的绝对路径
- JAVA中获取相对路径、绝对路径总结
- JAVA中获取相对路径、绝对路径总结
- jsp中获取文件当前绝对路径
- VS2010 Chart图表组件 显示 和 错误问题
- hdu4468 Spy kmp
- P09背包问题问法的变化
- Oracle 视图(View)
- Allegro不规则带通孔焊盘的制作
- WCF 中获取绝对路径问题
- Github上开源文件ant生成jar包
- WPF SL C# 后台画线
- UVA 11384 Help is needed for Dexter (找规律)
- java.lang.VerifyError: 堆栈形状不一致
- DataReader最好不要用,
- 在DirectX9中进行Occlusion Culling
- win7下安装ubuntu12.04,开机后进入grub
- struts2.3.15之环境搭建