Entwickler-Ecke

Verteilte Systeme - WCF Endpoint Konfigurartion für Netzwert und Internet


kyon86 - So 14.09.08 16:41
Titel: WCF Endpoint Konfigurartion für Netzwert und Internet
Hi,
Ich hab diesen Artikel (über einen WCF Server und Client)
http://www.codeproject.com/KB/WCF/WCFWPFChat.aspx
gelesen und mit dem Sourcecode gearbeteit sowie mit diesem
http://www.ms.phy.hr/wcfchat/
auf dem er basiert.
Mein Client und Server funktioniert auch, allerdings nur wenn ich Client und Server auf dem gleichen Rechner laufen lasse. Ich weiß irgendwie überhaupt nicht wie ich Client und Server konfigurieren soll, wenn sie auf unterschiedlichen Rechnern in einem Netzwerk oder über Internet miteinander komunizieren sollen. Alle Beispiele die ich zu WCF bisher gefunden habe beziehen sich nur auf Localhost.
Vielleicht kann mir jemand von euch weiterhelfen wie die Endpoints und Bindings(z.b. in der app.config) für Client Server eingestellt werden müssten damit die Kommunikation über Netzwerk/Internet funktioniert. Oder vielleicht gibts irgendwo doch ein Beispiel dazu?
Mit freundlichen Grüßen und vielen Dank
Kyon


UGrohne - So 14.09.08 17:52

Du musst in der Endpoint-Configuration natürlich im Client die IP-Adresse des Servers hinterlegen. Wie sieht denn die Endpoint-Configuration im Moment aus und über welches Protokoll lässt Du die Kommunikation laufen?


kyon86 - So 14.09.08 21:22

Net TCP Binding im Duplexbetrieb.

Der Server Endpoint ist (Im Programm festgelegt):

C#-Quelltext
1:
2:
3:
4:
string strEndpoint = "net.tcp://" + "localhost" + ":" + strPort + "/service";
Uri uri = new Uri(strEndpoint); // net.tcp://localhost:8080/service
host = new System.ServiceModel.ServiceHost(typeof(Service.ServiceImpl), uri);
host.Open();



und beim Client:

C#-Quelltext
1:
proxy.Endpoint.Address = new EndpointAddress("net.tcp://" + strIP + ":" + strPort + "/service");                    


Beim Test über ein Lokales Netzwerk habe ich dabei für strIP die Netzwerk IP des Server-Rechners "192.168.x.x" benutzt.
Dabei kam keine Verbindung zustande. Auf dem Rechner auf dem der Server läuft kann der Client aber wie erwähnt auf localhost verbinden.


Die AppConfig des Servers:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
<configuration>
  <system.serviceModel>

    <services>
      <service name="Service.ServiceImpl" behaviorConfiguration="MyBehavior">
        <endpoint address=""
                  binding="netTcpBinding"
                  bindingConfiguration="DuplexBinding"
                  contract="Service.IServer" />
      </service>
    </services>

    <client>
      <endpoint name="" binding="netTcpBinding"
                bindingConfiguration="DuplexBinding" contract="IServer"/>
    </client>
    
    <behaviors>
      <serviceBehaviors>
        <behavior  name="MyBehavior">
          <serviceThrottling maxConcurrentSessions="10000" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <bindings>
      <netTcpBinding>
        <binding name="DuplexBinding" sendTimeout="00:00:01">
          <reliableSession enabled="true" />
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>

  </system.serviceModel>
</configuration>




Und die des Client Programms:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
  <system.serviceModel>
    
    <client>
      <endpoint name="" binding="netTcpBinding" 
                bindingConfiguration="DuplexBinding" contract="IServer"/>
    </client>
    
    <bindings>
      <netTcpBinding>
        <binding name="DuplexBinding" sendTimeout="00:00:05">
          <reliableSession enabled="true"/>
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
    
  </system.serviceModel>
  
<startup><supportedRuntime version="v2.0.50727"/></startup>
</configuration>


Moderiert von user profile iconKha: Tags hinzugefügt