Umwelt: .net 4.6.1 auf 10 Windows x64WCF-Service Host empfängt Null-Objekt
Problem: 1. WCF Vertrag mit einem Ereignisse implementiert. 2. Der Service-Host löst das Ereignis jedes Mal aus, wenn ein Ereignisprotokolleintrag protokolliert und vom Client aufgerufen wird. 3. Die Host-Anwendung wird ordnungsgemäß ausgelöst, das Objekt (EventLogEntry) wird jedoch nicht ordnungsgemäß bereitgestellt und ist immer null. 4. Ich habe beim Debuggen überprüft, dass die Winforms-Anwendung auf der Clientseite ein instanziiertes Objekt übergibt. Dies bringt es irgendwie nicht auf die Server-Seite . 5. In diesem Stadium befinden sich sowohl der Client als auch der Server auf demselben Computer.
Frage: Warum ist das Objekt null und wie kann ich das beheben?
WCF-Servicecode:
[ServiceContract]
public interface IloggerWCFServiceContract
{
[OperationContract(IsOneWay = true)]
void WriteEvent(EntryWrittenEventArgs e);
[OperationContract(IsOneWay = true)]
[ServiceKnownType(typeof(EventLogEntry))]
void OnEventWritten(EntryWrittenEventArgs e);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class wcf_logger_servicebase : IloggerWCFServiceContract
{
public event EventHandler<EntryWrittenEventArgs> eventwritten;
public void OnEventWritten(EntryWrittenEventArgs e)
{
if (eventwritten != null)
this.eventwritten(this, e);
}
public void WriteEvent(EntryWrittenEventArgs e)
{
OnEventWritten(new EntryWrittenEventArgs(e.Entry));
}
}
Wcf WinForms Server Code:
wcf_logger_servicebase loggerWCFService = new wcf_logger_servicebase();
ServiceHost loggerServiceHost = new ServiceHost(loggerWCFService, new Uri(loggerGlobalStatics.namedPipeServerAddress));
loggerWCFService.eventwritten += new EventHandler<EntryWrittenEventArgs>(eventhandler_entryWritten);
.....
loggerServiceHost.AddServiceEndpoint(typeof(IloggerWCFServiceContract), new NetNamedPipeBinding(), loggerGlobalStatics.namedPipeServerAddress);
loggerServiceHost.Open();
......
private void eventhandler_entryWritten(object sender, EntryWrittenEventArgs e)
{
--->textBox1.Text += e.Entry.ToString() + "\r\n" ;
}
WCF WinForms Client-Code:
ChannelFactory<IloggerWCFServiceChannel> loggerChannelFactory;
IloggerWCFServiceChannel loggerServiceChannel = null;
wcf_logger_servicebase loggerWCFService = new wcf_logger_servicebase();
EndpointAddress serverEndpoint;
System.ServiceModel.Channels.Binding binding;
public client()
{
InitializeComponent();
serverEndpoint = new EndpointAddress(new Uri(loggerGlobalStatics.namedPipeServerAddress));
binding = new NetNamedPipeBinding();
loggerChannelFactory = new ChannelFactory<IloggerWCFServiceChannel>(binding, serverEndpoint);
loggerChannelFactory.Open();
loggerServiceChannel = loggerChannelFactory.CreateChannel();
loggerServiceChannel.Open();
....
private void eventLog1_EntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e)
{
loggerServiceChannel.WriteEvent(e);
}
Vielen Dank, das war der Deal. Anstatt die EntryWrittenEventArgs zu übergeben, habe ich das nur in Entry geändert und das weitergeleitet und voila :) Danke! –