Problema de hospedaje de ASP.NET de sesión WCF

Estoy creando un servicio WCF que habla con una aplicación existente, y esta aplicación requiere acceso a sesiones ASP.NET: la capacidad de ver sesiones es un requisito que no puedo evitar.

Construí el proyecto WCF y tengo la siguiente configuración en App.config:

 <system.serviceModel>
     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

También incluí una interfaz y una implementación del servicio en el archivo. Delante de la implementación tengo:

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in both code and config file together.
[AspNetCompatibilityRequirements(RequirementsMode =
    AspNetCompatibilityRequirementsMode.Required)]
public class SearchService : ISearchServiceInterface
{

Este es un servicio REST, por lo que mi interfaz comienza así:

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface ISearchServiceInterface
{

    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
    string LoginToWebService_POST(Altec.Framework.Authorization auth);

    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
    string GetTopLevelFolderName_POST();

El servicio en sí está alojado en otra aplicación web, en un archivo SearchService.svc que tiene esto:

<%@ServiceHost language=c# Debug="true" Service="Altec.UI.Web.SearchService.SearchService" %>

y agregué esto al web.config de la aplicación de alojamiento:

  <system.serviceModel>
      <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

Creo que hice todos los pasos correctos y, sin embargo, cuando intento ejecutar la aplicación web, aparece este error:

"

System.InvalidOperationException: este servicio requiere compatibilidad con ASP.NET y debe estar alojado en IIS. Aloje el servicio en IIS con la compatibilidad con ASP.NET activada en web.config o establezca la propiedad AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode en un valor que no sea Obligatorio. en System.ServiceModel.Activation.AspNetEnvironment.ValidateCompatibilityRequirements(AspNetCompatibilityRequirementsMode compatibleMode) en System.ServiceModel.Activation.AspNetCompatibilityRequirementsAttribute.System.ServiceModel.Description.IServiceBehavior.Validate(ServiceDescription descripción, ServiceHostBase serviceHostBase) en System.ServiceModel.Description.DispatcherBuilder.ValidateDescription( ServiceDescription descripción, ServiceHostBase serviceHost) en System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription descripción, ServiceHostBase serviceHost) en System.ServiceModel.ServiceHostBase.InitializeRuntime() en System.ServiceModel.ServiceHostBase.OnBeginOpen() en System.ServiceModel.ServiceHostBase. OnOpen(TimeSpan timeout) en System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) en System.ServiceModel.Channels.CommunicationObject.Open() en Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)"

    <?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <appSettings>
    <!-- database connection details -->

  </appSettings>
  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true">
      <assemblies>
        <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>

    <pages>
      <controls>
        <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit"/>
      </controls>
    </pages>
  </system.web>
  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="1048576"/>
      </webServices>
    </scripting>
  </system.web.extensions>
  <location path="Scripts">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="Content">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="jQuery-UI-layout.css">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
      <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
      <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ISearchServiceInterface" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
            <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://vmwarren27dev.altec-wa.com/Altec.UI.Web.Portal/SearchService.svc/WCPService" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ISearchServiceInterface" contract="SearchService.ISearchServiceInterface" name="WSHttpBinding_ISearchServiceInterface">
        <identity>
          <dns value="localhost"/>
        </identity>
      </endpoint>
    </client>
    <services>
      <service name="Altec.UI.Web.SearchService.SearchService">
        <endpoint address="RESTService" binding="webHttpBinding" behaviorConfiguration="json" contract="Altec.UI.Web.SearchService.ISearchServiceInterface">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <endpoint address="WCPService" binding="wsHttpBinding" contract="Altec.UI.Web.SearchService.ISearchServiceInterface">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- 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="True"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="json">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="AjaxControlToolkit" publicKeyToken="28f01b0e84b6d53e" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-4.1.51116.0" newVersion="4.1.51116.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

preguntado el 13 de marzo de 12 a las 17:03

1 Respuestas

Mencionó App.config: parece que su servicio es una biblioteca de servicios WCF, que está alojando en IIS. Si ese es el caso, debe copiar la sección de configuración de WCF de App.config a Web.config de la aplicación IIS que hospeda su servicio.

Las bibliotecas no usan archivos de configuración, usan el archivo de configuración de la aplicación que llama.

respondido 13 mar '12, 17:03

Correcto, lo hice: lo editaré para agregar el web.config completo arriba. - Warren J. Thompson

¿El web.config que actualizó es el de la aplicación con el archivo de servicio o la aplicación que llama al servicio? - Tim

La aplicación que llama al servicio. - Warren J. Thompson

Coloque la configuración en Web.config de la aplicación IIS que tiene el archivo de servicio; es esa aplicación (bajo IIS) la que necesitará que AspNetCompatabilityEnabled se establezca en True. - Tim

Hice. Sigue siendo el mismo problema. - Warren J. Thompson

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.