Mam aplikację konsoli obsługującą usługę WCF. Chciałbym móc wystrzelić zdarzenie z metody w usłudze WCF i obsługiwać zdarzenie w procesie hostowania usługi WCF. czy to możliwe? Jak to zrobić? Czy mogę wyprowadzić niestandardową klasę z ServiceHost?Wysyłanie komunikatów do procesora hosta WCF
14
A
Odpowiedz
14
Nie musisz dziedziczyć po ServiceHost
. Istnieją inne podejścia do twojego problemu.
Można przekazać wystąpienie klasy usług zamiast typu do ServiceHost
. W ten sposób można utworzyć instancję przed uruchomieniem ServiceHost
i dodać własne procedury obsługi zdarzeń do wszystkich wyda- wanych zdarzeń.
Oto niektóre przykładowy kod:
MyService svc = new MyService();
svc.SomeEvent += new MyEventDelegate(this.OnSomeEvent);
ServiceHost host = new ServiceHost(svc);
host.Open();
Istnieją pewne zastrzeżenia przy stosowaniu tej metody, jak opisano w http://msdn.microsoft.com/en-us/library/ms585487.aspx
Albo można mieć znaną singleton klasy, że instancje usług wiedzieć i jawnie wywoływać jego metody, gdy zdarzają się zdarzenia.
0
using ...
using ...
namespace MyWCFNamespace
{
class Program {
static void Main(string[] args){
//instantiate the event receiver
Consumer c = new Consumer();
// instantiate the event source
WCFService svc = new WCFService();
svc.WCFEvent += new SomeEventHandler(c.ProcessTheRaisedEvent);
using(ServiceHost host = new ServiceHost(svc))
{
host.Open();
Console.Readline();
}
}
}
public class Consumer()
{
public void ProcessTheRaisedEvent(object sender, MyEventArgs e)
{
Console.WriteLine(e.From.toString() + "\t" + e.To.ToString());
}
}
}
namespace MyWCFNamespace
{
public delegate void SomeEventHandler(object sender,MyEventArgs e)
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class WCFService : IWCFService
{
public event SomeEventHandler WCFEvent;
public void someMethod(Message message)
{
MyEventArgs e = new MyEventArgs(message);
OnWCFEvent(e);
}
public void OnWCFEvent(MyEventArgs e)
{
SomeEventHandler handler = WCFEvent;
if(handler!=null)
{
handler(this,e);
}
}
// to do
// Implement WCFInterface methods here
}
public class MyEventArgs:EventArgs
{
private Message _message;
public MyEventArgs(Message message)
{
this._message=message;
}
}
public class Message
{
string _from;
string _to;
public string From {get{return _from;} set {_from=value;}}
public string To {get{return _to;} set {_to=value;}}
public Message(){}
public Message(string from,string to)
this._from=from;
this._to=to;
}
}
Możesz zdefiniować swoją usługę WCF pod numerem InstanceContextMode = InstanceContextMode.Single
.
TestService svc = new TestService();
svc.SomeEvent += new MyEventHandler(receivingObject.OnSomeEvent);
ServiceHost host = new ServiceHost(svc);
host.Open();
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] // so that a single service instance is created
public class TestService : ITestService
{
public event MyEventHandler SomeEvent;
...
...
}
Powiązane problemy
- 1. Jak przekazać parametr (identyfikator) do inspektora komunikatów w WCF?
- 2. Wysyłanie danych do strony internetowej z usługą WCF
- 3. Żądanie-odpowiedź V dupleksowy wzorek wymiany komunikatów WCF
- 4. Wstawianie hosta nadrzędnego hosta ip do pliku hosta kontenera
- 5. architektura procesora do montażu
- 6. Istniejące połączenie zostało gwałtownie zamknięte przez zdalnego hosta w WCF
- 7. Podłącz głośność do hosta
- 8. Skrypt powłoki do rejestrowania wykorzystania procesora i procesora linuxowego
- 9. Używanie OperatingSystemMXBean do pobrania procesora
- 10. Dlaczego widzę komunikat "Błąd HTTP 400. Nazwa hosta żądania jest nieprawidłowa." Po podłączeniu do usługi WCF
- 11. WCF i EF - jak zmusić hosta do używania własnego ciągu połączenia
- 12. Docker - Brak trasy do hosta
- 13. Przekaż parametr do hosta OWIN
- 14. Co oznacza czas procesora Incl, czas procesora, czas rzeczywistego procesora, czas rzeczywistego procesora w trybie śledzenia?
- 15. MATLAB: odniesienie do komunikatów o błędach
- 16. Noop do wyczerpujących komunikatów Switch Swift
- 17. Przełącznik kompilatora do włączania/wyłączania komunikatów debugowania?
- 18. Wykorzystanie procesora Java VisualVM i powinowactwo procesora
- 19. Magistrala usług Azure i sesje przesyłania komunikatów
- 20. Jak włączyć tłumaczenie komunikatów o błędach sprawdzania poprawności komunikatów Symfony2?
- 21. Wiosna Wykorzystanie komunikatów typeMismatch
- 22. Wartość wydajności komunikatów COMB
- 23. Wysyłanie tablicy PHP do JavaScript
- 24. Wysyłanie SIGINT do podprocesowania pythona
- 25. Programowe wysyłanie aplikacji do tła
- 26. Wysyłanie wiadomości do unikalnego gniazda
- 27. Wysyłanie danych jquery do Express
- 28. wysyłanie sms do wielu odbiorców
- 29. Wysyłanie plików PDF do iBooks
- 30. Jak wymusić sekwencję kolejki komunikatów za pomocą wielu wystąpień usług WCF
Nice! Oba podejścia mają dla mnie sens; Czuję się głupio, nie myślałem o żadnym z nich. Chyba właśnie oślepiło mnie złożoność samego WCF, ponieważ jest to dla mnie nowe. – dotnetengineer