WCF comment lier plusieurs contrats de service?
Tout d'abord je vais m'excuser car c'est probablement un doublon, mais tout ce que j'ai lu semble être incomplète ou de confusion que je suis très nouveau à la WCF.
En gros, je suis à la recherche de déployer un service WCF dans IIS avec 2 points de terminaison accessibles et ont tourné en rond toute la journée 🙁
J'ai une bibliothèque pour le service WCF dll avec la structure suivante
App.config
TestSvc1.cs
ITestSvc1.cs
TestSvc2.cs
ITestSvc2.cs
Cela fonctionne bien dans le VS client test WCF et maintenant im déploiement de IIS et j'ai donc créé un Service WCF Application et fait référence à la dll. Ce projet a la structure suivante
Service1.svc
Web.config
Service1.svc
contient ce
<%@ ServiceHost Language="C#" Debug="true"
Service="WCFServices.TestServices.ITestSvc1" CodeBehind="Service1.svc.cs" %>
et mon web.config
a la suite de
<services>
<service name="WCFServices.TestServices.TestSvc2">
<endpoint
address=""
binding="wsHttpBinding" bindingConfiguration="LargeSizeMessages"
contract="WCFServices.TestServices.ITestSvc2">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/wcf2/TestServices/TestSvc2/" />
</baseAddresses>
</host>
</service>
<service name="WCFServices.TestServices.TestSvc1">
<endpoint
address=""
binding="wsHttpBinding" bindingConfiguration="LargeSizeMessages"
contract="WCFServices.TestServices.ITestSvc1"
listenUri="http://localhost:8080/wcf2/service1.svc">
<identity>
<dns value="" />
</identity>
</endpoint>
<endpoint
address=""
binding="wsHttpBinding" bindingConfiguration="LargeSizeMessages"
contract="WCFServices.TestServices.ITestSvc2"
listenUri="http://localhost:8080/wcf2/service1.svc">
<identity>
<dns value="" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/wcf2/TestServices/TestSvc1/" />
</baseAddresses>
</host>
</service>
</services>
Toute aide serait grandement appréciée. Comme vous pouvez le voir j'ai essayé d'ajouter un point de terminaison dans le web.config
mais cela ne fonctionne pas, j'obtiens un message d'erreur indiquant que TestSvc2 les appels ne peuvent être trouvés dans TestSvc1 qui, j'imagine, se rapporte à l'entrée dans Service1.svc
J'ai lu aussi sur la création d'une classe qui hérite de ces interfaces, mais je ne suis pas sûr exactement comment mettre en œuvre sur la base de ce que j'ai ci-dessus. Dois-je modifier le Service1.svc
?
public interface MultipleSvc : ITestSvc1, ITestSvc2
{
//What exactly do I put here? I have no idea, do I leave it blank? This didn't work for me
}
Toute aide serait grandement appréciée, merci les gars 🙂
Ouais désolé c'est juste une faute de frappe pour ici juste pour illustrer les choses au mieux, mal de le modifier 🙂
OriginalL'auteur JazziJeff | 2013-01-15
Vous devez vous connecter pour publier un commentaire.
Règle d'or: un
.svc
= un service (ou plus précisément: un service mise en œuvre classe)Donc, si vous avez deux distincts et des services (dans les classes
WCFServices.TestServices.TestSvc1
etWCFServices.TestServices.TestSvc2
), alors vous avez besoin deux.svc
fichiers (un pour chaque service)Ce que vous pourrait faire est de un service de la mise en œuvre de la classe qui implémente à la fois des contrats de service:
Dans ce cas, un fichier svc sera suffisant (le
.svc
fichier est par la mise en œuvre de la classe et peut accueillir plusieurs contrats de service). Mais alors vous aurez besoin de changer de config, trop - depuis que vous avez vraiment seulement un service de classe (donc: un<service>
tag) et de multiples contrats hébergé à l'intérieur d'elle:Aussi: puisque vous semblez l'hébergement de votre service WCF dans IIS, il n'y a aucun point dans la définition de toute
<baseAddress>
les valeurs de la "base" de l'adresse de votre service est le lieu (URI) où la*.svc
fichier de vie.oui, c'est certainement une bonne idée.
merci les gars, essayé de la planif svc et il a obtenu de travail, il a cependant pour une raison quelconque a chuté de la wshttpbinding lorsqu'il est déployé et vient à travers avec basichttp - étrange! je vais tester avec deux svc fichiers et voir si le résultat est le même
ouais lors de ses deux seprate fichiers de la liaison reste wshttp des idées pourquoi il tombe quand theyre combiné?
+1 Aussi: puisque vous semblez l'hébergement de votre service WCF dans IIS, il n'y a aucun point dans la définition de toute <baseAddress> les valeurs de la "base" de l'adresse de votre service est le lieu (URI), où *.svc fichier de vie..
OriginalL'auteur marc_s
Vous n'avez pas besoin de deux svc fichier. Choisissez ServiceReference1.Service1Client ou ServiceReference1.Service2Client.
OriginalL'auteur TrungNV