visual studio net example consumir c# asp.net .net wcf web

studio - wcf web service c#



Agregar referencia de servicio da Excepción: no se puede conectar al servidor remoto (3)

¿Has probado esta respuesta? Parece que resuelve el tipo de problema que estás experimentando:

Referencia web frente a referencia de servicio

Mi servicio WCF devuelve el resultado cuando se llama desde el cliente de la aplicación de consola. Sin embargo, está mostrando

Excepción: no se puede conectar al servidor remoto

Error real:

Error al invocar el servicio. Causas posibles: el servicio está fuera de línea o inaccesible; la configuración del lado del cliente no coincide con el proxy; el proxy existente no es válido. Consulte el seguimiento de la pila para más detalles. Puede tratar de recuperar iniciando un nuevo proxy, restaurando a la configuración predeterminada o actualizando el servicio.

Error de detalles:

El servidor no pudo procesar la solicitud debido a un error interno. Para obtener más información sobre el error, active IncludeExceptionDetailInFaults (ya sea desde ServiceBehaviorAttribute o desde el comportamiento de configuración) en el servidor para enviar de nuevo la información de excepción al cliente o active el rastreo según la documentación de Microsoft .NET Framework SDK. inspeccionar los registros de seguimiento del servidor.

Rastreo de la pila del servidor: en System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood (Respuesta al mensaje, falla de MessageFault, String action, versión de MessageVersion, FaultConverter faultConverter) en System.ServiceModel.Channels.ServiceChannel.HandleReply (ProxyOperationRuntime operation, ProxyRpc & rpc) en System. ServiceModel.Channels.ServiceChannel.Call (String action, Boolean oneway, operación ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan timeout) en System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, ProxyOperationRuntime operation) en System. ServiceModel.Channels.ServiceChannelProxy.Invoke (mensaje de IMessage)

Excepción reiniciada en [0]: en System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) en System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, tipo Int32) en IJiraService.GetProjects ( ) en JiraServiceClient.GetProjects ()

Tenga en cuenta que, cuando Fiddler se está ejecutando, el servicio funciona bien. Sin embargo, si cierro Fiddler, muestra una excepción:

Este es el registro de Fiddler (mientras obtengo los datos):

Conexión TTP / 1.1 200 Fecha de creación: Jue, 06 de agosto de 2015 14:39:22 GMT Proxy-Connection: Keep-Alive Vía: 1.1 localhost.localdomain

El tráfico HTTPS encriptado fluye a través de este túnel CONNECT. El descifrado HTTPS está habilitado en Fiddler, por lo que las sesiones descifradas que se ejecutan en este túnel se mostrarán en la lista de Sesiones web.

Protocolo seguro: Tls Cipher: Aes128 128bits Hash Algorithm: Sha1 160bits Key Exchange: ECDHE_RSA (0xae06) 256bits

== Certificado del servidor ========== [Asunto] CN = *. Atlassian.net, O = "Atlassian Network Services, Inc.", L = San Francisco, S = California, C = US.

[Emisor] CN = DigiCert SHA2 High Assurance Server CA, OU = www.digicert.com, O = DigiCert Inc, C = US

[Número de serie] 08E828A2F8C521A2DC7121A28E191837

[No antes] 9/9/2014 5:30:00 AM

[No después] 15/11/2017 5:30:00 PM

[Huella digital] EA57BE3C6CDA33E6D875889944EE61284E39D91D

HTTP / 1.1 200 OK Servidor: nginx Fecha: Jue, 06 Ago 2015 14:39:26 GMT Content-Type: application / json; charset = UTF-8 Transfer-Codificación: chunked Conexión: keep-alive Variar: Aceptar-Codificar X -AREQUESTID: 39x4118x1 X-ASEN: SEN-2425233 Set-Cookie: JSESSIONID = 8B68E46928883CA9F99382A67C228541; Ruta = /; Seguro; HttpOnly Set-Cookie: studio.crowd.tokenkey = ""; Domain = .clientname.atlassian.net; Vence = jue, 01-ene-1970 00:00:10 GMT; Ruta = /; Seguro; HttpOnly X-Seraph-LoginReason: OUT Set-Cookie: studio.crowd.tokenkey = YcO0N1IItmmGYah6bzgN0w00; Domain = .clientname.atlassian.net; Ruta = /; Seguro; HttpOnly X-Seraph-LoginReason: OK Set-Cookie: atlassian.xsrf.token = ALMX-0SVV-VVCK-3Y73 | c420e5bfab5c997ccdfa21ffa129d60a69af0013 | lin; Ruta = /; Secure X-ASESSIONID: b2v6it X-AUSERNAME: admin X-ATENANT-ID: clientname.atlassian.net Cache-Control: no-cache, no-store, no-transform X-Content-Type-Options: nosniff Strict-Transport- Seguridad: max-age = 315360000; includeSubDomains

