c# wcf duplex net.tcp

c# - No se pudo encontrar una dirección base que coincida con el esquema net.tcp



wcf duplex (8)

Debe definir solo la dirección base (no la dirección completa ) para su servicio, y luego el resto en el punto final del servicio. La dirección que tiene con el archivo filetransfer.svc al final no es una dirección base válida (en realidad es una dirección de archivo)

<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 esto, y usando autohospedaje, su servicio estaría disponible en la dirección completa:

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

Como se trata de net.tcp y es autohospedado, no es necesario ningún archivo svc.

ACTUALIZACIÓN: si desea obtener metadatos en su dirección de red net.TCP, deberá exponer un punto final net.Tcp MEX como este dentro de su sección <service> :

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

He movido mi servicio de transferencia de archivos de basicHttpBinding a netTcpBinding porque estoy tratando de configurar un canal en modo dúplex. También comencé mi servicio de intercambio de puertos net.tcp.

Actualmente estoy en desarrollo y soy autohospedado en un cuadro xp hasta que cambiemos la aplicación a un servidor de desarrollo. así que, por ahora, no tengo acceso a IIS.

Después de configurar mi servicio como tal:

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

Y, mi enlace como tal:

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

Aparece el siguiente error cuando hago clic y navego al archivo SVC:

No se pudo encontrar una dirección base que coincida con el esquema net.tcp para el punto final con enlace NetTcpBinding. Los esquemas de direcciones base registradas son [http].

La lectura en línea sugiere que, para solucionar este problema, necesité agregar el enlace net.tcp al enlace de la aplicación en IIS. Pero, ¿qué hago si soy autohospedado y no tengo acceso a IIS? Por cierto, si está leyendo esto y "do" tiene IIS, haga lo siguiente: Haga clic con el botón derecho en el directorio virtual / aplicación en IIS -> Administrar aplicación -> Configuración avanzada. Y, en la parte Protocolos habilitados, agregue net.tcp.

¿Algunas ideas?

ACTUALIZACIÓN: pensé que lo tenía funcionando, pero todavía no está funcionando. Esto es lo que tengo ahora: sigo obteniendo el error "no se pudo encontrar la dirección base que coincide con el esquema net.tcp". He cambiado todas mis direcciones base para reflejar su sugerencia. Esto es lo que tengo ahora:

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

He intentado esto con "net.tcp: // localhost: 2544" y "net.tcp: // localhost: 8001". ¿Debo agregar (permitir) algo en la configuración de mi firewall? ¿Cualquier otra sugerencia?

Aquí está el mexTcpBinding de mi filetransferservice en mi archivo 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>

Todavía no puedo hacer referencia a mi FileTransferServiceClient en mi aplicación web.

Gracias de nuevo.


Después de pasar por una gran cantidad de soluciones, encontré la solución final en este blog . Sin embargo, voy a explicar todo el procedimiento aquí. Debe seguir los pasos a continuación.

Paso 1: (Servicio de activación de procesos de Windows) o soporte de protocolo no http, solo es compatible con las siguientes plataformas: • Windows Vista • Windows 7 • Windows Server 2008

  • Ir a Activar o desactivar las funciones de Windows
  • Vaya a Microsoft .NET Framework 3.5
  • Compruebe la activación HTTP de Windows Communication Foundation
  • Compruebe la activación no HTTP de Windows Communication Foundation

Paso 2: Sitio web de IIS> WCF Host> Administrar aplicación> Configuración avanzada> Protocolos habilitados> Establecer el valor en http, net.tcp

compruebe si su problema se resolvió después de completar el paso2 ... si no, siga el paso siguiente

Paso 3: en una administrator-level Command Prompt window , ejecute el siguiente comando.

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

Reinicie el IIS una vez o podría obtener el Failed to map the path ''/'' excepción de Failed to map the path ''/'' ahora

Su aplicación en la configuración avanzada se verá a continuación ahora


Error (WCF): no se pudo encontrar una dirección base que coincida con el esquema net.tcp para el punto final con enlace NetTcpBinding. Los esquemas de direcciones base registradas son [http].

Paso 1: Tenga en cuenta que WAS (Windows Process Activation Service) o la compatibilidad con el protocolo que no es http, solo es compatible con las siguientes plataformas: • Windows Vista • Windows 7 • Windows Server 2008

  1. Ir a Activar o desactivar las funciones de Windows
  2. Vaya a Microsoft .NET Framework 3.5
  3. Compruebe la activación HTTP de Windows Communication Foundation
  4. Compruebe la activación no HTTP de Windows Communication Foundation

Paso 2: Sitio web de IIS> WCF Host> Gestionar aplicación> Configuración avanzada> Protocolos habilitados> Establecer el valor en HTTP, NET.TCP


Espacio en la entrada "Protocolos habilitados" en IIS => Seleccionar directorio virtual / aplicación => configuración avanzada => Protocolos habilitados. por ejemplo , http, net.tcp . (Espacio entre texto de protocolo

Esto debería ser http, net.tcp (es decir, sin espacio entre el texto del protocolo)


Instale el componente de ventana "Activación no Http" desde el Panel de control -> Programas -> Activar o desactivar ventana -> Funciones -> Agregar funciones -> .net framework . * características -> Activación Wcf -> Activación no Http.


Para futuros lectores.

Asegúrese de no usar IIS-Express.

Este fue mi "gotcha".

Referencia:

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.

Esta es una propiedad en Visual Studio y las propiedades web.csproj (o similares) y la pestaña izquierda "Web". Hay una casilla de verificación llamada "Usar IIS Express". Desmarque eso.

Después de hacer eso, igual tendrá que ir a IIS (7) y "http, net.tcp" para "Protocolos habilitados" (como se describe en otras respuestas aquí)

Además, si obtiene el error específico de la tubería con nombre.

No se pudo encontrar una dirección base que coincida con el esquema net.pipe para el punto final con enlace NetNamedPipeBinding .

Luego debe agregar "net.pipe" a la lista.

Ejemplo:

http, net.tcp, net.pipe

Consulte también a continuación el error específico de la tubería con nombre.

Configurar WCF como Named Pipe alojado en IIS7

TAMBIÉN: compruebe estos servicios de Windows correspondientes (named pipes o tcp o ambos)

(llamado servicio de ventanas de tuberías)

NetPipeActivator Net.Pipe Listener Adapter Receives activation requests over the net.pipe protocol and passes them to the Windows Process Activation Service.

(servicio de windows tcp)

NetTcpActivator Net.Tcp Listener Adapter Receives activation requests over the net.tcp protocol and passes them to the Windows Process Activation Service.


Tuve el mismo problema (Entorno: Win7 / IIS7.5 .NET4) y lo resolví configurando el enlace mediante appcmd.exe, disponible desde el directorio "c: / Windows / System32 / inetsrv"

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

Nota: La configuración de IIS es jerárquica y, en consecuencia, debemos cambiar la configuración al nivel más bajo posible para evitar cambios no deseados / problemas de seguridad en otras aplicaciones.

Los siguientes enlaces pueden ayudar: http://msdn.microsoft.com/en-us/library/ms788757.aspx http://support.microsoft.com/kb/2803161

Espero que esto ayude a Albert


Para Windows 10
Paso 1: vaya a Activar y desactivar las características de Windows> .NET Framework 4.6 Servicios avanzados> Servicios WCF> Activación TCP

Paso 2: Sitio web de IIS> WCF Host> Administrar aplicación> Configuración avanzada> Protocolos habilitados> Establecer el valor en net.tcp, http

Paso 3: abra la consola de comandos con derechos administrativos> escriba iisreset