首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetNamedPipeBinding:管道方法中的参数为空

NetNamedPipeBinding:管道方法中的参数为空
EN

Stack Overflow用户
提问于 2011-07-01 03:16:09
回答 2查看 486关注 0票数 0

我有一个在NetNamedPipeBinding端点上侦听的ServiceHost。我有一个带有单个方法的服务契约类,该方法由客户端调用并由服务器处理。该方法(我们将其称为PipeRequest())有一个请求参数。在客户端,我填充了这个对象,但是当它被发送到服务器时,它是空的。你知道为什么会出现这种情况吗?

代码语言:javascript
复制
_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);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-06 01:43:55

事实证明,我必须指定(作为数据契约的一部分)来自ServiceRequestBase类的任何派生类。

代码语言:javascript
复制
[DataContract]
[KnownType(typeof(CitrixInfoServiceRequest))]   // added this line
[KnownType(typeof(RegStateServiceRequest))] // added this line
public abstract class ServiceRequestBase
{
    // ...
}
票数 0
EN

Stack Overflow用户

发布于 2011-07-01 04:33:20

它看起来与proxy.PipeRequest(this);有关,你需要传入一个继承ServiceRequestBase的类,如果你的类继承了ServiceRequestBase,那么它可能是不可序列化的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6539918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档