2009-12-16 3 views
1

Le problème que je vais avoir la connexion d'une application cliente WCF à un hôte en cours d'exécution sur une machine distincte est documentée dans une question précédemment posée:WCF: Pourquoi le passage dans un point de terminaison distant échoue?

WCF: Why does passing in a remote endpoint fail?

Cependant, la solution proposée est dit ici que vous devez utiliser un SpnEndpointIdentity avec une chaîne vide. Puisque mon code ne ressemble en rien à l'exemple que j'ai référencé, j'ai besoin de savoir quoi faire avec l'objet SpnEndpointIdentity que j'ai créé.

J'ai un ChannelFactory sur lequel j'appelle Créer canal, en passant dans un EndpointAddress:

public override void InitialiseChannel() 
    { 
     SpnEndpointIdentity spnEndpointIdentity = new SpnEndpointIdentity(""); 
     var address = new EndpointAddress(EndpointName); 

     Proxy = ChannelFactory.CreateChannel(address); 
    } 

(NB: ChannelFactory est de type IChannelFactory, où T est l'interface de contrat de service) Alors, que dois-je faire avec spnEndpointIdentity? Je ne peux pas le transmettre à CreateChannel.

Ou peut-être que je peux l'utiliser en quelque sorte quand je crée l'usine de canal:

private ChannelFactory<T> CreateChannelFactory() 
    { 
     var binding = new NetTcpBinding 
     { 
      ReaderQuotas = { MaxArrayLength = 2147483647 }, 
      MaxReceivedMessageSize = 2147483647 
     }; 

     SpnEndpointIdentity spnEndpointIdentity = new SpnEndpointIdentity(""); 
     var channelFactory = new ChannelFactory<T>(binding); 

     return channelFactory; 
    } 

Encore une fois, je ne peux pas passer dans le constructeur, alors qu'est-ce que je fais?

Merci.

Répondre

2

Vous l'avez déjà eu.

Qu'est-ce que vous êtes absent est que vous associez le EndpointIdentity avec le EndpointAddress, puis fournir cette information CreateChannel():

SpnEndpointIdentity spnEndpointIdentity = new SpnEndpointIdentity(""); 
var address = new EndpointAddress(EndpointName, spnEndpointIdentity); 
+0

Salut, merci pour votre réponse. Cependant, c'est le code que j'ai essayé, mais vous ne pouvez pas passer SpnEndpointIdentity au constructeur EndpointAddress – Zephilim

+0

Assurez-vous que EndpointName est un Uri et non une chaîne. Ça devrait marcher. – tomasr

+0

Hoorah, merci pour cela, ça marche finalement quand je passe le EndpointName dans un Uri en premier. Maintenant, je dois juste comprendre ce que signifie réellement une identité "nulle" de SpnEndpoint. – Zephilim

Questions connexes