Laden...

Eine Anwendung -> 2 WCF Dienste

Erstellt von Grimmbizkit vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.568 Views
G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 10 Jahren
Eine Anwendung -> 2 WCF Dienste

Hallo zusammen,

ich habe eine Frage, ich habe folgendes Problem.
Ich habe 2 WCF Dienste (als Windows-Dienst) erstellt und diese beiden Laufen auch.

Wenn ich nun Dienst 1 Einbinde in eine WindowsForms Anwendung klappt das nicht. Nur bei dem zweiten Dienst gibt es Probleme. Als Beispiel wir die app.config nicht erweitert.

Weiß jemand vll woran das liegen kann?

Gruß Simon

16.842 Beiträge seit 2008
vor 10 Jahren

Keiner hier hat ne Glaskugel.
[Hinweis] Wie poste ich richtig? Punkt 5.

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 10 Jahren

In der Fehlermeldung steht:> Fehlermeldung:

Es wurde kein standardmäßiges Endpunktelement gefunden, das auf den Vertrag "IPCServiceHost.IIPCService" im ServiceModel-Clientkonfigurationsabschnitt verweist. Dies kann folgende Ursachen haben: Für die Anwendung wurde keine Konfigurationsdatei gefunden, oder im Clientelement wurde kein Endpunktelement gefunden, das diesem Vertrag entsprach.

Allerdings steht in der app.config drin:


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

Also Nix

Die beiden config Dateien der Dienste:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
      <bindings>
        <netTcpBinding>
          <binding name="NetTcp_Reliable">
            <reliableSession ordered="false" inactivityTimeout="infinite" enabled="true" />
          </binding>
        </netTcpBinding>
      </bindings>
      <behaviors>
        <serviceBehaviors>
          <behavior name="IPCServiceHost.IPCServiceBehavior">
            <serviceMetadata httpGetEnabled="false" />
            <serviceDebug includeExceptionDetailInFaults="false" />
          </behavior>
        </serviceBehaviors>
      </behaviors>
       <services>
          <service behaviorConfiguration="IPCServiceHost.IPCServiceBehavior"
             name="IPCServiceHost.IPCService">
             <endpoint address="" binding="netTcpBinding" bindingConfiguration="NetTcp_Reliable"
                name="NetTcpBindingEndpoint" contract="IPCServiceHost.IIPCService" />
             <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
                name="MexTcpBindingEndpoint" contract="IMetadataExchange" />
             <host>
                <baseAddresses>
                   <add baseAddress="net.tcp://localhost:9000/IPCService" />
                </baseAddresses>
             </host>
          </service>
       </services>
    </system.serviceModel>
</configuration>


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
      <bindings>
        <netTcpBinding>
          <binding name="NetTcp_Reliable">
            <reliableSession ordered="false" inactivityTimeout="infinite" enabled="true" />
          </binding>
        </netTcpBinding>
      </bindings>
      <behaviors>
        <serviceBehaviors>
          <behavior name="LoggerServiceHost.LoggerServiceBehavior">
            <serviceMetadata httpGetEnabled="false" />
            <serviceDebug includeExceptionDetailInFaults="false" />
          </behavior>
        </serviceBehaviors>
      </behaviors>
       <services>
          <service behaviorConfiguration="LoggerServiceHost.LoggerServiceBehavior"
             name="LoggerServiceHost.LoggerService">
             <endpoint address="" binding="netTcpBinding" bindingConfiguration="NetTcp_Reliable"
                name="NetTcpBindingEndpoint" contract="LoggerServiceHost.ILoggerService" />
             <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
                name="MexTcpBindingEndpoint" contract="IMetadataExchange" />
             <host>
                <baseAddresses>
                   <add baseAddress="net.tcp://localhost:9001/LoggerService" />
                </baseAddresses>
             </host>
          </service>
       </services>
    </system.serviceModel>
</configuration>

Manchmal geht VS auch hin und fügt automatisch werte in die app.config der ClientAnwendung ein und manchmal nicht: Komisch!

16.842 Beiträge seit 2008
vor 10 Jahren

Die Fehlermeldung ist mehr als eindeutig.
Wenn Du keine Endpunkte in der Client-Config definierst, dann musst Du sie im Client-Code hinterlegen. Aber das zeigst Du uns hier nicht und daher nehme ich an, dass Du das auch nicht tust.

Schau Dir WCF Tutorials an. Endpunktedefinitionen gehören zu den WCF Basics.
Visual Studio macht nicht alles automatisch. Man muss als Entwickler tatsächlich ab und zu noch selbst was machen.

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 10 Jahren

richtig im code mach ich nur das open.
Das komische ist halt das VS es mal macht und mal nicht.

Kannst du mir ein tutorial empfehlen wo die endpunkte im Quellcode definiert werden? Habe das bisher nur mit configfile gesehen.

6.911 Beiträge seit 2009
vor 10 Jahren

Hallo Grimmbizkit,

ich vermute deine Mex-Endpunkte passen nicht, daher funktioniert der Meta-Datenaustausch nicht und die app.config bleibt leer.

Für Mex bietet WCF einen sogenannten Standardendpunkt an und dieser kann über


<endpoint kind="mexEndpoint" binding="mexTcpBinding" />

angegeben werden.

Außerdem muss erlaubt werden dass die Metadaten ausgetauscht werden können. Probier das am besten mit der BasicHttpBindung aus, denn mit dieser kannst du im Browser prüfen ob alles passt bzw. die dortigen Fehlermeldungen sind i.d.R. sehr aussagekräftig.

Es geht aber auch ohne automatische Generierung. Dazu ist es ratsam ein eigenes Projetk zu haben indem die ServiceContracts abgelegt sind, so dass sowohl Server als auch Client diese referenzieren kann. In der Client-app.config trägst du dann händisch die Client-Endpunkte (Abschnitt configuration/system.serviceModel/client/endpoint) ein, der Aufbau ist analog zur Service-app.config.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

G
Grimmbizkit Themenstarter:in
310 Beiträge seit 2006
vor 10 Jahren

Ich habe mal angefangen das ganze ohne config-Files zu machen und alles Hardcodiert programmiert.
Weiteres folgt in kürze!