首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向WCF服务发送多个文件的最佳方式是什么?

向WCF服务发送多个文件的最佳方式是什么?
EN

Stack Overflow用户
提问于 2009-05-13 16:54:51
回答 1查看 7K关注 0票数 8

我们正在创建一个WCF服务,它需要2-4个图像文件(小-每个大约2k-5k )作为输入参数发送给它,以及大约6个文本字段参数。发回的数据只由几个文本值组成。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-05-13 23:05:05

可能有很多方法可以做到这一点,但这里是我的想法。请注意,我只包含了任意数量的字符串,您可以根据需要添加/删除。

首先,您需要某种类型的“输入”对象,该对象将传递给包含图像和字符串值的WCF服务。请注意,images属性是一个字节数组的数组;这是为了让您可以包含多个图像。

代码语言:javascript
复制
[DataContract]
public class InputObject
{
    [DataMember]
    public byte[][] Images { get; set; }

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

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

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

代码语言:javascript
复制
[DataContract]
public class ReturnObject
{
    [DataMember]
    public string FirstValue { get; set; }

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

您的ServiceContract将如下所示。

代码语言:javascript
复制
[ServiceContract]
public interface IService1
{
    [OperationContract]
    ReturnObject UploadData ( InputObject input );
}

您的Service类如下所示。

代码语言:javascript
复制
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;
    }
}

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

代码语言:javascript
复制
<wsHttpBinding>
  <binding name="Service1Binding" maxReceivedMessageSize="1000000">
    <readerQuotas maxArrayLength="1000000"
                  maxBytesPerRead="1000000"
                  maxDepth="1000000"
                  maxNameTableCharCount="1000000"
                  maxStringContentLength="1000000"/>
  </binding>
</wsHttpBinding>

确保将其指定为您的服务的bindingConfiguration。

代码语言:javascript
复制
<endpoint address="" 
          binding="wsHttpBinding" 
          contract="WcfService5.IService1" 
          bindingConfiguration="Service1Binding">

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

代码语言:javascript
复制
var images = new byte[2][];
images[0] = System.IO.File.ReadAllBytes( @"D:\Development\TestImage.bmp" );
images[1] = System.IO.File.ReadAllBytes( @"D:\Development\TestImage.jpg" );

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

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

希望这能帮到你。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/859112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档