Вероятно, есть много способов сделать это, но вот мои мысли. Обратите внимание, что я только что включил произвольное количество строк, которые можно добавлять / удалять по мере необходимости.
Во-первых, вам понадобится некий «входной» объект, который будет передан вашей службе 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>
Убедитесь, что вы указали это в качестве конфигурации привязки для вашего сервиса.
<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 );
Надеюсь, это поможет вам ...