Tengo un servicio WCF funcionando bien en mi máquina local. Lo puse en los servidores y recibo el siguiente error:
Se produjo un error al recibir la respuesta HTTP a http: //xx.xx.x.xx: 8200 / Services / WCFClient.svc . Esto podría deberse a que el enlace del punto final del servicio no utiliza el protocolo HTTP. Esto también podría deberse a que el servidor anula un contexto de solicitud HTTP (posiblemente debido al cierre del servicio). Consulte los registros del servidor para obtener más detalles.]
He ido al servicio en la url y está funcionando correctamente. Todo lo que estoy haciendo para la función es devolver una cadena a un nombre de imagen, por lo que los datos que se pasan no son muchos. He rastreado el registro y me da la misma información. Aquí está mi configuración de cliente:
<binding name="basicHttpBinding_IWCFClient" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
<endpoint name="basicHttpBinding_IWCFClient"
address="http://localhost:4295/Services/WCFClient.svc"
binding="basicHttpBinding"
bindingConfiguration="basicHttpBinding_IWCFClient"
behaviorConfiguration="WCFGraphicManagementTool.Services.ClientBehavior"
contract="WCFClient.IWCFClient" />
Aquí está la configuración de mi servidor:
<service behaviorConfiguration="WCFGraphicManagementTool.Services.WCFClientBehavior"
name="WCFGraphicManagementTool.Services.WCFClient">
<endpoint name="basicHttpBinding_IWCFClient"
address=""
binding="basicHttpBinding"
contract="WCFGraphicManagementTool.Contracts.IWCFClient" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
<behavior name="WCFGraphicManagementTool.Services.WCFClientBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceThrottling maxConcurrentCalls="120" maxConcurrentSessions="120"
maxConcurrentInstances="120" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
¿Sería una configuración en el servidor, ya que funciona en mi máquina local?
fuente
Respuestas:
Creo que hay un problema de serialización, puede encontrar el error exacto, solo necesita agregar el siguiente código en la configuración del servicio en la
<configuration>
sección.Después de
"App_tracelog.svclog"
que se cree el archivo de actualización de configuración , donde exista su servicio, solo necesita abrir el.svclog
archivo y encontrar la línea de color rojo en el panel lateral izquierdo, que es un error y ver su descripción para obtener más información.Espero que esto ayude a encontrar su error.
<system.diagnostics> <sources> <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing"> <listeners> <add name="ServiceModelTraceListener" /> </listeners> </source> <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"> <listeners> <add name="ServiceModelTraceListener" /> </listeners> </source> <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing"> <listeners> <add name="ServiceModelTraceListener" /> </listeners> </source> </sources> <sharedListeners> <add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" /> </sharedListeners> </system.diagnostics>
fuente
System.Runtime.Serialization
fuente en mi seguimiento.<system.diagnostics>
sección al final del archivo, justo arriba</configuration>
. Si lo pega en la parte superior, podría obtener un error de tipo de contenido al ejecutar su aplicación.Tuve este problema "Esto podría deberse a que el enlace del punto final del servicio no usa el protocolo HTTP" y el servicio WCF se apaga (en una máquina de desarrollo)
Me di cuenta: en mi caso, el problema se debió a Enums,
Lo resolví usando esto
[DataContract] [Flags] public enum Fruits { [EnumMember] APPLE = 1, [EnumMember] BALL = 2, [EnumMember] ORANGE = 3 }
Tuve que decorar mis Enums con DataContract, Flags y todos los miembros de enum con atributos EnumMember.
Resolví esto después de mirar esta referencia de msdn :
fuente
Tuve este mismo error y el problema fue la serialización. Logré encontrar el problema real usando Service Trace Viewer http://msdn.microsoft.com/en-us/library/ms732023.aspx y lo resolví fácilmente. Quizás esto ayude a alguien.
fuente
En mi caso, el error se generó porque uno de mis tipos complejos tenía una propiedad sin un método establecido.
El serializador lanzó una excepción debido a ese hecho. Se agregaron métodos de configuración internos y todo funcionó bien.
La mejor manera de averiguar por qué sucede esto (en mi opinión) es habilitar el registro de seguimiento.
Lo logré agregando la siguiente sección a mi
web.config
:<system.diagnostics> <sources> <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "c:\log\Traces.svclog" /> <add type="System.Diagnostics.DefaultTraceListener" name="Default" /> </listeners> </source> <source propagateActivity="true" name="System.ServiceModel" switchValue="Verbose,ActivityTracing"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "c:\log\Traces.svclog" /> <add type="System.Diagnostics.DefaultTraceListener" name="Default" /> </listeners> </source> </sources> <trace autoflush="true" /> </system.diagnostics>
Una vez configurado, ejecuté mi cliente, obtuve una excepción y verifiqué el archivo 'Traces.svclog'. A partir de ahí, solo necesitaba encontrar la excepción.
fuente
Solución con DataContract, Flags for Enums se ve un poco feo. En mi caso, el problema se resolvió agregando algo como "NotSet = 0" en la enumeración:
public enum Fruits { UNKNOWN = 0, APPLE = 1, BALL = 2, ORANGE = 3 }
fuente
Estaba enfrentando el mismo problema y lo resolví con el siguiente código. (si hay algún problema de conectividad TLS)
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
Pegue esta línea antes de abrir el canal del cliente.
fuente
Resolví el problema. Terminó siendo una ruta a mi archivo de configuración que estaba mal. Los errores de WCF son muy útiles a veces.
fuente
Para solucionar esto, tuvimos que cambiar la identidad de AppPool a una cuenta de administrador .
fuente
He visto este error causado por una referencia circular en el gráfico de objetos. Si se incluye un puntero al objeto principal desde un hijo, el serializador se repetirá y, en última instancia, superará el tamaño máximo del mensaje.
fuente
Este error puede deberse a una discrepancia en el contrato. Considere la aplicación de tres capas a continuación ...
Capa de interfaz de usuario
|
Capa de proceso
|
Capa de acceso a datos
-> Contrato entre el proceso y la capa de interfaz de usuario tiene la misma enumeración que falta (En espera = 3) Enum: Start = 1, Stop = 2. -> Contract Between Data Access and Process layer tiene enum Enum: Start = 1, Stop = 2, Onhold = 3.
En este caso, obtendremos el mismo error en la respuesta de la capa de proceso.
El mismo error se produce en otro desajuste de contrato en una aplicación de varias capas.
fuente
Tuve este problema porque configuré mi servicio WCF para devolver un System.Data.DataTable.
Funcionó bien en mi página HTML de prueba, pero explotó cuando puse esto en mi aplicación Windows Form.
Tuve que entrar y cambiar la firma del contrato operativo del servicio de DataTable a DataSet y devolver los datos en consecuencia.
Si tiene este problema, es posible que desee agregar un Contrato operativo adicional a su Servicio para no tener que preocuparse por romper el código que depende de los Servicios existentes.
fuente
Esto podría deberse a muchas razones; a continuación se muestran algunos de ellos:
Si sus objetos de contrato de datos usan herencia, asegúrese de que todas las clases base tengan los atributos DataContract y DataMember. Además, necesita que las clases base especifiquen las clases derivadas con el atributo [KnownType (typeof (BaseClassType))] ( consulte más información aquí ).
Asegúrese de que todas las propiedades del objeto de su contrato de datos tengan propiedades get y set.
fuente
Mi problema era que se pasaban demasiados elementos entre el cliente y el servidor. Tuve que cambiar esta configuración en el comportamiento en ambos lados.
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
fuente
Es posible que esto no sea relevante para su problema específico, pero el mensaje de error que mencionó tiene muchas causas, una de ellas es usar un tipo de retorno para un [OperationContract] que es abstracto, interfaz o no conocido por el código de cliente WCF.
Verifique la publicación (y la solución) a continuación
https://stackoverflow.com/a/5310951/74138
fuente
Creo que la mejor manera de resolver esto es seguir los consejos de error y, por lo tanto, buscar registros del servidor. Para habilitar los registros que agregué
<system.diagnostics> <sources> <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\logs\TracesServ_ce.svclog" /> </listeners> </source> </sources> </system.diagnostics>
Luego vaya a c: \ logs \ TracesServ_ce.svclog ábralo con el visor de seguimiento del servicio de microsoft. Y vea cuál es realmente el problema.
fuente
Para obtener más información sobre este problema, consulte también: El host remoto cerró a la fuerza una conexión existente - WCF
Mi problema terminó siendo que mis objetos de transferencia de datos eran demasiado complejos. Comience con propiedades simples como
public long Id { get; set; }
y una vez que lo haga funcionar, comience a agregar cosas adicionales según sea necesario.fuente
Luché con esto durante un par de días y probé todas las respuestas de esta publicación y muchas otras y compartí mi solución porque los síntomas eran los mismos pero el problema era diferente.
El problema era que el grupo de aplicaciones estaba configurado con un límite de memoria y simplemente se reciclaba después de un período de tiempo variable.
¡Espero que esto ayude a alguien más!
Saludos,
fuente
Mi problema era que ese tipo de devolución de mi servicio era una cadena. Pero devolví una cadena de tipo xml:
<reponse><state>1</state><message>Operation was successfull</message</response>
por lo que se lanzó un error.
fuente
en mi caso
mi servicio tiene la función de
download Files
y este error solo se muestra al intentar descargar
Big Files
así que encontré esta respuesta a Aumentar el
maxRequestLength
valor necesario enweb.config
Sé que es raro, pero problema resuelto
si no realiza ninguna operación de carga o descarga, tal vez esta respuesta no lo ayude
fuente
Para mí las soluciones de este Error son muy extrañas. Fue el problema de la dirección del puerto de EndpointAddress . En Visual Studio, la dirección del puerto de su archivo (por ejemplo, Service1.svc) y la dirección del puerto de su proyecto de wcf deben ser las mismas que proporciona en EndpointAddress . Déjeme describirle esta solución en detalle.
Hay dos pasos para verificar las direcciones de los puertos.
En su proyecto WCF, haga clic derecho en su archivo de servicio (por ejemplo, Service1.svc) -> luego seleccione Ver en el navegador ahora en su navegador tiene una URL como http: // localhost: 61122 / Service1.svc, así que ahora anote su dirección de puerto como a 61122
Haga clic con el botón derecho en su proyecto wcf -> luego seleccione Propiedades -> vaya a la pestaña Web -> Ahora en la sección Servidores -> seleccione Usar servidor de desarrollo de Visual Studio -> seleccione Puerto específico y proporcione la dirección del puerto que encontramos anteriormente en nuestro Servicio1. servicio de svc. Eso es (61122) .
Anteriormente tengo una dirección de puerto diferente. Después de especificar correctamente la dirección del puerto que he dado en EndpointAddress , mi problema se resolvió.
Espero que esto pueda resolver su problema.
fuente
También tuve este problema y se debió a que olvidé decorar mi modelo con los atributos DataContract y DataMember
fuente
Si tiene una base de datos (trabajando en Visual Studio), asegúrese de que no haya claves externas en las tablas, yo tenía claves externas y me dio este error y cuando las eliminé funcionó sin problemas
fuente