WCF-复合类型使用;传输图片

Posted C#

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WCF-复合类型使用;传输图片相关的知识,希望对你有一定的参考价值。

一:WCF服务端

IService1.cs中:

public interface IService1
{
    [OperationContract]
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    string Article_Pic_Add_Test(TransPicType picType);
}

    /// <summary>
    /// 图片传输用到的复合类型
    /// </summary>
    [DataContract]
    public class TransPicType
    {
        byte[] byteValue = null;
        string stringType = "";
        [DataMember]
        public byte[] ByteValue
        {
            get; set;
        }
        [DataMember]
        public string StringValue { get; set; }
    }

Service1.svc.cs中:

public string Article_Pic_Add_Test(TransPicType picType)
{
            
    string app_path = AppDomain.CurrentDomain.BaseDirectory;
    byte[] bs = picType.ByteValue;
    string getStr = picType.StringValue;
    //string imgString = String.Join(",", Array.ConvertAll(bs, (Converter<byte, string>)Convert.ToString));//将byte[]转换为字符串
    File.WriteAllBytes(app_path + "b6.png", bs);//将图片写入app_path
    return null;
}

 

 

二:客户端调用

0、先添加服务引用。。。这个不懂的可以搜一下、微软都搞成傻瓜一键式的了···

1、Web.config中(地址和契约根据自己的情况改下就行了):

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webBehavior">
        <webHttp/>
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_IService1" />
    </basicHttpBinding>
    <webHttpBinding>
      <!--跨域-->
      <binding name="webBinding">
      </binding>
    </webHttpBinding>
  </bindings>
  <client>
    <endpoint address="http://localhost:16625/Service1.svc" binding="webHttpBinding" bindingConfiguration="webBinding"
              contract="ser.IService1" name="test"
    behaviorConfiguration="webBehavior" />
  </client>
</system.serviceModel>

2、Default.aspx.cs中:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string app_path = AppDomain.CurrentDomain.BaseDirectory;
            byte[] bs = this.BmpToJpegBuff(app_path + "a.jpg");
            ser.Service1Client s = new ser.Service1Client();
            ser.TransPicType pt = new ser.TransPicType();
            pt.ByteValue = bs;
            pt.StringValue = "测试文字";
            s.Article_Pic_Add_Test(pt);


            int i = 0;
        }

        public byte[] BmpToJpegBuff(string filePath)
        {
            System.Drawing.Image img = System.Drawing.Image.FromFile(filePath);
            ImageConverter converter = new ImageConverter();
            byte[] bmpSrc = (byte[])converter.ConvertTo(img, typeof(byte[]));
            MemoryStream ms = new MemoryStream(bmpSrc);
            MemoryStream msjpg = new MemoryStream();
            Bitmap myBitmap = new Bitmap(ms);
            myBitmap.Save(msjpg, ImageFormat.Jpeg);
            byte[] bjpeg = msjpg.GetBuffer();
            return bjpeg;
        }
    }
}

 

 

转换图片的方法用到了:blog.csdn.net/ruijc/article/details/5809139写的、辛苦、、、O(∩_∩)O

 

以上是关于WCF-复合类型使用;传输图片的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows Azure 中创建和流式传输复合清单文件

WCF实现上传图片功能

WCF 传输与消息

具有 basicHttpBinding、传输安全性和基本客户端凭据类型的自定义 WCF 凭据验证器

Android 片段与复合控件

如何以编程方式配置 WCF 已知类型?