Según lo anterior, el registro de Fiddler es Algo que debo cambiar en el archivo web.config para que funcione?

cuando se llama desde el cliente de prueba WCF. Esto es lo que he intentado:

Web.config:

<?xml version="1.0"?> <configuration> <!--<system.net> <defaultProxy useDefaultCredentials="true" > </defaultProxy> </system.net>--> <appSettings> <add key="UserName" value="admin"/> <add key="Password" value="admin"/> <add key="resturl" value="https://Clientname.atlassian.net/rest/api/2/"/> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5"/> </system.web> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IJiraService"/> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost:19065/JiraService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IJiraService" contract="ServiceReference1.IJiraService" name="BasicHttpBinding_IJiraService" /> </client> <behaviors> <serviceBehaviors> <behavior> <!-- To avoid disclosing metadata information, set the values below to false before deployment --> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> <protocolMapping> <add binding="basicHttpsBinding" scheme="https" /> </protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <!-- To browse web app root directory during debugging, set the value below to true. Set to false before deployment to avoid disclosing web app folder information. --> <directoryBrowse enabled="true"/> </system.webServer> </configuration>

Así es como estoy solicitando en mi código:

public class Service : IService { private string GetRestURL() { return System.Configuration.ConfigurationManager.AppSettings["resturl"]; } private string GetUserName() { return System.Configuration.ConfigurationManager.AppSettings["MyUserName"]; } private string GetPassword() { return System.Configuration.ConfigurationManager.AppSettings["MyPassword"]; } public string method() { HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; // HttpClient request.ContentType = "application/json; charset=UTF-8"; //request.ContentType = "text/xml; charset=UTF-8"; /*request.Headers.Add("X-Atlassian-Token", "nocheck"); request.UseDefaultCredentials = true; request.KeepAlive = true;*/ request.Method = method; /*if (data != null) { using (StreamWriter writer = new StreamWriter(request.GetRequestStream(),Encoding.ASCII)) { writer.Write(data); } }*/ string base64Credentials = GetEncodedCredentials(); request.Headers.Add("Authorization", "Basic " + base64Credentials); try { request.Headers.Add("Authorization", "Basic " + base64Credentials); response = request.GetResponse() as HttpWebResponse; //here its NULL if (response.StatusCode != HttpStatusCode.OK) { throw new Exception(String.Format("Server error (HTTP {0}:{1}).",response.StatusCode,response.StatusDescription)); } } catch (Exception ex) //Here I''m getting exception { throw new Exception(ex.Message); } }

Aquí está mi firma de método:

[ServiceContract] public interface IService { [OperationContract] List<ProjectDescription> GetProjects(); }

Nota: el "método" se llama desde "GetProjects"

Esta es la excepción interna que obtengo al depurar al invocar al cliente de prueba WCF:

Esto es que estoy recibiendo una excepción interna

Error de conexión porque la parte conectada no respondió correctamente después de un período de tiempo o la conexión establecida falló porque el host conectado no respondió 165.254.xxx.xxx:443

NOTA: No hay excepción de depuración cuando estoy depurando desde la aplicación de la consola. como dije, la aplicación de la consola funciona bien y puedo devolver el resultado del servicio.

ACTUALIZACIÓN: cuando estoy agregando este servicio en la aplicación de la consola como "Agregar referencia", está funcionando bien. Sin embargo, cuando agrego como "Agregar referencia de servicio" en la misma aplicación de consola, me muestra el mismo error. ¿Mi web está bloqueando algo? Por favor ayuda.

¿Cómo corregir esto? ¿Hay algo más que deba agregar en web.config ? O ¿debo permitir que la URL sea una URL confiable en alguna parte?


Intenta ajustar tus enlaces para HTTPS y asegúrate de configurar también http.

<protocolMapping> <!--<add binding="basicHttpBinding" scheme="http"/>--> <add binding="basicHttpsBinding" scheme="https"/> <add binding="webHttpBinding" scheme="https" bindingConfiguration="WebBinding"/> </protocolMapping>


Problema resuelto agregando proxy en IIS. :)