2010-05-25 19 views
15

¿Cómo puedo usar métodos genéricos en el servicio wcf?WCF. Servicio de métodos genéricos

de escribir este código:

[OperationContract] 
void AddItem<T>(T item); 

Pero recibir el siguiente error:

Type 'T' cannot be exported as a schema type because it is an open generic type. You can only export a generic type if all its generic parameter types are actual types.

Respuesta

28

Usted simplemente no puede. No es posible hacer eso, ya que el jabón no es compatible con esto. Vea esto article, que menciona cómo evitar genéricos creando un objeto local intermedio que se llama y arroja el objeto antes de llamar a la operación WCF.

6

No debería intentar hacer esto. En un servicio web habilitado para SOAP, todos los tipos deben conocerse cuando se publica el WSDL para que los clientes puedan generar un proxy. Los genéricos simplemente no existen en la especificación SOAP. SOAP está destinado a ser interoperable y los genéricos no existen en todos los idiomas.

1

Como todos los demás ya han mencionado, WCF y SOAP no son compatibles. El problema es que todo lo que pase de un lado a otro entre el cliente y el servidor debe poder expresarse en un documento de esquema XML.

El esquema XML admite todos los tipos atómicos habituales, como string, int, datetime, y es compatible con tipos complejos formados por esos tipos atómicos, y es compatible con la herencia.

Pero el esquema XML no tiene soporte para genéricos, y por lo tanto, cualquier cosa que intercambie a través de WCF y SOAP no puede ser genérico, debe usar solo tipos concretos, no genéricos.

No sé de ninguna manera alrededor de esto, tampoco. Es una limitación y tienes que vivir con eso por ahora.

0

El error dice que los tipos abiertos no están permitidos. Lo que probablemente está permitido es algo así como:

[OperationContract] 
void AddItem<T>(T item) where T : MyBaseType; 

Por supuesto, todos los tipos heredados deben añadirse con el atributo KnownType.

+2

De las pruebas que acabo de hacer que no aparece para trabajar Desafortunadamente. Todavía se queja de que sea un tipo genérico abierto. – Sam

1

tipos genéricos acotada en contratos de datos pueden ser utilizados, pero deben ser specfied parámetros de tipos en el contrato de servicio y que los parámetros de tipo especificados con datos válidos contratos