2010-11-19 3 views
2

J'ai écrit une classe chargée d'appeler un service WCF tiers et cela fonctionne correctement. Notre application peut être configurée avec les paramètres de proxy du réseau local, il ne reste donc plus qu'à utiliser ces paramètres (s'ils ont été définis) lors de l'appel.Comment faire pour que mon appel de service WCF passe par un serveur proxy local configuré?

J'ai regardé autour de moi et je ne vois rien qui indique clairement comment procéder. J'ai trouvé que l'objet BasicHttpBinding que j'utilise possède une propriété ProxyAddress, mais il n'y a rien là qui me permette de définir des informations d'identification réseau ou un nom d'utilisateur et un mot de passe.

C'est probablement juste ici en face de moi, donc je pense que j'ai juste besoin de pointer dans la bonne direction. Au moins, j'espère que c'est aussi simple que ça! Tout ce que je dois faire est de dire à mon appel de service quel est le serveur proxy local et quelles informations d'identification utiliser.

C'est le code que j'ai qui instancie la classe de service. J'ai omis la partie suivante qui construit la classe de demande, appelle la méthode de service et traite le résultat.

// Create the service instance. 
var binding = new BasicHttpBinding(); 
var endPoint = new EndpointAddress(new Uri(_servicesBaseUri + "MyServiceName")); 
var service = new WSHsgCreateSchemeRepairClient(binding, endPoint); 

// Add the MessageInspector to the contract behaviours list. This will inject the SecurityHeader XML and the SOAP action. 
var soapAction = _servicesBaseUri + "MyServiceName/MyServiceMethod"; 
service.Endpoint.Contract.Behaviors.Add(new MessageInspector(_securityHeaderUsername, _securityHeaderPassword, soapAction)); 

Nous avons d'autres appels de service Web (qui utilisent l'ancienne approche de service Web) et génèrent une nouvelle instance de System.Net.WebProxy et mis contre la classe de service propriété Proxy, mais il est évidemment différent WCF.

Merci.

Répondre

2

Je pense que je me suis débrouillé. Le proxy système par défaut peut être défini et utilisé. This is a very useful article si quelqu'un d'autre est confronté à la même exigence.

L'idée est que vous devez d'abord mis System.Net.HttpWebRequest.DefaultWebProxy.Credentials (probablement System.Net.CredentialCache.DefaultCredentials) - c'est là paramètres « proxy par défaut » sont prises à partir lorsque vous définissez UseDefaultWebProxy de la liaison à true.

0

Vous pouvez le faire via le paramètre web.config spécifique à votre service. Dans la configuration de liaison, définissez proxyAddress = "http: // myproxy: 8080" et réglez useDefaultWebProxy = "false"

<bindings> 
    <basicHttpBinding> 
    <binding name="SubscriberFulfilmentServiceSOAP12Binding" closeTimeout="00:01:00" 
    openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00" 
    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
    maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" 
    textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="false" 
    proxyAddress="http://myproxy:8080" 
    messageEncoding="Text"> 
     <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
     maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

Pour définir le proxy pour tous les services:

<system.net> 
    <defaultProxy> 
    <proxy usesystemdefault="True" proxyaddress="http://myproxy:8080" bypassonlocal="True" /> 
    </defaultProxy> 
</system.net> 
Questions connexes