Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > wsHttpBinding и PerSession для контракта


Автор: ДобренькийПапаша 27.10.2011, 14:27
WCF service library проект.
Определил следующим образом интерфейс:
Код

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


Запускаю и получаю "Contract requires Session, but Binding ‘WSHttpBinding’ doesn’t support it or isn’t configured properly to support it."

Автор: Fitc 27.10.2011, 15:11
попробуй так
Код

<binding name="wsSecureConfiguration">
      <security mode="Transport">
        <transport clientCredentialType="None"></transport>
      </security>
<reliableSession enabled="true"/>
</binding>

http://stackoverflow.com/questions/2911221/what-is-the-purpose-of-wcf-reliable-session

Автор: ДобренькийПапаша 28.10.2011, 07:11
Надёжные сессии не работают через SSL на транспортном уровне. Так что тоже облом. Придётся на уровне сообщений делать. Короче, WCF - какашка ещё та. Он меня очень расстроил.

Автор: ДобренькийПапаша 28.10.2011, 14:19
И всё-таки. Неужели невозможно использовать https и сессионность между сервером на .NET и клиентом не на .NET? Бред какой-то получается, если нельзя!

Автор: Fitc 28.10.2011, 22:02
Цитата(ДобренькийПапаша @ 28.10.2011,  14:19)
И всё-таки. Неужели невозможно использовать https и сессионность между сервером на .NET и клиентом не на .NET? Бред какой-то получается, если нельзя!

если у вас привязка wshttpbinding клиент и сервер должны быть на .NET

почитайте последнее сообщение от jonie:
http://forum.vingrad.ru/forum/topic-332557/kw-wcf-канал-endpointidentity-endpointaddress.html

Автор: ДобренькийПапаша 31.10.2011, 13:25
Цитата(Fitc @  28.10.2011,  22:02 Найти цитируемый пост)
если у вас привязка wshttpbinding клиент и сервер должны быть на .NET

Нет. Для PHP есть фрэймворк, который поддерживает весь стек WS-* протоколов. Это, к примеру.

Автор: Fitc 1.11.2011, 22:22
ну допустим, а что за framework?

Автор: ДобренькийПапаша 2.11.2011, 15:44
Цитата(Fitc @  1.11.2011,  22:22 Найти цитируемый пост)
ну допустим, а что за framework? 

http://wso2.com/products/web-services-framework/php/

WSO2 Web Services Framework for PHP offers:
Support for the full Web service WS-* stack including security and reliable messaging.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)