加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

将多个文件发送到WCF服务的最佳方法是什么?

发布时间:2020-12-14 23:36:48 所属栏目:资源 来源:网络整理
导读:我们正在创建一个WCF服务,需要2-4个图像文件(每个小约2k-5k)作为输入参数发送给它,以及大约6个文本字段参数.发回的数据只包含一些文本值. 我知道单个文件可以作为流发送,但我不知道如何发送多个文件. 在这种情况下,客户将是第三方,我们希望尽可能简单地与我
我们正在创建一个WCF服务,需要2-4个图像文件(每个小约2k-5k)作为输入参数发送给它,以及大约6个文本字段参数.发回的数据只包含一些文本值.

我知道单个文件可以作为流发送,但我不知道如何发送多个文件.

在这种情况下,客户将是第三方,我们希望尽可能简单地与我们的WCF服务连接.

解决方法

可能有很多方法可以实现这一目标,但这是我的想法.请注意,我只包含了任意数量的字符串,您可以根据需要添加/删除.

首先,您需要某种“输入”对象,该对象将传递给包含图像和字符串值的WCF服务.注意Images属性是一个字节数组的数组;这样你可以包含多个图像.

[DataContract]
public class InputObject
{
    [DataMember]
    public byte[][] Images { get; set; }

    [DataMember]
    public string FirstValue { get; set; }

    [DataMember]
    public string SecondValue { get; set; }
}

接下来,您将需要一个WCF服务将返回的对象…

[DataContract]
public class ReturnObject
{
    [DataMember]
    public string FirstValue { get; set; }

    [DataMember]
    public string SecondValue { get; set; }
}

您的ServiceContract将如下所示.

[ServiceContract]
public interface IService1
{
    [OperationContract]
    ReturnObject UploadData ( InputObject input );
}

你的服务类就像这样.

public class Service1 : IService1
{
    public ReturnObject UploadData ( InputObject input )
    {
        // Do your thing with InputObject data

        ReturnObject returnObject = new ReturnObject
                                        {
                                            FirstValue = "MyFirstValue",SecondValue = "MySecondValue"
                                        };

        return returnObject;
    }
}

您需要确保服务的绑定适合发送图像数据,因此增加一些默认限制是合适的.这是我服务配置的绑定示例.

<wsHttpBinding>
  <binding name="Service1Binding" maxReceivedMessageSize="1000000">
    <readerQuotas maxArrayLength="1000000"
                  maxBytesPerRead="1000000"
                  maxDepth="1000000"
                  maxNameTableCharCount="1000000"
                  maxStringContentLength="1000000"/>
  </binding>
</wsHttpBinding>

确保将此指定为您的服务的bindingConfiguration.

<endpoint address="" 
          binding="wsHttpBinding" 
          contract="WcfService5.IService1" 
          bindingConfiguration="Service1Binding">

现在您需要做的就是从客户端的服务中引用它并调用它.

var images = new byte[2][];
images[0] = System.IO.File.ReadAllBytes( @"D:DevelopmentTestImage.bmp" );
images[1] = System.IO.File.ReadAllBytes( @"D:DevelopmentTestImage.jpg" );

var input = new InputObject
                {
                    Images = images,FirstValue = "MyFirstValue",SecondValue = "MySecondValue"
                };

var client = new Service1Client();
client.UploadData( input );

希望这可以帮助你…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读