Possibilité d'ajouter un service de référence pour plusieurs contrats de service WCF

StackOverflow https://stackoverflow.com/questions/1661284

  •  12-09-2019
  •  | 
  •  

Question

Je dispose de plusieurs contrats de services définis dans une bibliothèque WCF qui sont hébergées au service Windows. Ces services sont exposés comme suit dans le fichier de configuration du service Windows:

<services>
  <service behaviorConfiguration="ReportingComponentLibrary.TemplateServiceBehavior"
    name="ReportingComponentLibrary.TemplateService">
    <endpoint address="" binding="wsHttpBinding" contract="ReportingComponentLibrary.ITemplateService" bindingConfiguration="wsHttp" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" ></endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8080/ReportingComponentLibrary/TemplateService/" />
      </baseAddresses>
    </host>
  </service>
  <service behaviorConfiguration="ReportingComponentLibrary.TemplateServiceBehavior"
    name="ReportingComponentLibrary.TemplateReportService">
    <endpoint address="" binding="wsHttpBinding" contract="ReportingComponentLibrary.ITemplateReportService" bindingConfiguration="wsHttp" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" ></endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8080/ReportingComponentLibrary/TemplateReportService/" />
      </baseAddresses>
    </host>
  </service>
</services>

Maintenant, quand j'ajouter une référence de service dans mon application client,

Est-il possible d'ajouter une seule référence de service pour les services ci-dessus deux ou

Je dois référence distinct pour chaque contrat de service / service.

Mise à jour:

Voici mes coordonnées d'application:

J'ai trois projets différents:

  1. WCF bibliothèque service
  2. Service Windows pour l'hébergement ci-dessus service WCF
  3. Client - Demande d'essai Console

Maintenant, le App.Config dans WCF Service des bibliothèques est la suivante:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>     

  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttp" maxReceivedMessageSize="50000000" maxBufferPoolSize="50000000" messageEncoding="Mtom">
          <readerQuotas maxDepth="500" maxStringContentLength="500000000" maxArrayLength="500000000"
          maxBytesPerRead="500000000" maxNameTableCharCount="500000000" />
        </binding>
      </wsHttpBinding>
    </bindings>

    <services>
      <service behaviorConfiguration="ReportingComponentLibrary.TemplateServiceBehavior"
        name="ReportingComponentLibrary.TemplateService">
        <endpoint address="" binding="wsHttpBinding" contract="ReportingComponentLibrary.ITemplateService" bindingConfiguration="wsHttp" >
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" ></endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/ReportingComponentLibrary/TemplateService/" />
          </baseAddresses>
        </host>
      </service>

      <service behaviorConfiguration="ReportingComponentLibrary.TemplateServiceBehavior"
        name="ReportingComponentLibrary.TemplateReportService">
        <endpoint address="" binding="wsHttpBinding" contract="ReportingComponentLibrary.ITemplateReportService" bindingConfiguration="wsHttp" >
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/ReportingComponentLibrary/TemplateReportService/" />
          </baseAddresses>
        </host>
      </service>

    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="ReportingComponentLibrary.TemplateServiceBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Et App.Config dans Windows est comme ci-dessus.

Maintenant, dans mon application cliente, je dois consommer des méthodes à la fois TemplateService et TemplateReportService.

Alors, je peux toujours deux références de service différents comme:

http: // localhost: 8080 / ReportingComponentLibrary / TemplateService / et

http: // localhost: 8080 / ReportingComponentLibrary / TemplateReportService /

Tout cela est bien travailler.

Mais je me demandais s'il y a un moyen (en dehors de la solution d'emballage que vous avez suggéré) par lequel je dois ajouter qu'une seule référence et Je peux appeler des méthodes à la fois des services.

Était-ce utile?

La solution

En l'état actuel, je ne pense pas que ce soit possible, vous aurez besoin de 2 références de service comme ils ont tous deux contrats distincts mettent en œuvre. En supposant que vous avez le contrôle du code de service, vous pouvez mettre en œuvre une solution de contournement où vous créez un wrapper de service implémente les contrats en pointant les deux services distincts. Cela vous permettra d'avoir une référence de service. Y at-il un problème particulier pourquoi vous voulez à la fois en un seul service par opposition à deux?

EDIT: Cette Blog Article - Meineck.Net vous montre comment vous pouvez configurer vos services pour obtenir ce que vous êtes après, mais encore une fois, il est à peu près un travail autour. Bonne chance.

Autres conseils

Un service de référence = Un contrat de service

Votre service Windows a beaucoup de services à l'intérieur, chacun avec son propre contrat.

Il n'y a cependant rien qui vous empêche la création d'un contrat unique qui contient la fonctionnalité de tous les services, puis en créant une classe qui implémente ce contrat, mais est simplement une passe à travers la couche aux autres servcies.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top