利用WebService发布图片文件
服务器端:
1.新建一个Asp.net空网站RGImageServer
2.新建一个WebService项目ImageService,项目新增文件ImageService.asmx,添加方法GetTile()。
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.Web.Services;
6 using System.IO;
7 using System.Configuration;
8
9 namespace RGImageServer
10 {
11 /// <summary>
12 /// ImageServices 的摘要说明
13 /// </summary>
14 [WebService(Namespace = "http://tempuri.org/")]
15 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
16 [System.ComponentModel.ToolboxItem(false)]
17 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
18 // [System.Web.Script.Services.ScriptService]
19 public class ImageServices : System.Web.Services.WebService
20 {
21
22 [WebMethod]
23 public string HelloWorld()
24 {
25 return "Hello World";
26 }
27 private byte[] Stream2Bytes(Stream theStream)
28 {
29 int num;
30 MemoryStream stream = new MemoryStream();
31 while ((num = theStream.ReadByte()) != -1)
32 {
33 stream.WriteByte((byte)num);
34 }
35 theStream.Close();
36 return stream.ToArray();
37 }
38 [WebMethod]
39 public void GetTile(string imageName)
40 {
41 string filename = ConfigurationManager.AppSettings["ImagePath"] + @"\" + imageName;
42 HttpContext context = this.Context;
43 if (File.Exists(filename))
44 {
45 try
46 {
47 FileStream theStream = File.OpenRead(filename);
48 context.Response.ContentType = "image/png";
49 byte[] buffer = Stream2Bytes(theStream);
50 context.Response.OutputStream.Write(buffer, 0, buffer.Length);
51 }
52 catch (Exception)
53 {
54 context.Response.StatusCode = 500;
55 }
56 }
57 }
58 }
59 }
3.配置WebConfig文件,发布服务
1 <?xml version="1.0" encoding="utf-8"?>
2
3 <!--
4 有关如何配置 ASP.NET 应用程序的详细消息,请访问
5 http://go.microsoft.com/fwlink/?LinkId=169433
6 -->
7
8 <configuration>
9 <system.web>
10 <compilation debug="true" targetFramework="4.0" />
11 <webServices>
12 <protocols>
13 <add name="HttpGet" />
14 <add name="HttpPost" />
15 <add name="HttpSoap" />
16 </protocols>
17 </webServices>
18 </system.web>
19 <appSettings>
20 <add key="ImagePath" value="E:\"/>
21 </appSettings>
22 </configuration>
客户端:
1.调用下载图片代码如下:
1 public partial class Form1 : Form
2 {
3 public Form1()
4 {
5 InitializeComponent();
6 }
7 Stream ContentStream;
8 HttpWebResponse response = null;
9 string ContentType;
10 string ContentEncoding;
11 int ContentLength = 0;
12 int BytesProcessed;
13 private void button1_Click(object sender, EventArgs e)
14 {
15 ImageServices server = new ImageServices();
16 string Url = "http://localhost:6235/ImageServices.asmx/GetTile?imageName=aa.png";
17 string SavedFilePath = "D:\\bb.png";
18 // Download to file
19 string targetDirectory = Path.GetDirectoryName(SavedFilePath);
20 if (targetDirectory.Length > 0)
21 Directory.CreateDirectory(targetDirectory);
22 ContentStream = new FileStream(SavedFilePath, FileMode.Create);
23 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
24 request.ContentType = "text/xml";
25 using (response = request.GetResponse() as HttpWebResponse)
26 {
27 // only if server responds 200 OK
28 if (response.StatusCode == HttpStatusCode.OK)
29 {
30 ContentType = response.ContentType;
31 ContentEncoding = response.ContentEncoding;
32
33 // Find the data size from the headers.
34 string strContentLength = response.Headers["Content-Length"];
35 if (strContentLength != null)
36 {
37 ContentLength = int.Parse(strContentLength);
38 }
39 //缓存字节数组,大小1500byte
40 byte[] readBuffer = new byte[1500];
41 using (Stream responseStream = response.GetResponseStream())
42 {
43 while (true)
44 {
45 // Pass do.readBuffer to BeginRead.
46 int bytesRead = responseStream.Read(readBuffer, 0, readBuffer.Length);
47 if (bytesRead <= 0)
48 break;
49 ContentStream.Write(readBuffer, 0, bytesRead);
50 BytesProcessed += bytesRead;
51 }
52 }
53 ContentStream.Close();
54 ContentStream.Dispose();
55 ContentStream = null;
56 }
57 }
58
59
60 }
61 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。