我正在尝试在本地网络上的两台计算机之间运行Echo示例。该示例使用netTcpRelayBinding,如果我在同一台机器上运行服务和客户端,它可以正常工作。 当我第一次编译服务并将其放在我的其他计算机上时,安装了dev工具的Windows 2003 Server。它不会运行,因为它不知道app.config中的netTcpRelayBinding是什么。所以我将配置仅移动到代码并启动了服务。我通过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文件已清除设置。我没有触及任何其他文件。
答案 0 :(得分:1)
这是因为实验室的命名空间与“旧”appfabric不同。我不知道如何让它正常工作。几乎就是“微软”......
答案 1 :(得分:0)
我遇到了同样的问题,当我调试它时,我发现来自配置的issuerKey是“yourkey”。这些值存储在Azure项目本身ServiceConfiguration.cscfg文件中。你需要在那里放置一些真正的值,它应该没问题。
答案 2 :(得分:0)
我遇到同样的问题,我想,这个例子需要你自己的服务总线。 因此,在门户中创建一个服务总线,然后将发行者密钥的值复制到issure secret。