web-dev-qa-db-fra.com

Impossible de trouver une adresse de base qui correspond au schéma net.tcp

J'ai déplacé mon service de transfert de fichiers de basicHttpBinding à netTcpBinding alors que j'essaie de configurer un canal en mode duplex. J'ai également démarré mon service de partage de port net.tcp.

Je suis actuellement en développement et héberge moi-même sur une boîte xp jusqu'à ce que nous déplacions l'application sur un serveur de développement. donc, pour l'instant, je n'ai pas accès à IIS.

Après avoir configuré mon service comme tel:

<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>

Et, ma liaison en tant que telle:

<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>

J'obtiens l'erreur suivante lorsque je suis à droite et que je navigue vers le fichier SVC:

Impossible de trouver une adresse de base qui correspond au schéma net.tcp pour le point de terminaison avec la liaison NetTcpBinding. Les schémas d'adresses de base enregistrés sont [http].

La lecture en ligne suggère que, pour résoudre ce problème, j'avais besoin d'ajouter la liaison net.tcp à la liaison de l'application dans IIS. Mais que dois-je faire si j'héberge moi-même et que je n'ai pas accès à IIS ?? Soit dit en passant, si vous lisez ceci et que "avez" IIS, procédez comme suit: Cliquez avec le bouton droit sur le répertoire/l'application virtuelle dans IIS -> Gérer l'application -> Paramètres avancés. Et, dans la partie Protocoles activés, ajoutez net.tcp.

Des idées?


MISE À JOUR: Je pensais que je l'avais fait fonctionner mais ça ne fonctionne toujours pas. Voici ce que j'ai maintenant: J'obtiens toujours l'erreur "n'a pas pu trouver l'adresse de base qui correspond au schéma net.tcp". J'ai changé toutes mes adresses de base pour refléter votre suggestion. Voici ce que j'ai maintenant:

<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>

J'ai essayé ceci avec les deux "net.tcp: // localhost: 2544" et "net.tcp: // localhost: 8001". Dois-je ajouter (autoriser) quelque chose dans mes paramètres de pare-feu? D'autres suggestions?

Voici mexTcpBinding de mon filetransferservice dans mon fichier 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>

Je ne parviens toujours pas à référencer mon FileTransferServiceClient dans mon application Web.

Merci encore.

30
Peter

Vous devez définir uniquement adresse de base (pas l'adresse entière) pour votre service, puis le reste dans le point de terminaison de service. L'adresse que vous avez avec le filetransfer.svc le fichier à la fin n'est pas une adresse de base valide (c'est vraiment une adresse de fichier)

<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>

Avec cela, et en utilisant l'auto-hébergement, votre service serait disponible à l'adresse complète:

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

Comme il s'agit de net.tcp et que vous êtes auto-hébergé, il n'y a aucun besoin de fichier svc.

PDATE: si vous voulez pouvoir obtenir des métadonnées sur votre adresse de base net.TCP, vous devrez exposer un point de terminaison net.Tcp MEX comme celui-ci dans votre <service> section:

        <endpoint name="NetTcpMEX"
                  address="netTcpMex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />
24
marc_s

Erreur (WCF): Impossible de trouver une adresse de base qui correspond au schéma net.tcp pour le point de terminaison avec la liaison NetTcpBinding. Les schémas d'adresses de base enregistrés sont [http].

Étape 1: la prise en charge du protocole WAS (Windows Process Activation Service) ou non http n'est prise en charge que par les plates-formes suivantes: • Windows Vista • Windows 7 • Windows Server 2008

  1. Accédez à Activer ou désactiver les fonctionnalités Windows
  2. Accédez à Microsoft .NET Framework 3.5
  3. Vérifier l'activation HTTP de Windows Communication Foundation
  4. Vérifier l'activation non HTTP de Windows Communication Foundation

Étape 2: IIS> Site Web de l'hôte WCF> Gérer l'application> Paramètres avancés> Protocoles activés> Définissez la valeur sur HTTP, NET.TCP

39

