tutorial publicar instalar wcf iis-7 iis-manager

publicar - Implementación de la aplicación de WCF Tutorial en IIS7: "No se pudo encontrar el tipo"



wcf iis windows 10 (4)

Bueno, parece que conseguí que esto funcione. Todavía no puedo encontrar el elemento "Crear aplicación" en el Administrador de IIS. Esa parte es un poco frustrante, pero me alegro de que parece estar funcionando de todos modos.

Creé el directorio físico IISHostedCalcService bajo wwwroot. Eso estaba creando cierta confusión; significaba que http://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svc casi funcionaba, pero no debería funcionar. Moví IISHostedCalcService fuera de wwwroot y ahora el único lugar para acceder al servicio es http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc .

Luego, accediendo a http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc estaba diciendo que "Esta colección ya contiene una dirección con el esquema http.
Puede haber, como máximo, una dirección por esquema en este error de colección. Resulta que la solución consiste en agregar lo siguiente al archivo web.config, justo debajo de system.serviceModel:

<serviceHostingEnvironment> <baseAddressPrefixFilters> <add prefix="http://test.com.cws1.my-hosting-panel.com"/> </baseAddressPrefixFilters> </serviceHostingEnvironment>

Después de eso, recibí un nuevo error al acceder a http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc : "El nombre del contrato IMetadataExchange no se pudo encontrar en la lista de contratos implementados por el service CalculatorService ". Resulta que la solución es modificar el archivo web.config de la siguiente manera (es decir, agregar la sección de comportamientos y behaviorConfiguration = "SimpleServiceBehavior" en el elemento de servicio):

<configuration> <system.serviceModel> <serviceHostingEnvironment> <baseAddressPrefixFilters> <add prefix="http://test.com.cws1.my-hosting-panel.com"/> </baseAddressPrefixFilters> </serviceHostingEnvironment> <services> <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="SimpleServiceBehavior"> ... </service> </services> <behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> <system.web> <customErrors mode="Off"/> </system.web> </configuration>

Finalmente, pude crear proxies de clientes apuntando svcutil a http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/service.svc?wsdl en el paso 5c del tutorial en http: // msdn .microsoft.com / es-us / library / ms733133.aspx . Sin embargo, cuando ejecuté el cliente, recibí el error "El que llama no fue autenticado por el servicio". La solución a esto fue la más simple: simplemente cambie binding = "wsHttpBinding" a binding = "basicHttpBinding" en el web.config del servicio y el web.config del cliente (o vuelva a ejecutar svcutil después de cambiar el web.config del servicio).

El web.config terminó luciendo así:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <serviceHostingEnvironment> <baseAddressPrefixFilters> <add prefix="http://test.com.cws1.my-hosting-panel.com"/> </baseAddressPrefixFilters> </serviceHostingEnvironment> <services> <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="SimpleServiceBehavior"> <!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc --> <endpoint address="" binding="basicHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator" /> <!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex --> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> <behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" /> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> <system.web> <customErrors mode="Off"/> </system.web> </configuration>

He intentado seguir este tutorial para implementar una muestra de WCF en IIS. No puedo conseguir que funcione. Este es un sitio alojado, pero tengo acceso de Administrador de IIS al servidor. Sin embargo, en el paso 2 del tutorial, no puedo "crear una nueva aplicación IIS que se encuentre físicamente en este directorio de aplicaciones". Parece que no puedo encontrar un elemento de menú, elemento de menú contextual o qué no para crear una nueva aplicación. He estado haciendo clic con el botón secundario en todas partes como loco y todavía no puedo descubrir cómo crear una nueva aplicación. Supongo que ese es probablemente el problema raíz, pero probé algunas otras cosas (que se describen a continuación) en caso de que ese no sea realmente el problema. Aquí hay una imagen de lo que veo en el Administrador de IIS, en caso de que mis palabras no le hagan justicia:

Sin agregar aplicación aquí http://www.freeimagehosting.net/uploads/d6edbaaf3c.png

Esto se "implementa" en http://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svc . El error dice:

The type ''Microsoft.ServiceModel.Samples.CalculatorService'', provided as the Service attribute value in the ServiceHost directive, or provided in the configuration element system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.

También traté de crear un directorio virtual (IISHostedCalc) en dotnetpanel que apunta a IISHostedCalcService. Cuando navego a http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc , aparece un error diferente:

This collection already contains an address with scheme http. There can be at most one address per scheme in this collection.

Curiosamente, si hago clic en Ver aplicaciones, parece que el directorio virtual es una aplicación (ver imagen a continuación) ... aunque, según el mensaje de error anterior, no funciona.

¿Es esta una aplicación o no? http://www.freeimagehosting.net/uploads/f3230be046.png

Según el tutorial, no hubo compilación involucrada; Acabo de dejar caer los archivos en el servidor como sigue dentro de la carpeta IISHostedCalcService:

service.svc Web.config <dir: App_Code> Service.cs

service.svc contiene:

<%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>

(Intenté con comillas alrededor del atributo c #, ya que parece un poco extraño sin comillas, pero no hizo ninguna diferencia)

Web.config contiene:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service name="Microsoft.ServiceModel.Samples.CalculatorService"> <!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc --> <endpoint address="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator" /> <!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex --> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> </system.serviceModel> <system.web> <customErrors mode="Off"/> </system.web> </configuration>

Service.cs contiene:

using System; using System.ServiceModel; namespace Microsoft.ServiceModel.Samples { [ServiceContract] public interface ICalculator { [OperationContract] double Add(double n1, double n2); [OperationContract] double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2); } public class CalculatorService : ICalculator { public double Add(double n1, double n2) { return n1 + n2; } public double Subtract(double n1, double n2) { return n1 - n2; } public double Multiply(double n1, double n2) { return n1 * n2; } public double Divide(double n1, double n2) { return n1 / n2; } } }


Para crear una nueva aplicación, haga clic derecho en el nodo Sitio web predeterminado. En el menú contextual, seleccione Agregar aplicación.


Tuve el mismo error y, para mí, el problema era que me faltaban ensamblajes en el servidor que el servicio necesitaba para compilar.

Todo lo que se describe aquí no fue necesario para mí.

Para saber cuál es su error, puede intentar mover los archivos service.svc y service.svc.cs al directorio App_Code. De esta forma obtendrás un mensaje de error mejor relacionado con el error real que tienes.

En mi caso, el espacio de nombres que faltaba porque olvidé implementar algunos ensambles. Cargué los ensamblados que faltaban, ejecuté el servicio correctamente y luego volví a mover los archivos de servicios a los que pertenecían.


Tuve este problema

  1. Mantuve archivos publicados bajo wwwroot
  2. Haga clic en Examinar en el archivo .svc
  3. Esta lanzando la misma excepción

Resolución

  1. Creé un directorio virtual para el mismo
  2. Intenta buscar en el archivo .svc.

Trabajando...