OK, donc les choses les plus importantes sont les suivantes:
puis quelques trucs supplémentaires jetés dans
1). Adresse:
Télécharger ce d'ici:
WebServiceHost host = new WebServiceHost(
typeof(MyService), new Uri("http://localhost:80/"));
host.AddServiceEndpoint(typeof(MyService), new WebHttpBinding(), "");
et ici:
ServiceEndpoint sbEndpoint = host.AddServiceEndpoint(
typeof(MyService), new WebHttpRelayBinding(), "http://azureURL");
vous aurez donc besoin de quelque chose comme:
<endpoint address=""
<endpoint address="http://azureURL"
<endpoint address=""http://someURL"
dans votre service.
2) Reliure:
Le premier critère d'évaluation est un webHttpBinding, le second utilise une liaison de commande ("Mybinding") - si vous avez:
<endpoint address=""
binding="webHttpBinding"
<endpoint address="http://azureURL"
binding="webRelayHttpBinding"
<endpoint address=""http://someURL"
binding="myBinding"
et vous devrez définir votre fixation sur mesure:
<bindings>
<customBinding>
<binding name="MyBinding">
.. define the parameters of your binding here
</binding>
</customBinding>
</bindings>
ou créer une section <extensions>
pour votre liaison stockée dans le code dans un ensemble séparé.
3) Contrats
Je ne vois pas clairement un contrat partout - vous ne jamais utiliser le typeof (MyService), mais le plus souvent, c'est le service concret exemple, pas le contrat de service qui devrait être une interface (quelque chose comme IMyService
). Pourquoi n'avez-vous pas de contrat de service explicite? (Non les meilleures pratiques mais possible)
Quoi qu'il en soit, si votre mise en œuvre de services est le contrat, aussi, en même temps, alors vous avez vos deux points d'extrémité comme ceci:
<endpoint address=""
binding="webHttpBinding"
contract="MyService" />
<endpoint address="http://azureURL"
binding="webHttpRelayBinding"
contract="MyService" />
<endpoint address="http://someURL"
binding="myBinding"
contract="MyService" />
Vous devez ensuite ajouter quelques saupoudre ici et là (définissent la « adresse de base » du service, donner le service un nom et ainsi de suite), et devrait se retrouver avec quelque chose comme:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="MyBinding">
.. define the parameters of your binding here
</binding>
</customBinding>
</bindings>
<services>
<service name="YourNameSpace.MyService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:80/" />
</baseAddresses>
</host>
<endpoint address=""
binding="webHttpBinding"
contract="MyService" />
<endpoint address="http://azureURL"
binding="webHttpRelayBinding"
contract="MyService" />
<endpoint address="http://someURL"
binding="myBinding"
contract="MyService" />
</service>
</services>
</system.serviceModel>
maintenant, tout ce que vous êtes absent est le comportement défini - Je vais laisser cela comme un exercice pour l'affiche :-)
Cela aide-t-il quelque chose? Comme pour les références - hmmm ..... difficile à dire .... Je suppose que les livres habituels ("Learning WCF" par MLBustamante pour débutant/intermédiaire, "Programmation WCF" par Juval Lowy pour intermédiaire/avancé) sont mon meilleur pari, et beaucoup d'expérience, vraiment. Je ne connais aucune source qui montre explicitement et enseigne comment convertir entre les paramètres dans le code et la configuration - les deux livres mentionnés montrent généralement les deux façons, et à partir de cela, vous pouvez le découvrir vous-même.
Marc
Merci d'avoir expliqué le processus de construction du fichier de configuration. Comme vous vous y attendiez, la mise en œuvre du service est également le contrat. J'ai choisi cela car le contrat ne comporte que deux fonctions très générales et n'est pas réutilisable. J'ai essayé d'abord avec le webHttpBinding et j'ai commenté la configuration programmatique existante. Cependant, cela ne fonctionne pas. Le service n'est pas accessible lorsque j'ouvre http: // localhost dans mon navigateur Web. Dois-je définir d'autres paramètres pour l'application dans VS? (C'est une "application console" standard pour le moment.) – Etan
Eh bien, un problème que vous avez est: pour la liaison webHttp, vous avez besoin de WebServiceHost - pour les autres liaisons, vous avez besoin du ServiceHost droit - donc vous ne serez probablement pas capable d'héberger tous les points de terminaison dans un seul (Web) ServiceHost –