tutorialspoint - wcf tutorial español
Esto podría deberse al enlace del punto final del servicio que no utiliza el protocolo HTTP (20)
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 ha cancelado un contexto de solicitud HTTP (posiblemente debido a que el servicio se ha apagado). Vea los registros del servidor para 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á mi configuración del 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?
Creo que hay un problema de serialización, puedes encontrar el error exacto solo necesitas agregar el código siguiente en la configuración del servicio en la sección <configuration>
.
Después de la actualización de la configuración que "App_tracelog.svclog"
archivo "App_tracelog.svclog"
, donde su servicio existe solo necesita abrir el archivo .svclog
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 tu 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>
Creo que la mejor manera de resolver esto es seguir el consejo de error, buscando los 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 microsoft service trace viewer. Y vea cuál es realmente el problema.
En mi caso, el error se generó porque uno de mis tipos complejos tenía una propiedad sin un método de configuración.
El serializador lanzó y excepción debido a ese hecho. Se agregaron métodos de configuración interna y todo funcionó bien.
La mejor forma de descubrir por qué sucede esto (en mi opinión) es habilitar el registro de rastreo.
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, recibí una excepción y revisé el archivo ''Traces.svclog''. A partir de ahí, solo necesitaba encontrar la excepción.
Este error puede deberse a una falta de coincidencia de 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 UI tiene la misma enumeración con falta (En espera = 3). Enum: Start = 1, Stop = 2. -> Contrato entre acceso a datos y capa de proceso tiene enumeración 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 aparece en otras discrepancias contractuales en aplicaciones de varias capas.
Esto podría deberse a muchas razones; a continuación son algunos de esos:
- Si está utilizando objetos de contrato de datos complejos (es decir, objetos personalizados con más objetos personalizados secundarios), asegúrese de tener todos los objetos personalizados decorados con los atributos DataContract y DataMember.
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í sobre esto ).
Asegúrese de que todas sus propiedades de objeto de contrato de datos tengan propiedades get y set.
Esto puede no ser relevante para su problema específico, pero el mensaje de error que mencionó tiene muchas causas, una de ellas es el uso de un tipo de devolución para [OperationContract] que sea abstracto, interfaz o no conocido por el código del cliente WCF.
Verifique la publicación (y la solución) a continuación
https://.com/a/5310951/74138
He tenido el mismo error y el problema fue la serialización. Me las arreglé para encontrar el problema real utilizando Service Trace Viewer http://msdn.microsoft.com/en-us/library/ms732023.aspx y lo resolvió fácil. Quizás esto ayudará a alguien.
He visto este error causado por una referencia circular en el gráfico de objetos. Si se incluye un puntero al objeto primario de un elemento secundario, el serializador dará un bucle y, en última instancia, superará el tamaño máximo de mensaje.
Luché con esto por un par de días e intenté 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 fue que el grupo de aplicaciones se configuró con un límite de memoria y se recicló después de un período de tiempo variable.
Espero que esto ayude a alguien más!
Saludos,
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 el error fue lanzado.
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"/>
Para mí las soluciones de este Error son muy extrañas. Era el problema de la dirección del puerto de EndpointAddress . En Visual Studio, la dirección del puerto de su archivo (p. Ej., Service1.svc) y la dirección del puerto de su proyecto wcf deben ser las mismas que las que proporciona a EndpointAddress . Déjame describirte esta solución en detalle.
Hay dos pasos para verificar las direcciones del puerto.
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 url como http://localhost:61122/Service1.svc por lo que anote la dirección de su puerto como a 61122
Haga clic 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 Visual Studio -> seleccione Puerto específico y proporcione la dirección de puerto que hemos encontrado anteriormente de nuestro Servicio1. servicio de svc Eso es (61122) .
Antes tengo una dirección de puerto diferente. Después de especificar correctamente la dirección del puerto que he dado en EndpointAddress , mi problema fue resuelto.
Espero que esto solucione tu problema.
Para obtener más información sobre este problema, también vea: el host remoto cerró por la fuerza una conexión existente - WCF
Mi problema terminó siendo que mis objetos de transferencia de datos eran demasiado complejos. Comience con propiedades sencillas, como public long Id { get; set; }
public long Id { get; set; }
public long Id { get; set; }
y una vez que obtienes ese funcionamiento, comienza a agregar cosas adicionales según sea necesario.
Para solucionar esto, tuvimos que cambiar la identidad de la aplicación a una cuenta de administrador .
Resolví el problema. Terminó siendo un camino a mi archivo de configuración estaba mal. Los errores para WCF son tan útiles a veces.
Solución con DataContract, Flags for Enums parece 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
}
También tuve este problema y fue por olvidarme de decorar mi modelo con los atributos DataContract y DataMember
Tuve este problema "Esto podría deberse a que el enlace del punto final del servicio no utiliza el protocolo HTTP" y el servicio WCF se cerraría (en una máquina de desarrollo)
Me di cuenta: en mi caso, el problema era debido a Enums,
Lo solucioné usando esto
[DataContract]
[Flags]
public enum Fruits
{
[EnumMember]
APPLE = 1,
[EnumMember]
BALL = 2,
[EnumMember]
ORANGE = 3
}
Tuve que decorar mis entradas con DataContract, Flags y todos los miembros enum con atributos EnumMember.
Lo resolví después de mirar este msdn Referencia :
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 Operacional del Servicio de DataTable a DataSet y devolver los datos en consecuencia.
Si tiene este problema, puede agregar un Contrato Operativo adicional a su Servicio para que no tenga que preocuparse por descifrar el código que depende de los Servicios existentes.
en mi caso
mi servicio tiene la función de download Files
y este error solo aparece al intentar descargar Big Files
así que encontré esta respuesta para aumentar maxRequestLength
al valor necesario en web.config
Sé que es extraño, pero problema resuelto
si no realiza ninguna operación de carga o descarga, tal vez esta respuesta no lo ayude