Probablemente haya muchas maneras de lograr esto, pero aquí están mis pensamientos. Tenga en cuenta que acabo de incluir un número arbitrario de cadenas, puede agregar/eliminar según sea necesario.
Primero, querrá un tipo de objeto de "entrada" que se pasará a su servicio WCF que contiene sus imágenes y valores de cadena. Observe que la propiedad Images es una matriz de matrices de bytes; esto es para que pueda incluir múltiples imágenes.
[DataContract]
public class InputObject
{
[DataMember]
public byte[][] Images { get; set; }
[DataMember]
public string FirstValue { get; set; }
[DataMember]
public string SecondValue { get; set; }
}
A continuación, usted querrá un objeto que va a devolver su servicio WCF ...
[DataContract]
public class ReturnObject
{
[DataMember]
public string FirstValue { get; set; }
[DataMember]
public string SecondValue { get; set; }
}
Su ServiceContract se verá así.
[ServiceContract]
public interface IService1
{
[OperationContract]
ReturnObject UploadData (InputObject input);
}
Y a su clase de servicio les gusta esto.
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;
}
}
Tendrá que asegurarse de que las consolidaciones de su servicio son apropiadas para el envío de datos de imagen para aumentar algunos de los límites por defecto es apropiado. Aquí hay un enlace de ejemplo de la configuración de mi servicio.
<wsHttpBinding>
<binding name="Service1Binding" maxReceivedMessageSize="1000000">
<readerQuotas maxArrayLength="1000000"
maxBytesPerRead="1000000"
maxDepth="1000000"
maxNameTableCharCount="1000000"
maxStringContentLength="1000000"/>
</binding>
</wsHttpBinding>
Asegúrese de especificar esto como su configuración de enlace para su servicio.
<endpoint address=""
binding="wsHttpBinding"
contract="WcfService5.IService1"
bindingConfiguration="Service1Binding">
Ahora todo lo que tiene que hacer es hacer referencia a esto del servicio de su cliente y llámelo.
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);
la esperanza que esto te ayuda ...
Un muy detallado y fácil de seguir el ejemplo. ¿Esto lo hizo por ti NagaMensch? Si es así, creo que merece una aceptación, ¿no? –
NagaMensch, ¿esto respondió a tu pregunta? –
Sí, esto fue muy útil. Terminé usando una variante de esto, que era una colección de Byte []. – alchemical