Espace dans l'entrée "Protocoles activés" dans IIS => Sélectionnez le répertoire virtuel/l'application => paramètres avancés => Protocoles activés. Par exemple http, net.tcp. (Espace entre le texte du protocole

Cela devrait être http, net.tcp (c.-à-d. Pas d'espace entre le texte du protocole)

16
dotnetmem

Pour les futurs lecteurs.

Assurez-vous que vous n'utilisez pas IIS-Express.

C'était mon "gotcha".

Référence:

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.

Il s'agit d'une propriété sous Visual Studio et les propriétés web.csproj (ou similaire) et l'onglet gauche "Web". Il y a une case à cocher appelée "Utiliser IIS Express". Décochez-la.

Après cela, vous devrez toujours aller à IIS (7) et "http, net.tcp" pour "Enabled Protocols" (comme décrit dans d'autres réponses ici)

En outre, si vous obtenez l'erreur spécifique au canal nommé.

Impossible de trouver une adresse de base qui correspond au schéma net.pipe pour le point de terminaison avec liaison NetNamedPipeBinding.

Ensuite, vous devez ajouter "net.pipe" à la liste.

Exemple:

http, net.tcp, net.pipe

Voir également ci-dessous pour l'erreur spécifique au canal nommé.

Configurer WCF en tant que canal nommé hébergé sur IIS7

AUSSI: Vérifiez ces services Windows correspondants (nommés tubes ou TCP ou les deux)

(service de fenêtres nommé pipes)

NetPipeActivator

Net.Pipe Listener Adapter

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

(service Windows TCP)

NetTcpActivator

Net.Tcp Listener Adapter

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

Après avoir traversé beaucoup de solutions .. j'ai trouvé la solution finale dans ce blog .. mais je vais expliquer toute la procédure ici .. vous devez suivre les étapes ci-dessous ..

Étape 1: (Service d'activation de processus Windows) ou la prise en charge du protocole non http, n'est pris en charge que par les plates-formes suivantes: • Windows Vista • Windows 7 • Windows Server 2008

  • Accédez à Activer ou désactiver les fonctionnalités Windows
  • Accédez à Microsoft .NET Framework 3.5
  • Vérifier l'activation HTTP de Windows Communication Foundation
  • Vérifier l'activation non HTTP de Windows Communication Foundation

Étape 2: IIS> Site Web de l'hôte WCF> Gérer l'application> Paramètres avancés> Protocoles activés> Définissez la valeur sur http, net.tcp

vérifiez si votre problème est résolu après l'achèvement de l'étape 2, sinon suivez l'étape ci-dessous

Étape 3: Dans un administrator-level Command Prompt window, exécutez la commande suivante.

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

Redémarrez IIS une fois ou vous pourriez obtenir Failed to map the path '/' exception maintenant

Votre application à l'avance ressemblera à ci-dessous maintenant

enter image description here

6
Moumit

Veuillez installer le composant de fenêtre "Activation non-Http" à partir du Panneau de configuration -> Programmes -> Activer ou désactiver la fenêtre -> Fonctionnalités -> Ajouter des fonctionnalités -> Framework .net . * fonctionnalités -> Activation Wcf - > Activation non Http.

4
Mukul Narad

Pour Windows 1
Étape 1: accédez à Activer et désactiver les fonctionnalités Windows> .Net Framework 4.6 Services avancés> Services WCF> TCP Activation

Étape 2: IIS> Site Web de l'hôte WCF> Gérer l'application> Paramètres avancés> Protocoles activés> Définissez la valeur sur net.tcp, http

Étape 3: ouvrir la console de commande avec des droits d'administration> tapez iisreset

3
Benj

J'ai eu le même problème (Environnement: Win7/IIS7.5 .NET4) et je l'ai résolu en configurant la liaison via appcmd.exe, disponible dans le répertoire "c:\Windows\System32\inetsrv"

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

note: IIS est hiérarchique et, par conséquent, nous devons modifier la configuration au niveau le plus bas possible pour éviter les changements indésirables/problèmes de sécurité sur d'autres applications.

Les liens suivants peuvent vous aider: http://msdn.Microsoft.com/en-us/library/ms788757.aspxhttp://support.Microsoft.com/kb/2803161

J'espère que cette aide Albert

1
Albert

J'ai eu la même erreur sur Windows 7 et je l'ai corrigée en ouvrant IIS, en faisant un clic droit sur le site Web qui contient votre application et en sélectionnant "Modifier les liaisons ...". J'ai ajouté ici la liaison net.tcp et le problème a été résolu.

Site Bindings PrintScreen

0
Paul Cenan