2009-11-24 5 views
25

Ho spostato il servizio di trasferimento file da basicHttpBinding a netTcpBinding mentre sto tentando di impostare un canale in modalità duplex. Ho anche avviato il mio servizio di condivisione porta net.tcp .Impossibile trovare un indirizzo di base corrispondente allo schema net.tcp

Attualmente sono in dev e sto self hosting su una scatola xp finché non spostiamo l'app su un server di sviluppo. quindi, per ora, non ho accesso a IIS.

Dopo aver configurato il mio servizio in quanto tale:

<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService"> 
     <endpoint name="MyFileTransferEP" 
        address = "" 
        binding = "netTcpBinding" 
        bindingConfiguration="MyFileTransferNetTcpEP" 
        behaviorConfiguration="NetTcpEPBehavior" 
        contract="API.FileTransfer.IFileTransferService" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost:8001/project/filetransfer.svc" /> 
      </baseAddresses> 
     </host> 
</service> 

E, il mio vincolante in quanto tali:

<netTcpBinding> 
     <binding name="MyFileTransferNetTcpEP" 
       hostNameComparisonMode="StrongWildcard" 
       closeTimeout="00:01:00" 
       openTimeout="00:01:00" 
       receiveTimeout="00:10:00" 
       sendTimeout="00:01:00" 
       maxReceivedMessageSize="2147483647" 
       transferMode="Streamed" 
       portSharingEnabled="true"> 
      <security mode="None"> 
      <transport clientCredentialType="None" /> 
      <message clientCredentialType="None" /> 
      </security> 
     </binding> 
</netTcpBinding> 

ottengo l'errore folloing quando destra e browser per il file SVC:

Impossibile trovare un indirizzo di base che lo schema corrisponda a net.tcp per l'endpoint th binding NetTcpBinding. Gli schemi di indirizzi di base registrati sono [http].

La lettura on-line suggerisce che, al fine di risolvere questo problema, ho bisogno di aggiungere il legame con l'associazione dell'applicazione in IIS net.tcp. Ma cosa faccio se sono auto-hosting e non ho accesso a IIS ?? A proposito, se stai leggendo questo e "fai" avere IIS, fai quanto segue: Fai clic con il pulsante destro del mouse sulla directory/applicazione virtuale in IIS -> Gestisci applicazione -> Impostazioni avanzate. E, nella parte dei protocolli abilitati, aggiungi net.tcp.

Qualche idea?


AGGIORNAMENTO: Pensavo di averlo funzionato ma non funziona ancora. Ecco cosa ho ora: Sto ancora ricevendo l'errore "Impossibile trovare l'indirizzo di base che corrisponde allo schema net.tcp". Ho cambiato tutti i miei indirizzi di base per riflettere il tuo suggerimento. Ecco quello che ho adesso:

<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService"> 
      <endpoint name="MyJSONFileTransferEP" 
         address="json" 
         binding="webHttpBinding" 
         bindingConfiguration="jsonWeb" 
         behaviorConfiguration="WebHttpEPBehavior" 
         contract="API.FileTransfer.IJSONFileTransferService" /> 
      <endpoint name="MyPOXFileTransferEP" 
         address="pox" 
         behaviorConfiguration="WebHttpEPBehavior" 
         binding="webHttpBinding" 
         bindingConfiguration="poxWeb" 
         contract="API.FileTransfer.IPOXFileTransferService" /> 
      <endpoint name="MySOAPFileTransferEP" 
         address="filetransfer" 
         binding="netTcpBinding" 
         bindingConfiguration="netTcpWeb" 
         behaviorConfiguration="NetTcpEPBehavior" 
         contract="API.FileTransfer.ISOAPFileTransferService" /> 
      <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/> 
      <host> 
       <baseAddresses> 
       <add baseAddress="net.tcp://localhost:2544/filetransfer/" /> 
       </baseAddresses> 
      </host> 
      </service> 

Ho provato questo con entrambi "net.tcp: // localhost: 2544" & "net.tcp: // localhost: 8001". Devo aggiungere (consentire) qualcosa nelle impostazioni del mio firewall? Qualche altro suggerimento?

Ecco mexTcpBinding di mio filetransferservice nel mio file app.config:

<endpoint address="net.tcp://localhost:2544/filetransfer/mex" 
     binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" 
     name="filetransfermex"> 
     <identity> 
      <certificateReference storeName="My" storeLocation="LocalMachine" 
      x509FindType="FindBySubjectDistinguishedName" /> 
     </identity> 
     </endpoint> 

