Sugerencia: Esta pregunta tiene muchos duplicados, pero ninguna de las soluciones me funciona.

Lo que tengo es un servicio web y un cliente, ambos con referencias a un ensamblado compartido «DataModel». Estoy creando el proxy de servicio mediante la opción «Agregar referencia de servicio…» cuadro de diálogo y seleccione «Reutilización de los tipos en todos los ensamblados de referencia», pero todavía no crea nuevos tipos en lugar de reutilizar la mía.

  • Se utiliza para el trabajo, pero ahora de repente no es la reutilización de los tipos más
  • Referencia al ensamblado compartido antes de de agregar el servicio de referencia no funciona
  • Reiniciar VS2010 no ayuda (tengo todas las actualizaciones)
  • He probado con una simple clase POCO (sólo un simple clase que contiene un número entero de propiedad), también sin suerte
  • Eliminar y volver a agregar la referencia de servicio (o el ensamblado compartido de referencia) no ayuda
  • Sólo seleccionar el ensamblado compartido en «la Reutilización de los tipos especificados ensamblados de referencia» – sin suerte
  • svcutil.exe /reference da el mismo resultado

Estoy en el extremo del ingenio de alguna manera. Hay otras soluciones?

EDICIÓN: debo añadir que acabo de resetear mi proyecto anterior se confirma, y lo que ocurra cometer yo uso, sigue el mismo problema. Y yo saber se trabajó con anteriores se compromete!

Yo también se enfrentaron a este Problema. El Problema en mi solución fue el hecho de que una biblioteca estaba usando otra .NET Framework Versión

OriginalEl autor AndiDog | 2011-11-27

