2009-08-19 10 views
7

Sto attraversando un periodo difficile con NetTcpBinding.con NetTcpBinding

Quando eseguo il mio WCFservice, ottengo questo:

System.InvalidOperationException: Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base address schemes are [http]. 
    at System.ServiceModel.ServiceHostBase.MakeAbsoluteUri(Uri relativeOrAbsoluteUri, Binding binding, UriSchemeKeyedCollection baseAddresses) 
    at System.ServiceModel.Description.ConfigLoader.LoadServiceDescription(ServiceHostBase host, ServiceDescription description, ServiceElement serviceElement, Action`1 addBaseAddress) 
    at System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader, ServiceDescription description, ServiceElement serviceSection) 
    at System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal(ConfigLoader configLoader, ServiceDescription description, String configurationName) 
    at System.ServiceModel.ServiceHostBase.ApplyConfiguration() 
    at System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection baseAddresses) 
    at System.ServiceModel.ServiceHost.InitializeDescription(Type serviceType, UriSchemeKeyedCollection baseAddresses) 
    at System.ServiceModel.ServiceHost..ctor(Type serviceType, Uri[] baseAddresses) 
    at Microsoft.Tools.SvcHost.ServiceHostHelper.CreateServiceHost(Type type, ServiceKind kind) 
    at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info) 

sto ottenendo questo quando faccio funzionare l'applicazione di default utilizzando WCFSvcHost. Non c'è codice aggiuntivo. Basta il codice predefinito di qualsiasi nuovo servizio wcf. Tutto quello che volevo fare era cambiare il binding in tcp.

Come posso risolvere questo problema?

Edit: Ecco di App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <netTcpBinding> 
     <binding name="tcpBinding" transferMode="Streamed" portSharingEnabled="false"> 
      <reliableSession enabled="true" /> 
      <security mode="None"> 
      <transport clientCredentialType="None" protectionLevel="None" /> 
      <message clientCredentialType="None" /> 
      </security> 
     </binding> 
     </netTcpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="WcfServiceLibrary1.Service1Behavior" 
     name="WcfServiceLibrary1.Service1"> 
     <endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary1.IService1"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <endpoint address="Service" binding="netTcpBinding" bindingConfiguration="tcpBinding" 
      name="testTcp" contract="WcfServiceLibrary1.IService1" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/Service1/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="WcfServiceLibrary1.Service1Behavior"> 
      <serviceMetadata httpGetEnabled="True"/> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 
+0

Potrebbe inviare la configurazione WCF da app/web.config? – jrista

+0

Non è visibile anche se lo inserisco – Josh

+0

dopo averlo aggiunto, premere il tasto codice (per rientrare ogni riga 4 spazi e non interpretare l'xml) – Brian

risposta

7

mio WCF In questa sezione

<host>   
    <baseAddresses>    
    <add baseAddress="http://localhost:8731/.../" /> 
    </baseAddresses>   
</host> 

aggiungere un net.tcp: // indirizzo di base.

<host> 
    <baseAddresses> 
    <add baseAddress="http://localhost:8732/" /> 
    <add baseAddress="net.tcp://localhost"/> 
    </baseAddresses> 
</host> 
+0

aggiungendo che non funziona. Dice che la porta è in uso tipo di errore. Potresti completare quella linea per me, per favore? Grazie – Josh

+0

System.ServiceModel.AddressAlreadyInUseException: TransportManager non è riuscito ad ascoltare sull'URI fornito utilizzando il servizio NetTcpPortSharing: il servizio non è riuscito ad ascoltare. – Josh

+0

Assicurarsi di utilizzare una porta diversa (ad esempio se http è su 8731, quindi utilizzare ad esempio 8732: net.tcp: // localhost: 8732/Yadda/Blah /) – Brian

18

sono sicuro che ormai avete risolto il problema, ma è davvero nulla a che fare con baseAddresses che è ciò che tutte le schede Bullentin portano a. Ho trovato la risposta allo http://social.msdn.microsoft.com/forums/en-US/wcf/thread/c9f8d99d-89ee-4573-8528-a21b047bad11. Supponendo che si utilizzi IIS 7.x: fare clic con il pulsante destro del mouse sulla directory/applicazione virtuale in IIS, selezionare Gestisci applicazione -> Impostazioni avanzate. Nella sezione "Protocolli abilitati" aggiungi net.tcp, ad esempio http, net.tcp. Questo è necessario anche se hai già aggiunto questo protocollo a livello di sito.

+0

Vedo che è stata impostata la modalità di sicurezza su Nessuno nei binding , che è quello che ho iniziato a usare in un primo momento, tuttavia, per quello che sto facendo ho bisogno di sapere il chiamante autenticato. Normalmente ottengo questo da OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name (http://www.leastprivilege.com/HostingWCFServicesInASPNETTheSurvivalGuide.aspx). Così, invece, ho modificato i binding su * sia * il client che il server su Windows come http://msdn.microsoft.com/en-us/library/ms733089.aspx (Transport Security with Windows Authentication). – Helder

+0

come fare questo in IIS6? Qualche idea? – NLV

+0

Grazie ... Ho guardato questo file di configurazione per circa 2 ore e non riuscivo a capire cosa stesse succedendo ... – SoftwareSavant

1
  1. verificare la porta Servizio di condivisione Net.Tcp viene avviato sulla macchina
  2. Verificare la configurazione dell'attributo netTcpBinding portSharingEnabled è vero. (In WCF4 non è necessario fornire un nome sul elemento vincolante se si desidera che questa specifica vincolante sia quella predefinita per net.tcp)
2

Configura net.tcp vincolante nel vostro sito IIS e set abilitato il protocollo come "http, net.tcp usando le impostazioni avanzate". Dovrebbe funzionare

3

È possibile condividere porte, non è troppo difficile.

Assicurarsi di selezionare i protocolli abilitati in IIS (fare clic con il pulsante destro del mouse sul sito -> Gestisci sito Web -> Impostazioni avanzate) NON UTILIZZARE GLI SPAZI. Se hai "http, net.tcp" invece di "http, net.tcp" non funzionerà, e invece ti darà questo errore esatto.

Maggiori informazioni qui: http://www.weeksofprogramming.com/post/Could-not-find-a-base-address-Check-for-spaces-in-IIS7.aspx

Problemi correlati