Я очень новичок в WCF и пытаюсь учиться, но мне кажется, что мне здесь не хватает чего-то значительного, и я знаю об этом, поэтому, пожалуйста, будьте добры. Я работаю с ранее существовавшим консольным приложением, к которому я добавил хост WCF, это упрощенная версия, но оно должно дать вам представление о нем
namespace mynamespace
{
public class MyConsoleApp
{
static void Main(string[] args)
{
CreateRemoteDebugHost();
StartLongRunningMethods();
}
public static void StartLongRunningMethods()
{
LongRunningMethod1();
LongRunningMethod2();
}
public static void LongRunningMethod1()
{}
public static void LongRunningMethod2()
{}
public void CreateRemoteDebugHost()
{
ServiceHost host = new ServiceHost(typeof(RemoteDebug), new Uri("net.pipe://localhost"));
host.AddServiceEndpoint(typeof(IRemoteDebug), new NetNamedPipeBinding(NetNamedPipeSecurityMode.None), "PipeRemoteDebug");
//Create mex
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.HttpGetUrl = new Uri("http://localhost:8001/RemoteDebug");
host.Description.Behaviors.Add(smb);
host.Open();
}
}
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IRemoteDebugCallback))]
public interface IRemoteDebug
{
[OperationContract]
string Message(string message);
}
public interface IRemoteDebugCallback
{
[OperationContract(IsOneWay = true)]
void OnMessage(string callbackValue);
}
public class RemoteDebug : IRemoteDebug
{
public string Message(string message)
{
IRemoteDebugCallback callback = OperationContext.Current.GetCallbackChannel<IRemoteDebugCallback>();
callback.OnMessage(message);
return message;
}
}
}
Как вы, вероятно, можете сказать, я пытаюсь отправить отладочные сообщения или сообщения о состоянии обратно клиенту (-ам) из давно работающих статических методов. Кажется, что вся сантехника работает правильно, хост подходит, я могу добавить ссылку на службу в мое клиентское приложение, но проблема возникает, когда я пытаюсь вызвать обратный вызов WCF из статических методов longrunningprocesses. Я не могу понять, как это сделать правильно.
Что также очень сбивает с толку, так это то, что почти каждый пример WCF и обратных вызовов предполагает, что все, что вы делаете, выполняется из контекста самого хоста WCF, очевидно, в моем примере это не так. Я знаю, что, наверное, все об этом не так, так что, может, кто-нибудь объяснит мне это? Любая помощь с благодарностью.
ТИА!