6 Comentarios

  1. 14

    Referencia al ensamblado compartido antes de agregar la referencia de servicio no funciona

    Que usted necesita para hacer esto, o al menos actualizar el servicio de referencia después de agregar la referencia.

    Eliminar y volver a agregar la referencia de servicio (o el ensamblado compartido de referencia) no ayuda

    y que no es necesario hacer esto, pero yo lo he probado demasiado.

    Para que la «reutilización» para el trabajo de ambos proyectos (cliente y de servicio) deben usar la misma versión de la asamblea. Estás referencia al proyecto, lo cual es bueno – me he encontrado con esto antes de que cuando se hace referencia al ensamblado directamente debido a las diferentes versiones.

    He aquí algunas otras cosas para intentar

    • Abrir ‘el Administrador de Configuración’ para su solución: asegúrese de que el ensamblado compartido está configurado para construir.
    • Garantizar el uso de una referencia de proyecto para el cliente y de servicio utilizando la última asamblea en el cliente no es de ayuda si el servicio está utilizando una versión anterior.
    • Eliminar la referencia del proyecto y construir, y esperar que la creación de fallos si no falla, a continuación, debe hacer referencia a algo más.
    • Comprobar manualmente que la última ‘ensamblado compartido’ está incluido en la compilación de la tanto servicio del cliente y verificación de la bin carpeta, marque la asamblea de la versión /fecha de construcción.

    Si todo lo demás falla, la mejor manera para forzar el objeto mismo en ambos lados es quitar el «servicio de referencia’ proxy por completo y utilizar el ChannelFactory método. Ver Sencilla Explicación de Cómo Realizar una Llamada de Servicio WCF sin la Adición de Servicio Ref y VS2010 Ventajas de Agregar Referencia de Servicio más directo ClientBase<>. Este es mi preferido de WCF patrón debido a que elimina la necesidad de » servicio de Actualización de referencia…», y elimina todo lo que genera el código proxy.

    Buenas sugerencias! Comprobado todo esto, y los archivos Dll compartidos son el mismo construir en tanto el servicio y el cliente. Por lo tanto, mi conclusión es que esta característica no es lo suficientemente confiable para mí y voy a intentar reemplazar el proxy por el IChannelFactory<IMyService> solución.
    El svcutil codegen herramienta es generalmente muy buena, pero he tenido un par de problemas con el yo mismo; una vez que usted utilice el ChannelFactory patrón verá su elegancia y probablemente nunca vuelva a ‘Servicio de Referencia…’
    Ahora me cambió mi aplicación para utilizar ChannelFactory<IMyService> con muy poco esfuerzo. Esto es realmente una buena solución si el contrato (IMyService) puede ser en un ensamblado compartido. Gracias!
    Cómo cambiar la aplicación para utilizar ChannelFactory fraseología? puede alguien que me señale el código de ejemplo.
    ChannelFactory patrón es mucho más fácil de compartir entre los tipos de proyecto, si han de hacer referencia a la dll de servicio. Para obtener más información acerca de la forma: msdn.microsoft.com/en-us/library/ms734681(v=vs 110).aspx

    OriginalEl autor Kirk Broadhurst

  2. 11

    Acabo de ir a través de todo un día tratando de averiguar por qué los Tipos en mi archivo dll compartido no se reutilizan cuando he añadido un Servicio de Referencia en VS2013. Resulta que el servicio tenía varios problemas relacionados con la serialización. Tuve un par de enumeraciones que no tienen la EnumMember atributo. La forma en que he resuelto mis problemas fueron al tratar de los siguientes pasos:

    1. Comentando todas las operaciones (métodos decoradas con OperationContract atributo) en mi ServiceContract que no volver Tipos atómicos.
    2. Luego la actualización de mi Servicio de Referencia en mi proyecto de cliente. Me di cuenta de que el problema había sido resuelto cuando en mi proyecto de cliente, yo era capaz de tipo «[MyServiceReferenceName].» y mi Tipos no aparecen en el [MyServiceReferenceName] espacio de nombres. He comprobado esto mediante la apertura de la genera archivos XSD en el Esquema XML del Navegador sólo para estar seguro.
    3. Uno por uno, elimine un método que fue comentado en el Paso 1. Luego actualización de su Servicio de Referencia cada vez para ver si los tipos están o no siendo resued.
    4. Una vez que encontrar el método que está causando el Servicio de Referencia a la no reutilización de los Tipos de, ir a cada clase para el que los Tipos que son de entrada o de salida para el método. Compruebe que todos clases que desea serializar están decoradas con el [DataContract] atributo. Asegúrese de que todos los campos y propiedades están decoradas con el [DataMember] atributo. También, asegúrese de enumeraciones están decoradas con [DataContract] y que a cada valor de enumeración está decorado con [EnumMember].

    Espero que esto ayude a otros que están pasando por este proceso frustrante y este problema no se relaciona necesariamente con un archivo dll compartido. Mi problema no era realmente un problema con el uso de Agregar o Actualizar la Referencia de Servicio. El problema mentido con mi entidad (modelo) las clases no se están decoradas con el buen atributos para notificar a la DataContractSerializer para serializar los tipos. Parece que si cualquier parte de la serialización de falla, agregando el Servicio de Referencia de todos los Tipos.

    He aquí mi experiencia: fue el intercambio de tipos, seguro. Había 3 tipos – 2 clases y una enumeración donde una clase de referencias de instancias de la clase y uno de propiedad de la enumeración. Me comentó el código de servicio he añadido, a continuación, agrega un maniquí con el método de [OperationContract] a cada uno, recibió el servicio, comprobado que no era una copia, a continuación, elimina ese código, y sin comentar el código de los de antes. Por extraño que parezca, que se corrigió. No sé por qué, y para ser sincero me asusta un poco.
    Gracias – me encontré con una enumeración que se me había olvidado hacer una DataContract y hacer EnumMembers.
    Un buen consejo. Resulta DataContract o falta de ella era mi problema.

    OriginalEl autor iCode

  3. 2

    Es un poco de un tiro largo, pero una posibilidad es que una versión antigua del archivo dll compartido en la GAC.

    Se trata de utilizar el archivo dll compartido, encuentra un archivo dll con tipos que faltan y, a continuación, vuelve a la creación de tipos.

    Yo no estoy usando el GAC en todo, en lugar de haber una solución con todos mis proyectos, y estoy usando referencias del proyecto.

    OriginalEl autor Shiraz Bhaiji

  4. 2

    OBJECTCEPTION!

    Recientemente hemos tenido el mismo problema en mi trabajo. Nos tomó cuatro horas para cazar el problema, pero al final hemos descubierto que una enumeración en un objeto dentro de la misma dll como objeto fue negarse a copiar tenía el mismo nombre que otra enumeración que estaba siendo utilizado en el servicio, por lo que se negó a la reutilización de cualquier tipo a partir de esa dll.

    Sugerencia de solución (?):
    Asegúrese de que no hay objetos en la dll, o los objetos en los objetos, o… etc.
    que tiene el mismo nombre que uno en su servicio.

    OriginalEl autor Luca

  5. 0

    Este es un viejo tema, pero desde que me encontré con el mismo problema hoy quiero compartir mi revisión.

    Para mí, el problema era que el ensamblado compartido fue añadido correctamente en ambos proyectos (el servicio y el cliente), pero en el lado del servicio, este ensamblado compartido hace referencia a otra asamblea que no estaba presente en el lado del cliente.

    Me di cuenta de el error de usar Svcutil.exe con la siguiente declaración. Abra la línea de comandos en la carpeta donde SvcUtil.exe se encuentra (para mí esto es C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Herramientas) y ejecutar la siguiente instrucción después de cambiar a continuación segmentos (marcados con <>):

    SvcUtil.exe /t:code /language:cs  /r:<path of the .dll that contains the types to reuse on client side> <wcf service url>

    asegúrese de que el .dll de los tipos desea reutilizar existen físicamente en la carpeta /bin (tal vez no existe debido a la acumulación de errores,…). Si necesita una copia correcta del servicio.

    SvcUtil intentará generar el servicio y/o los datos de los contratos basados en el documento WSDL del servicio especificado. La /r etiqueta especifica la procedencia de la .archivo dll se encuentra en el lado del cliente que contiene los tipos reutilizables (como se especifica cuando se utiliza «Agregar referencia de servicio»).

    si hay un problema con la reutilización de los tipos que se muestran en la línea de comandos cuando se ejecuta la instrucción.

    Esto puede apuntar en la dirección correcta donde está el problema en su ensamblado compartido.

    OriginalEl autor StefanE

  6. 0

    Después de comprobar todas las respuestas aquí, nada funcionó. Entonces me di cuenta de que mi servicio ha tenido un error al visualizar el wsdl en el navegador. Esto debería ser obvio, a la derecha? Bueno, a ver lo que sucedió es que se me abrió el servicio de archivo de la solución como diferentes(ninguno de administración de usuario) y se actualiza el nombre de uno de los tipos reutilizables. Construido mi solución y todo lo construido con éxito. Que es cuando me encontré con el problema descrito en el OP.

    Lo que sucedió fue que, debido a que se registra con una cuenta de administrador y yo no estaba usando IIS express. Mi WCF proyecto no carga. Lo que significa que el cambio de nombre de la tipo no se llevará a efecto en la WCF proyecto. Por lo tanto causando el problema.

    TLDR; asegúrese de que su servicio se inicia y funciona correctamente, antes de buscar problema en la aplicación mucho.

    OriginalEl autor Storm Muller

Dejar respuesta

Please enter your comment!
Please enter your name here