Comment puis-je configurer Plusieurs points de terminaison du Service dans WCF?
J'aimerais avoir quelques conseils de base sur la configuration de ma configuration WCF.
C'est mon premier effort sérieux avec WCF (et le premier poste sur
stackoverflow).
J'ai un WCF bibliothèque de classe (APILibrary) que je suis referncing dans
mon projet web. Dans la wcf bibliothèque, j'ai actuellement deux
services - IAuthService et ITradeService.
Le long de ces lignes, j'ai trois questions:
1) Mon problème (et la raison première de ce post) est que quand je
compiler mon application que je suis en mesure d'appeler TradeServiceCient mais pas
AuthServiceClient dans mon application web. Ce dernier n'apparaît pas dans l'intellisense.
J'ai le sentiment que cela a à voir avec le fait qu'ils partagent
le même port (et un seul point de terminaison ai compris) mais je suis évidemment
incertaine.
2) je suis tenté d'exposer les deux points de terminaison du service à la même époque (et,
probablement un peu plus) alors que j'ai développer et de tester. Quand je bouge plus de mise en scène
et à l'accueil, chaque point de terminaison aura sa propre adresse. Jusqu'alors, comment faire
Je le fais (j'ai le sentiment que ce qui a trait à ma question ci-dessus)?
3) je remarque dans un grand nombre de messages de gens ont des exemples de "client"
et "serveur" système".serviceModel" du code. Ces fichiers uniques ou des étiquettes
dans l'Application.fichier de config qui se trouve dans mon WCF bibliothèque? Qu'est-ce que chaque train de faire?
Actuellement, je pense que j'ai juste le côté serveur?
Voici ce que j'ai actuellement dans mon Application.fichier de configuration (dans mon WCF Bibliothèque):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<client />
<services>
<service behaviorConfiguration="ApiLibrary.ApiBehavior" name="SpoonSys.Api.Trade.TradeService">
<endpoint address="" binding="wsHttpBinding" contract="SpoonSys.Api.Trade.ITradeService">
<identity>
<dns value="localhost:8731" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/ApiLibrary/Trade/" />
</baseAddresses>
</host>
</service>
<service behaviorConfiguration="ApiLibrary.ApiBehavior" name="SpoonSys.Api.Authentication.AuthService">
<endpoint address="" binding="wsHttpBinding" contract="SpoonSys.Api.Authentication.IAuthService">
<identity>
<dns value="localhost:8731" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/ApiLibrary/Authentication/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ApiLibrary.ApiBehavior">
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Ma configuration est ASP.NET /Framework 3.5 /VS 2008 /C#
- dit "L'autre question, c'est pourquoi vous obtenez seulement de voir d'un point de terminaison dans votre intellisense - avez-vous créer votre client de proxy pour les deux points de terminaison? Depuis c'est deux contrats distincts, vous aurez besoin de deux client proxy. Comment avez-vous créer votre point de terminaison de client? Vous pouvez poster la config du client, aussi?"
Vous devez vous connecter pour publier un commentaire.
Oui, dans votre cas, vous avez seulement à faire avec le côté serveur - de sorte que votre config ressemble tout à fait d'accord, en fait.
La seule chose que je voudrais changer dans ta config, c'est la scission entre "baseAddress" et le réel de l'adresse de service. Vous définissent actuellement la totalité de l'adresse complète de votre adresse de base - qui a plutôt l'emporte sur l'objectif de l'adresse de base. Je voudrais diviser comme suit:
De cette façon, vous pourriez fondamentalement effondrement vos deux points de terminaison dans l'une - l'adresse de base définit en fait une commune base pour toutes les autres adresses - alors que le point de terminaison définit les détails de l'adresse complète:
Ce fonctionne si vous avez une seule classe de Service "SpoonSys.L'Api.Services" qui implémente à la fois de ces contrats de service - c'est tout à fait bien et très utile à la fois.
SI vous disposez de deux classes de service, la mise en œuvre d'une interface de chaque, alors vous ne serez pas en mesure de l'effondrement de la config comme celle - ci, alors vous aurez à utiliser la totalité de la config pour deux classes de service dans votre post original (qui semble très bien pour moi).
L'autre question, c'est pourquoi vous obtenez seulement de voir d'un point de terminaison dans votre intellisense - avez-vous créer votre client de proxy pour les deux points de terminaison? Depuis c'est deux contrats distincts, vous aurez besoin de deux client proxy. Comment avez-vous créer votre point de terminaison de client? Vous pouvez poster la config du client, trop?
Marc
J'ai essayé de raccourcir l'adresse de base pour votre suggestion. J'étais alors à obtenir une erreur où
un service de démarrer, mais pas les autres. J'ai été dit que le point de terminaison de métadonnées a été déjà utilisé. J'ai ensuite essayé de changer mon des espaces de noms de SpoonSys.ApiLibrary.L'authentification et SpoonSys.ApiLibrary.Commerce à juste SpoonSys.ApiLibary
pour tous les fichiers de classe. Encore la même erreur. Quand j'ai changé à ma configuration d'origine du serveur il compilé. Encore, l'intellisense est seulement de ramasser un service, et pas l'autre.
Je ne suis pas sûr de ce que tu veux dire à propos de mon fichier de config du client. Je n'ai pas fait quelque chose de particulier à l'égard de la WCF dans mon projet d'application (à l'exception de inport la WCF bibliothèque de classe en tant que service web de référence). Peut-être que c'est là que je vais mal? Pourriez-vous m'en dire plus ici?
J'ai remarqué une Client.dll dans la FMC de l'éditeur pour chaque point de terminaison, et ont posté les personnes ci-dessous:
Point de TERMINAISON:localhost:8731/Design_Time_Addresses/Authentification/mex
Point de TERMINAISON:http://localhost:8731/Design_Time_Addresses/Trade/mex
ET Enfin, voici l'une de mes applications.CONFIG À NOUVEAU:
PS - je suis arriver "les nouveaux utilisateurs ne pouvez envoyer un maximum d'un lien hypertexte" lorsque j'essaie d'envoyer ma réponse, donc, j'ai pris tous "http://" références dans mon post. Ce n'est pas un code d'erreur.