Sono ancora in grado di fare riferimento mia FileTransferServiceClient nella mia web app.

Grazie ancora.

+0

bene, con baseAddress = "net.tcp: // localhost: 2544/filetransfer /" e address = "filetransfer" sul tuo endpoint, l'URL completo sarà " net.tcp: // localhost: 2544/filetransfer/filetransfer "- hai provato a connetterti ?? –

+0

Grazie - stupida sorveglianza. Di solito avevo "sapone" e l'ho cambiato. Ho passato l'ora passata a esaminare i miei file App.config e Web.config con un pettine a denti fini e alla fine l'ho compilato. Quando aggiungo il riferimento al servizio, sono in grado di fare riferimento a ../trade/mex e .../auth/mex ma il mio net.tcp .../filetransfer/mex non viene mai visualizzato come opzione. Quindi, tutto si compila bene tranne che non riesco ad accedere a FileTransferServiceClient dalla mia app Web. Qualche idea del perché .../filetransfer/mex non si presenta? Sto usando mexTcpBinding e ho postato quello che sembra nella mia domanda. Grazie ancora. –

+0

leggi @marc_s. Grazie ancora. –

risposta

23

è necessario definire solo l'indirizzo di base (non l'indirizzo intera) per il vostro servizio, e poi il resto del endpoint del servizio.L'indirizzo che hai con il file filetransfer.svc alla fine non è un indirizzo di base valida (si tratta di un indirizzo di file, in realtà)

<service behaviorConfiguration="transferServiceBehavior" 
     name="API.FileTransfer.FileTransferService"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost:8001/project/" /> 
     </baseAddresses> 
    </host> 
    <endpoint name="MyFileTransferEP" 
       address = "filetransfer" 
       binding = "netTcpBinding" 
       bindingConfiguration="MyFileTransferNetTcpEP" 
       behaviorConfiguration="NetTcpEPBehavior" 
       contract="API.FileTransfer.IFileTransferService" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
</service> 

Con questo, e l'utilizzo di self-hosting, il servizio sarà disponibile presso l'indirizzo completo :

net.tcp://localhost:8001/project/filetransfer 

Poiché questo è net.tcp e siete self-hosting, non c'è bisogno di un file SVC a tutti.

UPDATE: se si vuole essere in grado di ottenere i metadati sul vostro indirizzo di base net.tcp, è necessario esporre un endpoint net.tcp MEX come questo all'interno del vostro <service> sezione:

 <endpoint name="NetTcpMEX" 
        address="netTcpMex" 
        binding="mexTcpBinding" 
        contract="IMetadataExchange" /> 
+0

Sembra che sto ancora ricevendo questo errore. Ho provato il tuo suggerimento ma non sembrava farlo. Ho aggiornato la mia domanda - altri suggerimenti? Grazie ancora. –

+0

Ehi, grazie ancora. Sono in grado di compilare il mio codice ora ma non riesco a aggiungere il mio servizio net.tcp nell'interfaccia di riferimento dei servizi. Inoltre, ho per il servizio. Quando provo a navigare nel mio url: "net.tcp: // localhost: 2544/filetransfer/soap" nel browser, mi dice che "firefox non sa come aprire questo indirizzo". Quando provo a sfogliare dal file filetransfer.svc (so che non è necessario) ho il familiare: "Impossibile trovare un indirizzo di base che corrisponda allo schema net.tcp per l'endpoint con associazione NetTcpBinding." –

+0

OK, questo è risolto (e grazie per la risposta). Ho un problema correlato ma lo riporterò. Grazie ancora. –

4

Installare il componente della finestra "Attivazione non Http" dal Pannello di controllo -> Programmi -> Attiva o disattiva la finestra -> Funzionalità -> Aggiungi funzionalità -> .net framework . Funzioni * -> Attivazione Wcf -> Attivazione non Http.

33

Error (WCF): Impossibile trovare un indirizzo di base che corrisponde schema net.tcp per l'endpoint con il legame NetTcpBinding. Gli schemi di indirizzi di base registrati sono [http].

Fase 1: nota era (Windows Process Activation Service) o il supporto non-protocollo HTTP, è supportato solo dai seguenti piattaforme: • Windows Vista • Windows 7 • Windows Server 2008

  1. Vai a funzionalità di Windows attiva o disattiva
  2. Vai a Microsoft .NET Framework 3.5
  3. Controllare Windows Communication Foundation HTTP Attivazione
  4. Controllare Windows Communication Foundation non-HTTP Attivazione

