C# WCF服务主机接收空对象
环境:Windows 10 x64上的.net 4.6.1 问题: 1.WCF契约通过事件实现。 2.每次客户端记录并调用事件日志条目时,服务主机都会触发该事件。 3.主机应用程序正确触发,但是对象(EventLogEntry)没有正确发布,并且始终为空。 4.在调试过程中,我检查了客户端Winforms应用程序是否传递了一个实例化对象。不知怎么的,这并没有达到目的 服务器端。 5.在此阶段,客户机和服务器都位于同一台机器上 问题: 为什么对象为空?我如何修复此问题 WCF服务代码:C# WCF服务主机接收空对象,c#,.net,winforms,wcf,C#,.net,Winforms,Wcf,环境:Windows 10 x64上的.net 4.6.1 问题: 1.WCF契约通过事件实现。 2.每次客户端记录并调用事件日志条目时,服务主机都会触发该事件。 3.主机应用程序正确触发,但是对象(EventLogEntry)没有正确发布,并且始终为空。 4.在调试过程中,我检查了客户端Winforms应用程序是否传递了一个实例化对象。不知怎么的,这并没有达到目的 服务器端。 5.在此阶段,客户机和服务器都位于同一台机器上 问题: 为什么对象为空?我如何修复此问题 WCF服务代码: [Serv
[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));
}
}
[服务合同]
公共接口IloggerWCFServiceContract
{
[运营合同(IsOneWay=true)]
无效WriteEvent(EntryWriteTenEventArgs e);
[运营合同(IsOneWay=true)]
[ServiceKnownType(typeof(EventLogEntry))]
无效一次写入(EntryWrittenEventArgs e);
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
公共类wcf_logger_服务库:IloggerWCFServiceContract
{
公共事件处理程序eventwrited;
公共无效OneVentWrited(EntryWrittenEventTargets e)
{
if(eventwrited!=null)
本。事件书写(本,e);
}
公共无效WriteEvent(EntryWriteTenEventArgs e)
{
OneVentWrited(新条目WrittenEventargs(e.条目));
}
}
Wcf Winforms服务器代码:
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_logger_servicebase loggerwcfsservice=new wcf_logger_servicebase();
ServiceHost loggerServiceHost=新ServiceHost(loggerWCFService,新Uri(loggerGlobalStatics.namedPipeServerAddress));
loggerWCFService.eventwrited+=新的EventHandler(EventHandler\u entrywrited);
.....
loggerServiceHost.AddServiceEndpoint(typeof(IloggerWCFServiceContract)、新NetNamedPipeBinding()、loggerGlobalStatics.namedPipeServerAddress);
loggerServiceHost.Open();
......
私有void eventhandler\u entrywrited(对象发送方,entrywriteteneventargs e)
{
--->textBox1.Text+=e.Entry.ToString()+“\r\n”;
}
WCF Winforms客户端代码:
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);
}
ChannelFactory日志ChannelFactory;
IloggerWCFServiceChannel loggerServiceChannel=null;
wcf_logger_servicebase loggerwcfsservice=新的wcf_logger_servicebase();
端点地址服务器端点;
System.ServiceModel.Channels.Binding绑定;
公共客户机()
{
初始化组件();
serverEndpoint=newEndpointAddress(新Uri(loggerGlobalStatics.namedPipeServerAddress));
binding=新的NetNamedPipeBinding();
loggerChannelFactory=新的ChannelFactory(绑定,serverEndpoint);
loggerChannelFactory.Open();
loggerServiceChannel=loggerChannelFactory.CreateChannel();
loggerServiceChannel.Open();
....
私有void eventLog1\u entrywrited(对象发送方,System.Diagnostics.entrywriteneventargs e)
{
loggerServiceChannel.WriteEvent(e);
}
原因是entrywriteneventargs
没有条目的setter
有关更多详细信息,请参阅
为什么不直接发送
条目
,而不将其封装在entrywriteneventargs
中?原因是entrywriteneventargs
没有条目的setter
有关更多详细信息,请参阅
为什么不直接发送Entry
,而不将其封装在entrywriteneventargs
中?非常感谢,这就是交易。我没有传递entrywriteneventargs,而是将其改为Entry only并传递给大家,瞧:)谢谢!非常感谢,这是交易。我没有传递entrywriteneventargsryWrittenEventArgs,我把这个改成了“仅输入”,然后把它传了过去,瞧:)谢谢!