2010-05-04 16 views
2

J'ai créé un assemblage ComVisible à utiliser dans une application classic-asp. L'assembly doit agir comme un client wcf et se connecter à un hôte de service wcf (à l'intérieur d'un service Windows) sur la même machine en utilisant des canaux nommés. L'hôte de service wcf fonctionne correctement avec les autres clients, le problème doit donc se situer dans cet assembly. Pour faire avancer les choses, j'ai ajouté une référence de service à l'assemblage ComVisible et aux classes proxy, et les paramètres app.config correspondants ont été générés pour moi. Tout va bien jusqu'à présent, sauf que la configuration de l'application ne serait pas reconnue lors de l'exécution d'un objet CreateObject avec mon assembly dans le code ASP.WCF: La configuration manuelle de la liaison et de l'extrémité provoque un état fautif SerciveChannel

Je suis allé et a essayé de hardcode (uniquement pour tester) la liaison et le point final et de transmettre ces deux au constructeur de ma procuration dérivée de ClientBase en utilisant ce code:

private NetNamedPipeBinding clientBinding = null; 
private EndpointAddress clientAddress = null; 

clientBinding = new NetNamedPipeBinding(); 
clientBinding.OpenTimeout = new TimeSpan(0, 1, 0); 
clientBinding.CloseTimeout = new TimeSpan(0, 0, 10); 
clientBinding.ReceiveTimeout = new TimeSpan(0, 2, 0); 
clientBinding.SendTimeout = new TimeSpan(0, 1, 0); 
clientBinding.TransactionFlow = false; 
clientBinding.TransferMode = TransferMode.Buffered; 
clientBinding.TransactionProtocol = TransactionProtocol.OleTransactions; 
clientBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; 
clientBinding.MaxBufferPoolSize = 524288; 
clientBinding.MaxBufferSize = 65536; 
clientBinding.MaxConnections = 10; 
clientBinding.MaxReceivedMessageSize = 65536; 

clientAddress = new EndpointAddress("net.pipe://MyService/"); 

MyServiceClient client = new MyServiceClient(clientBinding, clientAddress); 

client.Open(); 
// do something with the client 
client.Close(); 

Mais cela provoque l'erreur suivante:

L'objet de communication System.ServiceModel.Channels.ServiceChannel ne peut pas être utilisé pour la communication car il est dans l'état d'erreur.

L'environnement est .NET Framework 3.5/C#. Qu'est-ce que j'oublie ici? J'ai juste pensé, que lors de l'utilisation basicHttpBinding, tout fonctionne comme prévu. Le problème ne peut donc être que dans NetNamedPipeBinding.

Quelqu'un?

+0

Où l'erreur est-elle générée? Lorsque vous appelez Open()? Ou lorsque vous définissez des propriétés sur la liaison? – Matt

Répondre

0

Ce client se trouve-t-il sur la même machine que votre service?

netNamedPipeBinding ne fonctionne que sur la même machine. Si vous devez passer d'une machine à l'autre, utilisez plutôt le netTcpBinding. Sinon, votre code me semble bien - pas d'omissions évidentes ou flagrantes ou d'erreurs.

+0

oui, comme mentionné dans mon article, l'hôte wcf fonctionne sur la même machine. – Mats

+0

@ Matthias: désolé, manqué que .... –