2009-11-24 3 views
25

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 commencé mon service de partage de port net.tcp .Impossible de trouver une adresse de base qui correspond au système net.tcp

Je suis actuellement en développement et je m'auto-héberge sur un boîtier 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 en tant que 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 fixation en tant que tel:

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

Je reçois l'erreur de folloing quand je droit et le navigateur du fichier SVC:

Impossible de trouver une adresse de base correspond au système net.tcp pour le point d'extrémité wi la liaison NetTcpBinding. Les schémas d'adresse de base enregistrés sont [http].

La ligne de lecture suggère que, pour résoudre ce problème, je besoin d'ajouter le net.tcp lier à la liaison de l'application dans IIS. Mais, qu'est-ce que je fais si je suis l'auto-hébergement et n'ai pas accès à IIS ?? Par ailleurs, si vous lisez ceci et que "faites" avoir IIS, procédez comme suit: Cliquez avec le bouton droit sur le répertoire virtuel/application 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 ça fonctionnait mais ça ne marche toujours pas. Voici ce que j'ai maintenant: Je reçois toujours l'erreur "impossible de trouver l'adresse de base qui correspond à scheme 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é avec les deux "net.tcp: // localhost: 2544" & "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 suis toujours incapable de faire référence à mon FileTransferServiceClient dans mon application web.

Merci encore.

+0

bien, avec baseAddress = "net.tcp: // localhost: 2544/filetransfer /" et address = "filetransfer" sur votre endpoint, votre URL complète sera " net.tcp: // localhost: 2544/filetransfer/filetransfer "- avez-vous essayé de vous connecter là? –

+0

Merci - un oubli stupide. J'avais normalement "savon" là et l'ai changé en arrière. J'ai passé l'heure passée à parcourir mes fichiers App.config et Web.config avec un peigne fin et je l'ai finalement compilé. Quand je "ajoute une référence de service", je peux référencer ../trade/mex et .../auth/mex mais mon net.tcp .../filetransfer/mex ne se présente jamais comme une option. Donc, tout compile bien, sauf que je ne peux pas accéder au FileTransferServiceClient à partir de mon application Web. Une idée de pourquoi .../filetransfer/mex ne se présente pas? J'utilise mexTcpBinding et j'ai posté à quoi il ressemble dans ma question. Merci encore. –

+0

lire @marc_s. Merci encore. –

Répondre

23

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

<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 sera disponible à l'adresse complète :

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

Puisque c'est net.tcp et vous êtes auto-hébergement, il n'y a pas besoin d'un fichier svc du tout.

MISE À JOUR: si vous voulez être en mesure d'obtenir des métadonnées sur votre adresse de base Net.TCP, vous aurez besoin d'exposer un point final Net.TCP MEX comme celui-ci dans votre section <service>:

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

On dirait que je reçois toujours cette erreur. J'ai essayé votre suggestion mais cela n'a pas l'air de le faire. J'ai mis à jour ma question - d'autres suggestions? Merci encore. –

+0

Hey, merci encore. Je suis capable de compiler mon code maintenant, mais je n'arrive pas à ajouter mon service net.tcp dans l'interface utilisateur des références de service. En outre, j'ai pour le service. Lorsque j'essaie de naviguer vers mon URL: "net.tcp: // localhost: 2544/filetransfer/soap" dans le navigateur, il me dit que "firefox ne sait pas comment ouvrir cette adresse". Lorsque j'essaie de naviguer à partir du fichier filetransfer.svc (je sais que ce n'est pas nécessaire), je reçois le familier: "Impossible de trouver une adresse de base qui correspond au schéma net.tcp pour le point de terminaison avec liaison NetTcpBinding." –

+0

OK, ceci est résolu (et merci pour votre réponse). J'ai un problème connexe mais je vais le republier. Merci encore. –

4

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

33

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

Étape 1: Remarque ÉTAIT (Windows processus d'activation de service) ou le support du protocole non http, est pris en charge uniquement par les plates-formes suivantes: • Windows Vista • Windows 7 • Windows Server 2008

  1. allez à Windows activer ou désactiver des fonctionnalités
  2. aller à Microsoft .NET Framework 3.5
  3. Vérifiez Windows Communication Foundation HTTP activation
  4. Vérifiez Windows Communication Foundation Activation non-HTTP

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

+1

Merci Amir. La deuxième étape était celle qui m'a aidé. – Dev

1

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

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

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

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

Hope this aide Albert

11

espace dans l'entrée "Protocoles activés" dans IIS => Sélectionner le répertoire/application virtuelle => Paramètres avancés => Activé Protocoles par exemple. http, net.tcp.(Espace entre le texte du protocole

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

5

Pour les futurs lecteurs.

Assurez-vous pas en utilisant IIS- . Exprimez

Ce fut 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. 

Ceci est une propriété sous Visual Studio et le web.csproj (ou similaire) Propriétés et le "Web" onglet gauche. Il y a une case à cocher appelée "Utiliser IIS Express". Décochez ça.

Une fois que vous faites cela, vous aurez toujours aller à IIS (7) et « http, net.tcp » pour « Protocoles activés » (comme décrit dans d'autres réponses ici)

En outre, si vous 'obtient l'erreur spécifique de tuyau nommé.

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

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

Exemple:

http, net.tcp, net.pipe

Voir aussi ci-dessous pour le canal nommé erreur spécifique.

Configure WCF as Named Pipe hosted on IIS7

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

(nommé fenêtres tuyaux de service)

NetPipeActivator 

Net.Pipe Listener Adapter 

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

(fenêtres tcp Service)

NetTcpActivator 

Net.Tcp Listener Adapter 

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

Après avoir traversé beaucoup de solution .. i foun d la solution finale dans ce blog .. Cependant, je vais expliquer toute la procédure ici .. vous devez suivre les étapes ci-dessous ..

Etape 1: (processus Windows Activation du service) ou non le support du protocole HTTP, est pris en charge par les plates-formes suivantes: • Windows Vista • Windows 7 • Windows Server 2008

  • Allez à Windows activer ou désactiver des fonctionnalités
  • Aller à Microsoft .NET Framework 3.5
  • Vérifiez Windows Communication Foundation HTTP Activation
  • Vérifiez Windows Communication Foundation Activation non-HTTP

Étape 2: IIS> WCF Site Web Host> Gérer l'application> Paramètres avancés> Protocoles Activé> la valeur à http, net.tcp

vérifier si votre problème est résolu après l'étape 2 completion..if ne suivez pas ci-dessous

Etape 3: Dans un administrator-level Command Prompt window, exécuter la commande suivante.

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

Redémarrez l'IIS une fois ou que vous pourriez obtenir exception maintenant

Votre demande indiquant à l'avance semblera comme ci-dessous maintenant

enter image description here

0

Pour Windows 10
Étape 1: Aller à activer les fonctionnalités de Windows sur et de f> Net Framework 4.6 Advanced Services> Services> WCF TCP Activation

Etape 2: IIS> WCF Site Web Host> Gérer l'application> Paramètres avancés> Protocoles Activé> la valeur à Net.TCP, http

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

Questions connexes