我有一个在NetNamedPipeBinding端点上侦听的ServiceHost。我有一个带有单个方法的服务契约类,该方法由客户端调用并由服务器处理。该方法(我们将其称为PipeRequest())有一个请求参数。在客户端,我填充了这个对象,但是当它被发送到服务器时,它是空的。你知道为什么会出现这种情况吗?
_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);
}
}发布于 2011-08-06 01:43:55
事实证明,我必须指定(作为数据契约的一部分)来自ServiceRequestBase类的任何派生类。
[DataContract]
[KnownType(typeof(CitrixInfoServiceRequest))] // added this line
[KnownType(typeof(RegStateServiceRequest))] // added this line
public abstract class ServiceRequestBase
{
// ...
}发布于 2011-07-01 04:33:20
它看起来与proxy.PipeRequest(this);有关,你需要传入一个继承ServiceRequestBase的类,如果你的类继承了ServiceRequestBase,那么它可能是不可序列化的。
https://stackoverflow.com/questions/6539918
复制相似问题