我们正在创建一个WCF服务,需要2-4个图像文件(每个小约2k-5k)作为输入参数发送给它,以及大约6个文本字段参数.发回的数据只包含一些文本值.
我知道单个文件可以作为流发送,但我不知道如何发送多个文件.
在这种情况下,客户将是第三方,我们希望尽可能简单地与我们的WCF服务连接.
Ste*_*nan 24
可能有很多方法可以实现这一目标,但这是我的想法.请注意,我只包含了任意数量的字符串,您可以根据需要添加/删除.
首先,您需要某种"输入"对象,该对象将传递给包含图像和字符串值的WCF服务.注意Images属性是一个字节数组的数组; 这样你可以包含多个图像.
[DataContract]
public class InputObject
{
[DataMember]
public byte[][] Images { get; set; }
[DataMember]
public string FirstValue { get; set; }
[DataMember]
public string SecondValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
接下来,您将需要一个WCF服务将返回的对象...
[DataContract]
public class ReturnObject
{
[DataMember]
public string FirstValue { get; set; }
[DataMember]
public string SecondValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您的ServiceContract将如下所示.
[ServiceContract]
public interface IService1
{
[OperationContract]
ReturnObject UploadData ( InputObject input );
}
Run Code Online (Sandbox Code Playgroud)
你的服务类就像这样.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要确保服务的绑定适合发送图像数据,因此增加一些默认限制是合适的.这是我服务配置的绑定示例.
<wsHttpBinding>
<binding name="Service1Binding" maxReceivedMessageSize="1000000">
<readerQuotas maxArrayLength="1000000"
maxBytesPerRead="1000000"
maxDepth="1000000"
maxNameTableCharCount="1000000"
maxStringContentLength="1000000"/>
</binding>
</wsHttpBinding>
Run Code Online (Sandbox Code Playgroud)
确保将此指定为您的服务的bindingConfiguration.
<endpoint address=""
binding="wsHttpBinding"
contract="WcfService5.IService1"
bindingConfiguration="Service1Binding">
Run Code Online (Sandbox Code Playgroud)
现在您需要做的就是从客户端的服务中引用它并调用它.
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 );
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助你...
| 归档时间: |
|
| 查看次数: |
6713 次 |
| 最近记录: |