2011-12-07 14 views
7

Entiendo que hay otras preguntas similares, pero no he podido encontrar una respuesta que funcione.Agregar referencia de servicio no genera proxy

Creo el servicio WCF predeterminado a partir de la plantilla [que viene con GetData() y GetDataUsingDataContract()].
Funciona bien en el navegador.

Tengo un sitio web independiente a la que agrego este nuevo servicio WCF:

yo 'Agregar referencia de servicio', entro en mi URL, el servicio se acerca y me haga clic en 'Aceptar' para añadirlo.
En 'App_WebReferences', veo el espacio de nombres de mi servicio agregado: 'ServiceReference1', con 'References.svcmap' debajo de él, y un par de archivos .svcinfo/.wsdl/.xsd debajo de eso.

No se crean archivos proxy, pero el elemento <system.serviceModel> se agrega a mi web.config, con lo que parece ser información adecuada.

Sin embargo, sin proxy, no puedo acceder/llamar a cualquier método en mi servicio (es decir ServiceReference1.WCFMethod1())

puedo llamar svcutil, generar el proxy, añadirlo a mi App_Code, y todo funciona como debería.
Mi pregunta es, ¿por qué no se crea mi proxy con 'Agregar referencia de servicio'?
Todo está bajo el marco de destino: .NET Framework 4.

EDIT:

acaba de crear una aplicación de consola y se añade la referencia de servicio y creó el proxy. Entonces, el problema es que mi sitio web no está creando el proxy ...

+0

¿Agregó una declaración using (Imports for VB.NET) al código subyacente de la página que intenta llamar al servicio? Es decir, 'usando .ServiceReference1;' o algo similar? – Tim

+0

Si está utilizando un "proyecto" de sitio web (Archivo-> Nuevo sitio web), entonces no crea proxies y no se compila hasta el tiempo de ejecución. –

+1

John, sí, estoy usando eso. Entonces, ¿no hay otra manera que usar svcutil? – eych

Respuesta

2

Al agregar una referencia de servicio: Referencias -> Agregar nueva referencia de servicio. Haga clic en el botón avanzado y desmarque "Tipos de reutilización en todos los ensamblados a los que se hace referencia". Esta opción a veces causa errores.

3

Tuve este mismo problema y encontré que desmarcar Reutilizar tipos en todos los ensamblados a los que se hace referencia resolvió el problema. Sin embargo, en mi caso, lo necesitaba para reutilizar tipos de algunas de las bibliotecas a las que me refería. Encontré this post, cubriendo un problema muy similar. En ese puesto, se hace referencia a un Microsoft knowledge-base article que describe una solución para el problema siguiente:

cuenta la situación siguiente:

  • crea un proyecto de API Web ASP.NET MVC4 en Visual Studio 2012.
  • Agregue una referencia de servicio WCF en el proyecto.

En este escenario, el archivo Reference.cs para la referencia del servicio está vacío.

Causa

Este problema se produce porque la clase DataContractSerializer se ha encontrado con un tipo (Newtonsoft.Json.Linq.JToken) que no soporta. En este caso, arroja una excepción y luego deja de generar la referencia del servicio.

No estaba haciendo referencia a esa biblioteca JSON, pero, de acuerdo con la descripción del error, supuse que una de las bibliotecas a las que hacía referencia debe haber tenido un problema similar. Pensé que una de las bibliotecas a las que me refería probablemente contenía un tipo que no era compatible con el DataContractSerializer, arrojaba el mismo tipo de excepción y, por lo tanto, estaba fallando de la misma manera.

Efectivamente, descubrí que, en mi caso, el culpable era una de mis propias bibliotecas que, por casualidad, incluía un proxy público para el mismo servicio de WCF. Sospecho que fue el proxy público el causante del problema. En cualquier caso, al seleccionar Reutilizar tipos en conjuntos de referencia especificados, y luego seleccionar todos los conjuntos , excepto, la referencia de servicio generó automáticamente las clases de proxy correctamente.

2

Aquí está el problema principal. El origen del problema es cuando no puede encontrar Agregar referencia web en su estudio visual. Si el servicio es asmx, en mi caso no generaba clase proxy hasta que encontré estos pasos -> haga clic en Referencia de Sercice -> haga clic en Avanzado -> allí verá Agregar referencia web ... Proporcione su URL de servicio, haga clic en Aceptar problema resuelto. Espero que esto ayude.

Cuestiones relacionadas