none
Пересоздание канала в wcf при режиме Percall. RRS feed

  • Общие обсуждения

  • Проблема в следующем: есть некий сервис работающий в режиме PerCall, также в заголовках сообщения при каждом

    запросе, помимо параметров метода должна передаваться определенная информация. Естественно канал периодически падает. Пытаюсь воссоздать его при помощи следующей операции:

            public static ClientService
            {
                get
                {
                    if (mClientService != null && mClientService.InnerChannel != null && mClientService.InnerChannel.State != CommunicationState.Opened)
                    {
                        mClientService = new TechPlanClient();
                        mClientService.Open();
                        if (Value != null)
                        {
                            MessageHeader header = MessageHeader.CreateHeader("messagetitle", "message2", Value);
                            OperationContext.Current.OutgoingMessageHeaders.Add(header);
                        }
                    }
                    if (Value != null)
                    {
                        OperationContextScope scope = new OperationContextScope(mClientService.InnerChannel);
                        IList<string> list = (from n in OperationContext.Current.OutgoingMessageHeaders where n.Name == "messagetitle" select n.Name).ToList<string>();
                        if (list == null || list.Count == 0)
                        {
                            OperationContextScope scope1 = new OperationContextScope(mClientService.InnerChannel);
                            MessageHeader header = MessageHeader.CreateHeader("messagetitle", "message2", Value);
                            OperationContext.Current.OutgoingMessageHeaders.Add(header);
    
                        }
                    }
                    return mClientService;
                }
                set
                {
                    mClientService = value;
                }
            }

    Но в этом случае при многопоточных вызовах методов сервиса на стороне сервиса не нахожу

    нужной информации в заголовках. Как в этом случае грамотно организовать пересоздание канала или его восстановление

    28 июля 2016 г. 11:09