Как получить доступ к значению ответа с помощью обработчика обратного вызова 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"] = сообщение;
}
}