Fase 2: IIS> Sito Web WCF Host> Gestisci applicazioni> Impostazioni avanzate> Protocolli abilitati> Imposta il valore di HTTP, net.tcp

+1

Grazie Amir. Il secondo passo è stato quello che mi ha aiutato. – Dev

1

ho avuto lo stesso problema (Ambiente: Win7/IIS7.5 .NET4) e l'ho risolto configurando l'associazione tramite appcmd.exe, disponibile nella directory "c: \ Windows \ System32 \ inetsrv"

"set appcmd.exe pp "WebsiteName/applicationName" /enabledProtocols:http,net.tcp "

nota: la configurazione di IIS è gerarchica e di conseguenza dovremmo modificare la configurazione al livello più basso possibile per evitare modifiche indesiderate/problemi di sicurezza su altre applicazioni.

I seguenti link possono aiutare: http://msdn.microsoft.com/en-us/library/ms788757.aspx http://support.microsoft.com/kb/2803161

Spero che questo aiuto Albert

11

Spazio in entrata "Protocolli abilitati" in IIS => Seleziona directory/applicazione virtuale => impostazioni avanzate => Abilitato protocolli. per esempio. http, net.tcp.(Spazio tra il testo del protocollo

Questo dovrebbe essere http, net.tcp (es. Senza spazio tra il testo del protocollo)

5

Per i lettori futuri.

Assicurati di non utilizzando IIS- . esprimere

Questo era il mio "Beccato"

Riferimento:.

http://www.iis.net/learn/extensions/introduction-to-iis-express/iis-express-faq

 Q: Does IIS Express support non-HTTP protocols such as net.tcp or MSMQ? 
     A: No. IIS Express only supports HTTP and HTTPS as its protocol. 

Questa è una struttura in Visual Studio e il web.csproj (o simili) Proprietà e la scheda-sinistra "Web". C'è una casella chiamata "Usa IIS Express". Deselezionalo.

Dopo aver fatto questo, si dovrà ancora andare a IIS (7) e "http, net.tcp" per i "Protocolli abilitati" (come descritto in altre risposte qui)

Inoltre, se si sta ottenendo l'errore specifico della pipa denominata.

Impossibile trovare un indirizzo di base che corrisponde schema net.pipe per l'endpoint con rilegatura NetNamedPipeBinding.

Quindi è necessario aggiungere "net.pipe" all'elenco.

Esempio:

http, net.tcp, net.pipe

vedere anche il seguito per l'errore specifico named pipe.

Configure WCF as Named Pipe hosted on IIS7

ANCHE: controllare questi servizi corrispondenti finestre (named pipe o TCP o entrambi)

(named pipe servizio di Windows)

NetPipeActivator 

Net.Pipe Listener Adapter 

Receives activation requests over the net.pipe protocol and passes them to the Windows Process Activation Service. 

(servizio di Windows TCP)

NetTcpActivator 

Net.Tcp Listener Adapter 

Receives activation requests over the net.tcp protocol and passes them to the Windows Process Activation Service. 
4

Dopo aver attraversato un sacco di soluzione .. io foun d la soluzione finale in questo blog .. comunque ho intenzione di spiegare l'intera procedura qui .. è necessario seguire le istruzioni riportate di seguito ..

Step1: (servizio Attivazione processo Windows) o non supporto del protocollo HTTP, è supportato solo da seguenti piattaforme: • Windows Vista • Windows 7 • Windows Server 2008

  • Vai per attivare le funzionalità di Windows on o off
  • Vai a Microsoft .NET Framework 3.5
  • Vedi Windows Communication Foundation HTTP Attivazione
  • Controllare Windows Communication Foundation non-HTTP Attivazione

Fase 2: IIS> WCF Host Sito Web> Gestisci applicazioni> Impostazioni avanzate> Protocolli abilitati> Set il valore di http, net.tcp

di controllo se il vostro problema risolto dopo Step2 completion..if non quindi seguire passo sotto

Fase 3: In un administrator-level Command Prompt window, eseguire il seguente comando.

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='8082:*'] 

Riavviare l'IIS volta o si potrebbe ottenere eccezione ora

L'applicazione in anticipo impostazione appare come qui sotto ora

enter image description here

0

Per Windows 10
Passaggio 1: Vai a Attivare le funzionalità di Windows su e di f> Net Framework 4.6 Advanced Services> Servizi> WCF attivazione TCP

Fase 2: IIS> WCF Sito Web Host> Gestisci applicazioni> Impostazioni avanzate> Protocolli abilitati> impostare il valore a net.tcp, HTTP

Passaggio 3: Apri console di comando con diritti amministrativi> digita iisreset