我们正在创建一个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:\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 );
希望这可以帮助你…