2010-12-06 17 views
0

Ich versuche, das Echo-Beispiel zwischen zwei Computern in meinem lokalen Netzwerk auszuführen. Das Beispiel verwendet das NetTcpRelayBinding und es funktioniert einwandfrei, wenn ich den Dienst und den Client auf demselben Computer ausführen. Als ich zuerst die Dienste kompilierte und sie auf meine andere Maschine legte, wurde ein Windows 2003 Server ohne dev tools installiert. Es würde nicht ausgeführt, weil es nicht wusste, was NetTcpRelayBinding in der app.config war. Also habe ich die Konfiguration nur auf Code umgestellt und der Dienst gestartet. Das habe ich mit dem Service Bus Explorer bestätigt. Ich habe dann versucht, mit meinem Rechner (über VS2010) zu verbinden, aber es wird nicht funktionieren. Ich habe versucht, sowohl den Service als auch den Client zu ändern, indem ich alle möglichen Kombinationen von Einstellungen ausprobiere, aber nichts. Ich bekomme meistens einen von zwei Fehlern auf dem Client:Azure AppFabric Service Bus Echo-Beispiel funktioniert nicht

"ContractDescription 'IEchoContract' hat null Operationen; ein Vertrag muss mindestens eine Operation haben."

oder

„gab es keinen Endpunkt hören, der die Nachricht übernehmen könnte“.

Dies ist der Servercode, meine Änderung liegt zwischen den benutzerdefinierten Kommentaren.

// create the service URI based on the service namespace 
     Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService"); 

     // create the credentials object for the endpoint 
     TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior(); 
     sharedSecretServiceBusCredential.CredentialType = TransportClientCredentialType.SharedSecret; 
     sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = issuerName; 
     sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = issuerSecret; 

     // create the service host reading the configuration 
     ServiceHost host = new ServiceHost(typeof(EchoService), address); 

     // custom 
     host.AddServiceEndpoint(
        typeof(IEchoContract), 
        new NetTcpRelayBinding(), 
        "EchoService"); 
     // custom end 

     // create the ServiceRegistrySettings behavior for the endpoint 
     IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public); 

     // add the Service Bus credentials to all endpoints specified in configuration 
     foreach (ServiceEndpoint endpoint in host.Description.Endpoints) 
     { 
      endpoint.Behaviors.Add(serviceRegistrySettings); 
      endpoint.Behaviors.Add(sharedSecretServiceBusCredential); 
     } 

     // open the service 
     host.Open(); 

Dies ist der Client-Code, ist mein aktueller Wechsel zwischen den benutzerdefinierten Kommentaren:

// create the service URI based on the service namespace 
     Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService"); 

     // create the credentials object for the endpoint 
     TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior(); 
     sharedSecretServiceBusCredential.CredentialType = TransportClientCredentialType.SharedSecret; 
     sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = issuerName; 
     sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = issuerSecret; 

     // create the channel factory loading the configuration 
     //ChannelFactory<IEchoChannel> channelFactory = new ChannelFactory<IEchoChannel>("RelayEndpoint", new EndpointAddress(serviceUri)); 

     // custom 
     ServiceEndpoint endpoint = new ServiceEndpoint(new ContractDescription("IEchoContract", "Microsoft.ServiceBus.Samples"), new NetTcpRelayBinding(EndToEndSecurityMode.Transport, RelayClientAuthenticationType.None), new EndpointAddress(serviceUri)); 
     ChannelFactory<IEchoChannel> channelFactory = new ChannelFactory<IEchoChannel>(endpoint); 
     // custom end 


     // apply the Service Bus credentials 
     channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential); 

     // create and open the client channel 
     IEchoChannel channel = channelFactory.CreateChannel(); 
     channel.Open(); 

Meine app.config-Dateien der Einstellungen gelöscht werden. Ich habe keine anderen Dateien berührt.

Antwort

1

Dies liegt daran, dass der Namensraum der Labs sich von dem "alten" AppFabric unterscheidet. Ich weiß nicht, wie ich es jetzt funktioniere. Nur ziemlich viel "Microsoft" wieder ...

0

Ich habe das gleiche Problem und als ich es debuggte ich fand, dass der IssuerKey aus der Konfig ist "yourkey". Diese Werte werden im Azure-Projekt selbst in der Datei ServiceConfiguration.cscfg gespeichert. Sie müssen dort einige echte Werte platzieren und es sollte OK sein.

0

Ich treffe das gleiche Problem dann, ich figure aus, dieses Beispiel braucht einen eigenen Service-Bus. Erstellen Sie in Ihrem Portal einen Servicebus, und kopieren Sie dann den Wert des Ausstellerschlüssels in issure secret.

Verwandte Themen