2010-12-22 3 views
0

Cela fait deux jours que je me bats avec cela et je n'arrive toujours pas à le faire fonctionner.Client Azure AppFabric

Je vais rejoindre un flux de diagramme à ma question afin que mon problème se précise: Google Docs PNG

est ici la question générale:

J'ai un service simple WCF déployé sur Windows Azure et je peut y accéder sans problème. Maintenant, je veux accéder à ce même service via ServiceBus (c'est-à-dire AppFabric) et c'est là que je suis bloqué. J'ai créé un espace de noms sur appfabric, défini un pack de 5 connexions et là je commence!

Voici mon ServiceDefinition (csdef) Fichier:

<?xml version="1.0" encoding="utf-8"?> 
<ServiceDefinition name="CRM5_WP7_GW"  xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> 
    <WebRole name="WCFGWServiceWebRole"> 
<Sites> 
    <Site name="Web"> 
    <Bindings> 
     <Binding name="Endpoint1" endpointName="Endpoint1" /> 
    </Bindings> 
    </Site> 
</Sites> 
<Endpoints> 
    <InputEndpoint name="Endpoint1" protocol="http" port="80" /> 
</Endpoints> 
<Imports> 
    <Import moduleName="Diagnostics" /> 
</Imports> 
<LocalResources> 
    <LocalStorage name="WCFServiceWebRole1.svclog" sizeInMB="1000" cleanOnRoleRecycle="false" /> 
</LocalResources> 

Alors, voici mon fichier ServiceConfiguration (de cscfg):

<?xml version="1.0" encoding="utf-8"?> 
<ServiceConfiguration serviceName="CRM5_WP7_GW" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*"> 
    <Role name="WCFGWServiceWebRole"> 
    <Instances count="2" /> 
    <ConfigurationSettings> 
     <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" /> 
    </ConfigurationSettings> 
    </Role> 
</ServiceConfiguration> 

Maintenant, la dernière partie: Mon application de la console (le client):

namespace CRM5WP7HARDCLIENT 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 

// create the service URI based on the service namespace 
Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("https", "myNameSpace", "myServiceName"); 

// 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 

ServiceEndpoint sep = new ServiceEndpoint(ContractDescription.GetContract(typeof(IGWService))); 
sep.Address = new EndpointAddress(serviceUri); 
sep.Binding = new NetTcpRelayBinding(); 
sep.Binding = new BasicHttpRelayBinding(); 
ChannelFactory<IGWService> channelFactory = new ChannelFactory<IGWService>(sep); 

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


// create and open the client channel 
IGWService channel = channelFactory.CreateChannel(); 
System.Console.WriteLine("Opening channel..." + serviceUri.ToString()); 
((ICommunicationObject)channel).Open(); 
System.Console.WriteLine("Calling operation..."); 
System.Console.WriteLine(channel.HelloWorld()); 
System.Console.WriteLine("Done..."); 
System.Console.ReadKey(); 

((ICommunicationObject)channel).Close(); 
channelFactory.Close(); 
    } 
    } 
} 

Comme vous pouvez le constater, mon service a un monde simple bonjour. Mon application de console indique "Aucun service hébergé à l'emplacement spécifié" ..

J'ai essayé de changer l'URI, j'ai essayé de jouer avec la configuration plusieurs fois avant de finir avec celle que j'ai maintenant mais mes efforts ont fait faillite^_^

Si vous les gars avez une idée, que ça va être trop beau :)

Merci d'avance pour vos suggestions et directions

Vive B Miloud

+0

Désolé, il est une question idiote, mais juste pour confirmer - avez-vous mis vos informations d'identification réelle dans « issuerName » et « issuerKey »? De même pour "myServiceName"? – Doobi

Répondre

1

Votre hôte de service est-il dans un rôle Web Azure? Si c'est le cas, le problème peut être qu'à moins d'être "activé" en externe, le service WCF ne crée jamais la connexion sortante au bus de service. Cette activation est généralement effectuée par IIS lorsqu'une demande est envoyée au service. Mais lors de l'utilisation du bus de service, l'hôte de service doit initier activement ce projet.

Vous pouvez vous référer à cet article de blog: http://www.wadewegner.com/2010/05/host-wcf-services-in-iis-with-service-bus-endpoints/

+0

Merci à vous! Je reçois la bonne direction maintenant;) – CoolStraw

+0

Pour ce scénario en particulier, et si vous n'avez aucune dépendance IIS ou ASP.NET, j'ai trouvé qu'il est plus facile d'héberger le service WCF sur un WorkerRole, puisque vous pouvez contrôler le cycle de vie complet du service mieux. –

Questions connexes