2011-10-31 9 views
8

Sto solo imparando WCF e non riesco a capire una cosa fondamentale.indirizzo relativo dell'endpoint wcf

Sto creando un servizio WCF che voglio essere ospitato in IIS proprio come un'applicazione web con il proprio percorso come http://myhost/myapp/ e tutto il resto.

Sto creando il progetto di servizio WCF in VS, ho un file di *.svc descriverlo, poi mi definiscono un semplice endpoint ad esso così:

<endpoint address="" 
      binding="basicHttpBinding" 
      contract="wcf_service_auth.IPshService" /> 

Poi che pubblico questo servizio come un Applicazione Web IIS a una directory virtuale, supponiamo che sia il nome psh_pub, quindi posso accedere al servizio tramite l'url http://localhost/psh_pub/pshservice.svc/. Mi mostra la pagina dei saluti WCF e mi fornisce un collegamento a WSDL, che mi fornisce la descrizione corretta di wsdl.

Va bene.

Il passaggio successivo: desidero aggiungere un endpoint MEX. Aggiungo al config:

<endpoint address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange"/> 

che è troppo bene, il punto finale è accessibile all'indirizzo http://localhost/psh_pub/pshservice.svc/mex e WcfTestClient.exe mi dà corretta configurazione da questo URL.

Qui il problema arriva.

Ho un servizio WCF che funziona sotto IIS e voglio aggiungere un altro endpoint ad esso. Ad esempio, lascia che sia un endpoint net.tcp. L'IIS è configurato di default per accettare net.tcp connessioni a porta 808 e sto aggiungendo net.tcp protocollo di proprietà della mia web app, e voglio aggiungere un endpoint al mio servizio simile:

<endpoint address="" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 

e ora supponiamo che il mio servizio dovrebbe essere accessibile tramite l'url net.tcp://localhost:808/psh_pub/pshservice.svc. Ma non lo è. E ogni "how-to" e manuale sul web dice che dovrei specificare l'indirizzo completo nel file di configurazione del genere:

<endpoint address="net.tcp://localhost:808/psh_pub/pshservice.svc" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 

E se lo faccio, funziona. Ma se ospitiamo il servizio in un'altra directory virtuale, dovrò cambiare la configurazione. Se lo ospito sull'altro server, dovrò cambiare configurazione. Se lo ospito su più server, dovrò mantenere il maggior numero di configurazioni di server che ho.

Quindi le domande principali è:

C'è un modo in WCF per specificare un (o https) endpoint di un servizio WCF IIS-hosted net.tcp senza specificare URL assoluto per questo?

risposta

7

Dovresti essere in grado di definire un indirizzo di base per i tuoi endpoint di servizio net.tcp:

<service name="YourServiceName"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://localhost:808/psh_pub/" /> 
     </baseAddresses> 
    </host> 

Poi si dovrebbe essere in grado di utilizzare gli indirizzi relativi a endpoint effettivi:

<endpoint name="Tcp01" 
      address="pshservice.svc" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 
</service> 
+0

Non so cosa ho appena fatto, ma ho un endpoint net.tcp funzionante con parametro "indirizzo" vuoto. comunque grazie per l'aiuto. – pushist1y

4

Attivazione senza file WCF (.Net 4.0) vi permetterà di registrare in un percorso virtuale relativa utilizzando l'attributo relativeAddress:

<system.serviceModel> 
    <serviceHostingEnvironment> 
    <serviceActivations> 
     <add relativeAddress="relative-virtual-path/yourservice.svc" 
      service="YourServiceImpl" /> 
    </serviceActivations> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

relativo all'indirizzo di base dell'applicazione Web

questo collegamento ne parla: http://msdn.microsoft.com/en-us/library/ee354381.aspx

+0

file meno di attivazione mi permette di sbarazzarsi di file .svc, ma non riesco a vedere come si può aiutare a evitare di specificare l'indirizzo host assoluto per l'endpoint net.tcp. Mi manca qualcosa? – pushist1y

+0

@ pushist1y Esiste un attributo chiamato relativeAddress sotto le attivazioni del servizio che consente di specificare un percorso virtuale relativo per accedere al servizio. Questo non funziona per te? – Craig

Problemi correlati