Azure AppFabric Service Bus Echo образец не работает - PullRequest
0 голосов
/ 07 декабря 2010

Я пытаюсь запустить образец Echo между двумя компьютерами в моей локальной сети. В примере используется netTcpRelayBinding, и он работает нормально, если я запускаю и службу, и клиента на одной машине. Когда я впервые скомпилировал службы и установил их на другом компьютере, на Windows 2003 Server не было установлено никаких средств разработки. Он не запустился, потому что не знал, что такое netTcpRelayBinding в app.config. Поэтому я перенес конфиг только в код, и сервис запустился. Я подтвердил это с помощью Service Bus Explorer. Затем я попытался подключиться к моей машине разработчика (через VS2010), но это не сработало. Я пытался что-то изменить как на сервисе, так и на клиенте, пробуя все возможные комбинации настроек, но ничего. Я чаще всего получаю одну из двух ошибок на клиенте:

"ContractDescription 'IEchoContract' имеет ноль операций; в контракте должна быть хотя бы одна операция."

или

"не было прослушивания конечной точки, которая могла бы принять сообщение".

Это код сервера, мое изменение между пользовательскими комментариями.

// 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();

Это код клиента, мое текущее изменение между пользовательскими комментариями:

// 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();

Мои файлы app.config очищены от настроек. Я не трогал другие файлы.

Ответы [ 3 ]

1 голос
/ 20 февраля 2011

Это потому, что пространство имен лабораторий отличается от «старого» appfabric. Я не знаю, как заставить это работать прямо сейчас. Просто снова "Microsoft" ...

0 голосов
/ 23 ноября 2012

Тогда я сталкиваюсь с той же проблемой, выясняю, для этого примера нужна собственная служебная шина. Поэтому создайте служебную шину на своем портале, а затем скопируйте значение ключа эмитента в issure secret.

0 голосов
/ 24 октября 2012

У меня возникла та же проблема, и когда я отладил ее, я обнаружил, что исходящий ключ из конфигурации - это "твоя клавиша". Эти значения хранятся в самом проекте Azure, файле ServiceConfiguration.cscfg. Вам нужно поместить туда реальные значения, и все должно быть в порядке.

...