Tenga en cuenta que los errores tales como CA1002 realmente están destinados a aplicarse a bibliotecas. Un servicio WCF no es una biblioteca, es un punto final que está todo sobre la serialización SOAP, REST, etc.
Usted encontrará que si se intenta exponer una interfaz como ICollection<T>
o IList<T>
, obtendrá errores que las tipo no puede ser serializado. De hecho, List<T>
es probablemente la mejor opción aquí. Cuando se genera un proxy en el lado del cliente, termina como una matriz de forma predeterminada, y muchos, si no la mayoría, lo cambian a List<T>
, por lo que el 90% de las veces, independientemente de cómo elija exponerlo, ese es el tipo que el cliente va a ver de todos modos.
Notaré que generalmente es una buena práctica no "devolver" una colección de una operación WCF o un servicio web en general. Es más común para crear una clase de proxy que contiene la colección que desea, y devolver eso, es decir:
[OperationContract]
OrdersResult GetOrders(OrderRequest request);
Cuando la clase de proxy podría tener este aspecto:
[DataContract]
public class OrdersResult
{
[DataMember]
public List<Order> Orders { get; set; }
}
De esa manera si usted decide Necesita agregar más datos a la solicitud o la respuesta, puede hacerlo sin causar cambios bruscos en el cliente.
Adición: El verdadero problema aquí es que con WCF WCF no sabe que un tipo particular sólo se utiliza para los datos salientes. Cuando cualquier clase se expone a través de un servicio WCF, WCF supone que puede ser parte de cualquiera de una solicitud o una respuesta , y si es parte de una solicitud, entonces el tipo debe ser concreta y no puede ser inmutable. Esa es la razón de todas las otras restricciones tontas como exigir el establecimiento de propiedades.
Simplemente no tiene otra opción más que usar un tipo de colección concreta y mutable, y en la mayoría de los casos eso significa una matriz o una lista genérica.
De acuerdo con la parte sobre la inmutabilidad, aunque las matrices no son realmente más inmutables que las listas genéricas; solo el * tamaño * es inmutable. – Aaronaught
Sí, lo sé, por eso habría preferido IEnumerable, pero dado que no es una opción, tenemos que conformarnos con el siguiente mejor. Las matrices son todavía "más inmutables" que las Listas porque no se puede cambiar el tamaño, por lo que comunican la intención un poco más claramente ... pero no por mucho, concedo :) –
Lol "más inmutable". Supongo que es una buena explicación como cualquiera. :PAG – Aaronaught