Для контракта требуется Session, но Binding «WSHttpBinding» не поддерживает его или неправильно настроен для его поддержки - PullRequest
2 голосов
/ 27 октября 2011

Я указал контракт на обслуживание, требующий сеанса.

[ServiceContract(SessionMode = SessionMode.Required)] 
public interface ITicketSales
{
}

Сервиз оформлен так:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
public class TicketSalesService : ITicketSales
{
}

Вот мой файл App.config:

<system.serviceModel>    
<services>     
  <service name="InternetRailwayTicketSales.TicketSalesImplementations.TicketSalesService" behaviorConfiguration="defaultBehavior">

    <host>
      <baseAddresses>
        <add baseAddress = "https://localhost/TicketSales/"></add>
      </baseAddresses>
    </host>

    <endpoint address="MainService" binding="wsHttpBinding" bindingConfiguration="wsSecureConfiguration"
      contract="InternetRailwayTicketSales.TicketSalesInterface.ITicketSales" />
    <endpoint address="mex" binding="mexHttpsBinding"
      contract="IMetadataExchange"/>
  </service>
</services>

<bindings>
  <wsHttpBinding>
    <binding name="wsSecureConfiguration">
      <security mode="Transport">
        <transport clientCredentialType="None"></transport>
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="defaultBehavior">
      <serviceThrottling maxConcurrentInstances="5000" maxConcurrentSessions="5000"/>
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="True" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Когда я нажимаю F5, я получаю сообщение об ошибке «Контракт требует сеанса, но Binding‘ WSHttpBinding ’не поддерживает его или неправильно настроен для его поддержки».

Мне действительно нужен канал, который поддерживает SSL и требует сеанса.

1 Ответ

0 голосов
/ 27 октября 2011

Вы можете поддерживать сеансы, включив защиту сообщений:

<binding name="wsHttpSecureSession">
<security>
<message establishSecurityContext="true"/>
</security>
</binding>

Если вам нужна безопасность транспорта, вам может потребоваться указать тип учетных данных клиента

...