WCF Callback
От: Farsight СССР  
Дата: 07.08.07 08:39
Оценка:
Хай! Снова вопрос по WCF. При использовании callback клиент виснит, потом вылетает по таймауту. Вроде все настроено правильно...

Код сервиса:

 [ServiceContract(
        CallbackContract = typeof(IChargesServiceCallback),
        SessionMode = SessionMode.Required)]
    public interface IChargesServiceContract
    {
        [OperationContract]
        DateTime GetServiceDateTime();

        [OperationContract]
        void Echo();
    }
    
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession,
        ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class ChargesService : IChargesServiceContract
    {
        public IChargesServiceCallback Callback
        {
            get { return OperationContext.Current.GetCallbackChannel<IChargesServiceCallback>(); }
        }

        public DateTime GetServiceDateTime()
        {   
            return DateTime.Now;
        }

        public void Echo()
        {
            Callback.ServerMessage("!!!");
        }
    }
        
         public interface IChargesServiceCallback
    {
        [OperationContract(IsOneWay = True)]
        void ServerMessage(string message);
    }


Конфиг сервиса:


<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MetadataSupport">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding1" closeTimeout="00:00:30" openTimeout="00:00:30"
            receiveTimeout="00:01:00" />
      </netTcpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="MetadataSupport" name="ChargesServiceLibrary.ChargesService">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="NetTcpBinding1"
          contract="ChargesServiceLibrary.IChargesServiceContract" />
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:9000/ChargesService" />
            <add baseAddress="http://localhost:8080/ChargesService" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>


Прокси и конфа клиента генерятся svcutil.exe.
Все методы сервиса зовуться нормально. Но при попытке позвать callback (в примере метод Echo()) — таймаут. Интерфейс IChargesServiceCallback на клиенте реализован.

В чем могут быть вилы?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
</farsight>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.