Example #1
0
 public System.Threading.Tasks.Task <KktService.SendMessageResponse> SendMessageAsync(System.Xml.XmlElement Message)
 {
     KktService.SendMessageRequest inValue = new KktService.SendMessageRequest();
     inValue.Message = Message;
     return(((KktService.OpenApiAsyncMessageConsumerServicePortType)(this)).SendMessageAsync(inValue));
 }
        public string SendMessage <T>(string token, T request, string appClientId)
            where T : IOpenApiClientRequest
        {
            var kktServiceClient = new KktService.OpenApiAsyncMessageConsumerServicePortTypeClient();

            using (new OperationContextScope(kktServiceClient.InnerChannel))
            {
                var requestMessage = new HttpRequestMessageProperty();
                requestMessage.Headers["FNS-OpenApi-Token"] = token;

                requestMessage.Headers["FNS-OpenApi-UserToken"] =
                    Convert.ToBase64String(Encoding.UTF8.GetBytes(appClientId.Trim().ToLowerInvariant()));

                OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;

                var sendMessageRequest = new KktService.SendMessageRequest();

                var xmlRequest = request.ToXmlDocument();

                _logWriter.Trace(request.ToXmlString());

                sendMessageRequest.Message = xmlRequest.DocumentElement;

                var sendMessageResponse = kktServiceClient.SendMessageAsync(sendMessageRequest.Message)
                                          .GetAwaiter()
                                          .GetResult();

                var messageId = sendMessageResponse.MessageId;

                _logWriter.Trace($"messageId: {messageId}");


                var stopwatch = Stopwatch.StartNew();

                while (true)
                {
                    if (stopwatch.ElapsedMilliseconds > ResponseTimeout)
                    {
                        stopwatch.Stop();
                        throw new TimeoutException("Превышено время ожидания ответа.");
                    }

                    Thread.Sleep(ResponseWaitTime);
                    var getMessageRequest = new KktService.GetMessageRequest {
                        MessageId = messageId
                    };

                    try
                    {
                        var getMessageResponse =
                            kktServiceClient.GetMessageAsync(getMessageRequest)
                            .GetAwaiter()
                            .GetResult();

                        if (getMessageResponse.ProcessingStatus != KktService.ProcessingStatuses.COMPLETED)
                        {
                            continue;
                        }

                        _logWriter.Trace(getMessageResponse.Message.OuterXml);

                        return(getMessageResponse.Message.OuterXml);
                    }
                    catch (FaultException <KktService.AuthenticationFault> ex)
                    {
                        _logWriter.Error(ex);
                        throw;
                    }
                    catch (FaultException <KktService.MessageNotFoundFault> ex)
                    {
                        _logWriter.Error(ex);
                        throw;
                    }
                }
            }
        }
Example #3
0
 System.Threading.Tasks.Task <KktService.SendMessageResponse> KktService.OpenApiAsyncMessageConsumerServicePortType.SendMessageAsync(KktService.SendMessageRequest request)
 {
     return(base.Channel.SendMessageAsync(request));
 }