ranio Ответов: 0

Как получить доступ к значению ответа с помощью обработчика обратного вызова WCF при общении со службой WCF, размещенной в качестве сервера со стороны клиента в ASP.NET с помощью C#?


Я хочу получить доступ к значению ответа с помощью обработчика обратного вызова WCF при общении со службой WCF, размещенной в качестве сервера, со стороны клиента в asp.net с помощью c# с помощью Visual Studio 2017.

Я пытаюсь связаться со стороной клиент - сервер через веб - сокет.

Я разместил веб-службу WCF, которая находится на хостинге. Я хочу общаться с сервером со стороны клиента как веб-приложение и получать ответ на текстовое поле.

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


Код, установленный в приведенном ниже блоке кода, проиллюстрирует это еще больше

Что я уже пробовал:

серверный:
[ServiceContract(CallbackContract = typeof(IServiceCallback))]
    public interface IService1
    {
        [OperationContract(IsOneWay = true)]
        Task Hello(string messsage);
    }

    public interface IServiceCallback
    {
        [OperationContract(IsOneWay = true)]
        Task OnHello(string message);
    }


<pre>  Task IService1.Hello(string messsage)
        {
            var callback = OperationContext.Current.GetCallbackChannel<IServiceCallback>();
            return callback.OnHello("You Said:" + messsage);


        }


}

клиентский:
protected void btnGetResponse_Click(object sender, EventArgs e)
        {
            var context = new InstanceContext(new WCFServiceCallbackHandler());
            var client = new ServiceReference1.Service1Client(context);

           

            bool exit = false;
            Console.WriteLine("Enter X to exit:");
            Console.WriteLine("Write and enter to send something to server:");

           
            while (!exit)
            {
                Console.WriteLine("Client:");

                String stringToSend = txtMsgToServer.Text;
                if (stringToSend.ToUpper() != "X")
                {
                    client.Hello(stringToSend);
                }
                else { exit = true; }
               
            }

            
           

          
        }
          
    }

    public class WCFServiceCallbackHandler : ServiceReference1.IService1Callback
    {
        public string result { get; set; }

        void ServiceReference1.IService1Callback.OnHello(string message)
        {
            Console.WriteLine(message);
                    result = message;
             
            //HttpContext context = HttpContext.Current;
            //context.Session["message"] = message;

        }

F-ES Sitecore

Является ли клиентский код an asp.net Пейдж? Если да, то почему вы используете консольные команды? Вероятно, вам будет легче сделать это, если вы не будете делать все асинхронно с обратными вызовами, а вместо этого сделаете вызов функции WCF синхронным. Таким образом, вы получите ответ на своей странице кода и сможете довольно легко вывести результат на элементы управления.

ranio

Асинхронный вызов необходим, так как в уже установленной службе запущено несколько потоков. Клиентская сторона была настроена на asp.net сама страница. Используемые консольные команды-это те, которые используются как часть консольного приложения. Но мне нужно использовать в качестве веб-приложения, чтобы установить его в asp.net код страницы . Я получаю ответное сообщение, но не могу передать эту переменную снаружи, так как область ее действия ограничена в классе обработчика обратного вызова.

клиентский:
var context = new InstanceContext(новый WCFServiceCallbackHandler());
var client = new ServiceReference1.Service1Client(контекст);



bool exit = false;
Приставка.WriteLine("введите X для выхода:");
Приставка.WriteLine("напишите и введите, чтобы отправить что-то на сервер:");


в то время как (!выход)
{
Приставка.WriteLine("Клиент:");

Строки stringToSend = txtMsgToServer.Текст;
if (stringToSend.ToUpper() != "X")
{
клиент.Привет(stringToSend);
}
else { exit = true; }

}





}


Обработчик обратного вызова WCF для вызова службы WCF на стороне сервера:
публичный класс WCFServiceCallbackHandler : ServiceReference1.IService1Callback
{
public string result { get; set; }

пустота элемент servicereference1.IService1Callback.OnHello(строковое сообщение)
{
Приставка.WriteLine(сообщение);
результат = сообщение;

//HttpContext context = HttpContext.Current;
//context.Session["message"] = сообщение;

}

}

0 Ответов