Wcf for wp8 上传图片到服务器,将图片名字插入数据库字段(五)
环境:.NET Framework 3.5
服务: IIS EXpress托管 WCF服务程序
配置:Web.config
<!--<connectionStrings>
<add name="DbConnection"
connectionString="server=数据库地址;database=数据库名字;uid=用户名;pwd=密码;"/>
</connectionStrings>-->
<system.serviceModel>
<services>
<service name="TestWcfService.Service1" behaviorConfiguration="TestWcfService.Service1Behavior">
<!-- Service Endpoints -->
<!--<endpoint address="" binding="basicHttpBinding" contract="TestWcfService.IService1" bindingConfiguration="LargeBuffer">-->
<endpoint address="http://IP地址:端口号/PhoneApp/Service1.svc" binding="basicHttpBinding" contract="TestWcfService.IService1" bindingConfiguration="LargeBuffer">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="TestWcfService.Service1Behavior">
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
<serviceMetadata httpGetEnabled="true"/>
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="false"/>
<dataContractSerializer maxItemsInObjectGraph="" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="LargeBuffer"
maxBufferSize=""
maxBufferPoolSize=""
maxReceivedMessageSize="">
<readerQuotas
maxStringContentLength=""
maxBytesPerRead=""
maxDepth=""
maxNameTableCharCount=""
maxArrayLength="" />
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
Web.Debug.config and Web.Release.config
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="DbConnection"
connectionString="server=数据库地址;database=数据库名字;uid=用户名;pwd=密码;"/>
</connectionStrings>
<system.web>
</system.web>
</configuration>
说明:
本机调试程序的时候 打开Web.config 文件 绿色的标注的connectionStrings 和 endpoint address 节点 注销 红色的 endpoint address节点。调试成功
如果将WCF服务程序发布到网站的时候,关闭Web.config 文件 绿色的标注的connectionStrings 和 endpoint address 节点 打开 红色的 endpoint address节点。调试成功
为什么这么做:
客户端调用发布后的WCF服务接口的时候,有时候会出现 时而断时而连的情况。注明
<endpoint address="http://IP地址:端口号/PhoneApp/Service1.svc" binding="basicHttpBinding" contract="TestWcfService.IService1" bindingConfiguration="LargeBuffer">
这个节点说明是要访问指定的服务就不会出现 访问远程服务没有找到这个问题了 更新WCF服务的时候,要在客户端更新WCF服务,引用的就是新服务
配置好WCF服务程序在WCF服务程序里实现2步
1.上传图片到服务器 IService1.cs Service1.svc
namespace TestWcfService
{
[ServiceContract]
public interface IService1
{
[OperationContract]
bool StationUpFile(UpFileContent Date);
}
public class UpFileContent
{
public byte[] ImageContent { get; set; }
}
}
public bool StationUpFile(UpFileContent Date)
{
bool IsSuccess = false;
#region UpImage string DiskName = "e:";
string FileAddress = @"\ProductImages\Larger\";
string LocationAddress = DiskName + FileAddress;
string filePath = string.Empty;
using (Stream sourceStream = new MemoryStream(Date.ImageContent))
{
if (!sourceStream.CanRead)
{
throw new Exception("");
}
if (!Directory.Exists(LocationAddress))
{
Directory.CreateDirectory(LocationAddress);
}
filePath = Path.Combine(LocationAddress, Date.StationImageName);
if (!File.Exists(filePath))
{
try
{
using (FileStream targetStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write))
{
int count = ;
const int bufferlength = ;
byte[] buffer = new byte[bufferlength];
while ((count = sourceStream.Read(buffer, , bufferlength)) > )
{
targetStream.Write(buffer, , count);
}
IsSuccess = true;
}
}
catch
{
return IsSuccess;
}
}
} LocationAddress = @"e:\ProductImages\Middle\";
if (!Directory.Exists(LocationAddress))
Directory.CreateDirectory(LocationAddress); MakeSmallImg(filePath, Path.Combine(LocationAddress, Date.StationImageName), , ); LocationAddress = @"e:\ProductImages\Small\";
if (!Directory.Exists(LocationAddress))
Directory.CreateDirectory(LocationAddress);
MakeSmallImg(filePath, Path.Combine(LocationAddress, Date.StationImageName), , );
#endregion
//这里实现将图片名字写到数据库的某个字段里
}
此路径就是服务器的路径 (因为WCF服务程序部署到该服务器啦!写文件就写到这个服务器的路径下)
这是分成 大图 中图 小图的函数 可以略过
private void MakeSmallImg(string filePath, string fileSaveUrl, System.Double templateWidth, System.Double templateHeight)
{
using (Image myImage = System.Drawing.Image.FromFile(filePath))
{
System.Double newWidth = myImage.Width, newHeight = myImage.Height;
//宽大于模版的横图
if (myImage.Width > myImage.Height || myImage.Width == myImage.Height)
{
if (myImage.Width > templateWidth)
{
//宽按模版,高按比例缩放
newWidth = templateWidth;
newHeight = myImage.Height * (newWidth / myImage.Width);
}
}
//高大于模版的竖图
else
{
if (myImage.Height > templateHeight)
{
//高按模版,宽按比例缩放
newHeight = templateHeight;
newWidth = myImage.Width * (newHeight / myImage.Height);
}
}
System.Drawing.Size mySize = new System.Drawing.Size((int)newWidth, (int)newHeight);
using (Image bitmap = new System.Drawing.Bitmap(mySize.Width, mySize.Height))
{
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.InterpolationMode = InterpolationMode.High;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.Clear(Color.Transparent);
graphics.DrawImage(myImage, new System.Drawing.Rectangle(, , bitmap.Width, bitmap.Height), new System.Drawing.Rectangle(, , myImage.Width, myImage.Height), System.Drawing.GraphicsUnit.Pixel);
bitmap.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
}
}
2.将编译好的WCF服务程序 放到该网站。
接下来 要在wp客户端程序 更新引用服务
wp 客户端程序调用WCF服务
ServiceReference1.Service1Client Sc;
public void Post(Action<bool> action)
{
//若用户选择了图片,则实例化 UploadPic 对象,用于上传图片
//注意:必须在UI线程实例化该对象! new Thread(() =>
{
Sc = new ServiceReference1.Service1Client();
Sc.OpenAsync();
if (null != ImageSource)
{
MemoryStream fileStream = new MemoryStream();
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isoStream = store.OpenFile(pic.FullPathName, FileMode.Open))
{
isoStream.CopyTo(fileStream);
}
}
//流转换为字节数组
byte[] tbuffer = fileStream.ToArray();
UpFileContent upfile = new UpFileContent();
upfile.StationImageName = pic.FileName;
upfile.ImageContent = tbuffer; try
{
Sc.StationUpFileAsync(upfile);
Sc.StationUpFileCompleted += (s1, e1) =>
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{ if (e1.Result)
{
fileStream.Close();
fileStream.Dispose();
}
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
if (null != action)
{
Sc.CloseAsync();
ImageSource = null;
action(true);
}
});
});
};
}
catch (TimeoutException timeout)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
if (null != action)
{
Sc.Abort();
ImageSource = null;
MessageBox.Show(timeout.Message);
action(false);
}
});
}
catch (CommunicationException commException)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
if (null != action)
{
Sc.Abort();
MessageBox.Show(commException.Message);
ImageSource = null;
action(false);
}
});
}
}
else
{ } }).Start();
}
THE END
WCF服务发布程序 到此告一段落!感谢!
Wcf for wp8 上传图片到服务器,将图片名字插入数据库字段(五)的更多相关文章
- PHP部分--图片上传服务器、图片路径存入数据库,并读取
html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- PHP部分--file图片上传服务器、图片路径存入数据库,并读取
前端代码 <form action="shangchuan.php" method="post" enctype="multipart/form ...
- java后台中处理图片辅助类汇总(上传图片到服务器,从服务器下载图片保存到本地,缩放图片,copy图片,往图片添加水印图片或者文字,生成二维码,删除图片等)
最近工作中处理小程序宝箱活动,需要java画海报,所以把这块都快百度遍了,记录一下处理的方法,百度博客上面也有不少坑! 获取本地图片路径: String bgPath = Thread.current ...
- 小程序踩坑记录-上传图片及canvas裁剪图片后上传至服务器
最近在写微信小程序的上传图片功能,趟过了一些坑记录一下. 想要满足的需求是,从手机端上传图片至服务器,为了避免图片过大影响传输效率,需要把图片裁剪至适当大小后再传输 主要思路是,通过wx.choose ...
- 通过android 客户端上传图片到服务器
昨天,(在我的上一篇博客中)写了通过浏览器上传图片到服务器(php),今天将这个功能付诸实践.(还完善了服务端的代码) 不试不知道,原来通过android 向服务端发送图片还真是挺麻烦的一件事. 上传 ...
- Android 上传图片到服务器 okhttp一
[目录] (一)上传图片到服务器一 ---------------------------------Android代码 (二)上传图片到服务器二--------------------------- ...
- c#批量上传图片到服务器示例分享
这篇文章主要介绍了c#批量上传图片到服务器示例,服务器端需要设置图片存储的虚拟目录,需要的朋友可以参考下 /// <summary> /// 批量上传图片 /// </summary ...
- 5分钟Serverless实践:构建无服务器的图片分类系统
前言 在过去“5分钟Serverless实践”系列文章中,我们介绍了如何构建无服务器API和Web应用,从本质上来说,它们都属于基于APIG触发器对外提供一个无服务器API的场景.现在本文将介绍一种新 ...
- 改造vue-quill-editor: 结合element-ui上传图片到服务器
前排提示:现在可以直接使用封装好的插件vue-quill-editor-upload 需求概述 vue-quill-editor是我们再使用vue框架的时候常用的一个富文本编辑器,在进行富文本编辑的时 ...
随机推荐
- ASP+ACCESS手工注入详解
SQL注入这么长时间,看见有的朋友还是不会手工注入,那么我来演示一下.高手略过. 我们大家知道,一般注入产生在没经过虑的变量上,像ID?=XX这样的. 下面以这个网址为例: http://zsb.xx ...
- BurpSuite实例教程
很久以前就看到了Burp suite这个工具了,当时感觉好NB,但全英文的用起来很是蛋疼,网上也没找到什么教程,就把这事给忘了.今天准备开始好好学习这个渗透神器,也正好给大家分享下.(注:内容大部分是 ...
- Java Socket 网络编程心跳设计概念
Java Socket 网络编程心跳设计概念 1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...
- git基础知识总结
1,clone git clone https://github.com/KoMiles/helloword helloword 2,pull git pull 3,commit git commit ...
- LNMP安装成功的界面
在ubuntu13.10上面安装一个lnmp集成环境. 下面是安装成功的界面. ===========================add nginx and php-fpm on startup ...
- 登录DA面板出现:License has expired
登录DA面板出现:License has expired的解决方法. 首先看是否过期,如果出现The license looks fine on this end. 登录 SSH as root # ...
- 微信二维码占座 书本水杯板砖都out了
还在用书本.水杯.坐垫.板砖.铁链占座?你OUT了.新学期开学,重大图书馆开通了扫二维码占座功能,同学们只需扫一扫贴在桌子上的二维码,就可以占座.不过,占座有时间限制,如果没有在规定的时间内返回,系统 ...
- TCPIP三次握手详情
TCP正常建立和关闭的状态变化 TCP连接的建立可以简单的称为三次握手,而连接的中止则可以叫做 四次握手. 建立连接 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第 ...
- vsPhere安装虚拟sm
1.在机器上单击右键 2.选择“编辑设置” 设备状态,选择打开电源时链接,数据存储ISO文件,选择镜象. 3.重启,进入安装界面. 4.
- cocos2d调度器(定时执行某函数)
调度器(scheduler) 继承关系 原理介绍 Cocos2d-x调度器为游戏提供定时事件和定时调用服务.所有Node对象都知道如何调度和取消调度事件,使用调度器有几个好处: 每当Node不再可见或 ...