2012-06-24 33 views
6

Tengo una aplicación de Windows .Net 4.0 que se ejecuta en Windows 7 y Windows XP. Uno de los módulos en la aplicación se conecta a una url en Internet [decir http://abc.com/xyz/MyWebService] utilizando su servicio web. Esta funcionalidad ha estado funcionando hasta la semana pasada cuando comencé a recibir este mensaje de error cuando se invoca un método en el servicio webSe requiere autenticación proxy al utilizar un servicio web

no había ningún punto final a escuchar http://abc.com/xyz/MyWebService que podría aceptar el mensaje. Esto a menudo es causado por una dirección incorrecta o una acción SOAP. Ver InnerException, si está presente, por más details.and la InnerException fue: Error HTTP 407 autenticación de proxy requiere

me re-encontré con este código [7] en Windows varias veces y me di cuenta que este comportamiento es aleatorio ... es decir, a veces puedo invocar el método de servicio web en el servidor sin ningún error.

No estoy seguro de lo que está sucediendo detrás de escena y qué podría explicar este comportamiento aleatorio. Además, este error no aparece en una máquina que tiene Windows XP que se encuentra en una ubicación geográfica diferente en la intranet de la compañía.

¿Alguna idea?

Nota: Cuando añadí nodo siguiente en mi app.config, el error parece haber ido:

<system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="true"> 
    </defaultProxy> 
</system.net> 
+0

¿Ha comprobado el firewall Win7 para asegurarse de que la aplicación no se ha bloqueado? O verifique cualquier software AV que pueda estar bloqueándolo. Lo que básicamente está haciendo con '' defaultProxy> 'es decirle a la aplicación que pase las credenciales del usuario a algún tipo de proxy web (que generalmente se configura a través de las" Opciones de Internet "en el panel de control. – CodingGorilla

Respuesta

0

A partir de la información proporcionada, suena como si la máquina de Windows XP en el que el código funciona caídas en una de las siguientes categorías:

  • no utiliza un proxy
  • proxy para esta ubicación no requiere autenticación (utiliza una cuenta predeterminada)

Esto es común para las empresas más pequeñas que no invertirían en múltiples proxies y no desean la latencia adicional de enrutar todo el tráfico a través de su campus principal.

Parece que la ubicación de Windows 7 usa un proxy que no requiere autenticación. Como señala Coding Gorilla, su configuración de proxy ya está configurada en "Opciones de Internet" en el panel de control.

Para verificar esto, puede consultar las "Opciones de Internet" en la máquina XP para ver si tiene un proxy configurado o no.

3

Creo que esto no tiene nada que ver con su servicio WCF.

Su debido al cambio de configuración del servidor de seguridad si está sentado detrás de un servidor ISA o algo

Mira el siguiente enlace de aclaración furthur

wcf-http-407-proxy-authentication-required

5

que se enfrentaron a casi 2 semanas de dolor para este problema, uno de nuestros clientes conecta nuestros servicios web.

Debe sobrescribir el sistema.configuración de red con un módulo de proxy personalizado que implementa IWebProxy

Paso 1: Crear una Asamblea (DLL) Paso 2: Añadir la siguiente clase a que

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Configuration; 

namespace MyProjectNameSpace.Utils.WebProxy 
{ 
    public class CustomWebProxy : IWebProxy 
    { 
     public ICredentials Credentials 
     { 
      get 
      { 
       string _proxyUserName = ConfigurationManager.AppSettings["ProxyUserName" ] as string ?? ""; 
       string _proxyPassword = ConfigurationManager.AppSettings["ProxyPassword" ] as string ?? ""; 
       string _useProxyDomain = ConfigurationManager.AppSettings["UseProxyDomain"] as string ?? ""; 
       string _proxyDomain = ConfigurationManager.AppSettings["ProxyDomain" ] as string ?? ""; 

       return String.IsNullOrEmpty(_proxyDomain) 
        ? new NetworkCredential(_proxyUserName, _proxyPassword) 
        : new NetworkCredential(_proxyUserName, _proxyPassword, _proxyDomain); 
      } 
      set { } 
     } 

     public Uri GetProxy(Uri destination) 
     { 
      string _proxyServer = ConfigurationManager.AppSettings["ProxyServer"] as string ?? ""; 
      Uri result = new Uri(_proxyServer); 
      return result; 
     } 

     public bool IsBypassed(Uri host) 
     { 
      return false; 
     } 
    } 
} 

Paso 3: Compilar para salir del modo Paso 4 : Remita la DLL a su WCF Client Project Paso 5: Abra el archivo Web.Config o App.Config para WCF Client Project y agregue las siguientes configuraciones.

<appSettings> 
     <add key="ProxyServer" value="http://192.168.1.254:9099"/> 
     <add key="ProxyUserName" value="dipak.r"/> 
     <add key="ProxyPassword" value="password"/> 
     <add key="UseProxyDomain" value="true"/> 
     <add key="ProxyDomain" value="DOMAINNAME"/> 
</appSettings> 

Agregue la siguiente sección o cámbiela.

<system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="false"> 
     <module type="MyProjectNameSpace.Utils.WebProxy.CustomWebProxy, MyProjectNameSpace.Utils.WebProxy"/> 
    </defaultProxy> 
</system.net> 
+0

Puede crear una configuración pantalla para activar o desactivar la función, es decir, acceder a la web mediante proxy o no, modificando la clase IWebProxy y convirtiendo algunas AppSettings en verdaderas falsas. – DipakRiswadkar

+0

Gracias, buena solución. –

Cuestiones relacionadas