NetNamedPipeBinding:管道方法中的参数为空
本文关键字:参数 管道 方法 NetNamedPipeBinding | 更新日期: 2023-09-27 18:00:43
我有一个ServiceHost正在侦听NetNamedPipeBinding端点。我有一个服务契约类,它有一个由客户端调用并由服务器处理的方法。该方法(我们称之为PipeRequest())有一个Request参数。在客户端,我填充这个对象,但当它被发送到服务器时,它是空的。你知道为什么会这样吗?
_Host = new ServiceHost(typeof(PipeService), new Uri(ServiceRequestRouter.URI));
_Host.AddServiceEndpoint(
typeof(IPipeService),
new NetNamedPipeBinding(),
_PipeName
);
_Host.Open();
[ServiceContract(Namespace = "http://www.example.com/PipeCommunication")]
interface IPipeService
{
[OperationContract]
void PipeRequest(ServiceRequestBase request);
}
[DataContract]
[KnownType(typeof(DerivedServiceRequest))]
[KnownType(typeof(SomeEnumType))]
public abstract class ServiceRequestBase
{
...
public void Dispatch(string pPipeName = ServiceRequestRouter.DefaultPipeName)
{
EndpointAddress epa = new EndpointAddress(_address_));
IPipeService proxy = ChannelFactory<IPipeService>.CreateChannel(new NetNamedPipeBinding(), epa);
proxy.PipeRequest(this);
}
}
看起来它与proxy.PipeRequest(this);
有关。您需要传入一个继承ServiceRequestBase的类,如果您的类确实继承了ServiceRequestBase,那么它可能无法序列化。
事实证明,我必须指定(作为数据契约的一部分)ServiceRequestBase类中的任何派生类。
[DataContract]
[KnownType(typeof(CitrixInfoServiceRequest))] // added this line
[KnownType(typeof(RegStateServiceRequest))] // added this line
public abstract class ServiceRequestBase
{
// ...
}