Frage

Ich habe zwei Seiten auf der gleichen Maschine. Das erste (Client) verweist auf einen WCF-Dienst auf dem zweiten Standort (Server).

Wie kann ich die Adresse für den Dienstverweis eingestellt? Wenn von der Entwicklung auf meinem lokalen Rechner zur Gruppe Entwicklungs-Server zu bewegen, wie kann ich die URL für den Service? Die Standorte werden von Host-Header zu unterscheiden, wie http: //dev.admin/ ... und http: //dev.public/ ...

Ich habe das Gefühl, dass diese mehrere Endpunkte mit gehandhabt werden können, aber ich bin sehr neu zu WCF und haben wirklich keine Ahnung, was ich hier tue.

War es hilfreich?

Lösung

Nach viel Frustration gelang es mir, um zu bestimmen, dass beide web.config-Dateien (auf dem Client und Server, von denen beide Web-Anwendungen sind in diesem Fall), die folgenden Abschnitte müssen geändert werden:

Auftraggeber:

   <client>
      <endpoint 
        address="http://mysite.com:port/services/someservice.svc"
        binding="basicHttpBinding" 
        bindingConfiguration="BasicHttpBinding_ISomeService"
        contract="MyServices.ISomeService" 
        name="BasicHttpBinding_ISomeService" />

    </client>
  </system.serviceModel>

Server

 <system.serviceModel>
    <serviceHostingEnvironment>
      <baseAddressPrefixFilters>
        <add prefix="http://mysite.com:port/services"/>
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServices.SomeServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="MyServices.SomeServiceBehavior"
        name="MyServices.SomeService">
          <endpoint address="http://mysite.com:port/services/someservice.svc" 
                    name="endpoint.SomeService"
                    binding="basicHttpBinding" 
                    bindingConfiguration="" 
                    contract="MyServices.ISomeService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

Die Sache hier zu beachten ist, dass die Host-Adresse in allen drei relevanten Abschnitte (Client-Endpunkt-Adresse, Server baseAddressPrefixFilter Wert und Server-Endpunkt-Adresse) müssen übereinstimmen.

Ich bin in der Lage diese zwischen Servern zu wechseln, indem Sie ändern, solange sie übereinstimmen. Ich würde immer noch einen Weg bevorzugen diese Einstellung vornehmen, basierend auf welcher Maschine der Server ausgeführt wird, aber das funktioniert für den Moment.

WCF Impressionen Was ist heiß: persistentes Objekt. Das Client-Proxy-Objekt (erstellt, wenn Sie einen Dienstverweis hinzufügen) unterhält eine dauerhafte Verbindung mit dem Dienst auf dem Server. Die Dienstinstanz durch den Client-Proxy referenziert behält seinen Zustand zwischen den Anrufen, die Signaturen Verfahren vereinfachen und macht das Client-Proxy-Objekt und den Service als Ganze, viel nützlicher für bestimmte Anwendungen. Parameter Objekttypen kann zwischen dem Client und Server ausgetauscht werden, wenn sie in einer gemeinsamen Bibliothek deklariert sind, was bedeutet, dass Sie müssen nicht zwei sehr ähnliche Klassen oder Wrapper-Klassen erstellen nicht-primitiven Strukturen Daten hin und her zu übergeben.

Was ist nicht: Konfiguration ist ein königlicher Schmerz, schlecht dokumentiert, und viel zu beteiligen. Immer diese in einem Test / dev / staging / Produktionsumgebung Konfiguration zu arbeiten, wo der Dienst neesd sich seiner Lage sein, ist frustrierend. Ich bin nicht davon überzeugt, dass der Dienst sich seiner Domain-URL zu machen (und nicht, sagen wir, ein relativer Pfad zu, was auch immer es läuft auf) hat einen signifikanten Vorteil, Sicherheitsbedenken beiseite.

Das heißt, ich bin weiterhin die WCF Weg zu gehen, da die Vorteile so weit die Kopfschmerzen aufwiegen.

Andere Tipps

Der einfachste Weg:. Die WCF Teile auf verschiedenen Ports laufen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top