Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF net.pipe在接收响应时中止_Wcf_Named Pipes_Known Types - Fatal编程技术网

WCF net.pipe在接收响应时中止

WCF net.pipe在接收响应时中止,wcf,named-pipes,known-types,Wcf,Named Pipes,Known Types,此问题已解决 这是一份我无法通过服务电话获得的合同: [DataContract] public class myInitializationData : ClientInitializationData { [DataMember] public Dictionary<string, string> CultureNameLookup { get; set; } } 我的目标是通过myInitializationData合同跨线路发送ServiceType实体

此问题已解决


这是一份我无法通过服务电话获得的合同:

[DataContract]
public class myInitializationData : ClientInitializationData
{
    [DataMember]
    public Dictionary<string, string> CultureNameLookup { get; set; }
}
我的目标是通过
myInitializationData
合同跨线路发送
ServiceType
实体

我无法使用
ServiceType
的KnownType装饰
myInitializationData
ClientInitializationData
类,因为这些类与Silverlight项目共享(链接)。因此,如果我用
ServiceType
的KnownType修饰这两个类中的任何一个,Silverlight端将无法编译

我没有直接装饰类,而是用ServiceKnownType
ServiceType
装饰服务契约:

[ServiceContract]
[ServiceKnownType(typeof(ServiceType))]
public interface IService
{
    [OperationContract]
    myInitializationData InitializeClient();
}
这样行吗

调用IService.InitializeClient时,我在客户端收到以下错误:

There was an error reading from the pipe: The pipe has been ended. (109, 0x6d).
我已启用跟踪调试,但在客户端或服务器的跟踪中未发现有关序列化失败的消息

服务器跟踪:

  • 通过一个频道接收消息 (行动:)
  • 执行 (iSeries.InitializeClient)
  • 发件人:执行 (iSeries.InitializeClient)
  • 通过通道发送消息 (行动:)
  • 警告 出现故障的系统.ServiceModel.Channel.ServerSessionPreambleConnectionReader+ServerFramingDuplexSessionChannel
  • 警告 出现故障的System.ServiceModel.Channel.ServiceChannel
  • 答复操作时引发异常 (ObjectContext实例已被释放,不能再用于需要连接的操作。)
客户端跟踪:

  • 通过通道发送消息 (行动:)
  • 抛出异常 (从管道读取时出错:管道已结束。(109,0x6d)
如果我从
ClientInitializationData
DataContract中选择
ServiceTypes
属性,则此错误将消失。因此,我假设这一定是一个序列化问题:接口和KnownTypes,但WCF并没有声称跟踪中存在任何序列化问题,我也不确定在这种情况下跟踪意味着什么。
解决方案


这不是一个众所周知的问题。这是懒散加载在定义
ServiceType
类型的实体上下文上自发启用的结果

虽然没有提到跟踪中有过多的消息或缓冲区大小被违反(在客户端或服务器端),但我必须假设在EF上下文上启用LazyLoading会导致DataContractSerializer触发EF获取大量记录,这反过来会导致生成大量图(尝试)在线路上。在消息写入期间,服务器端只是(含糊不清地)对通道进行了故障处理


在EF上下文中将懒散加载返回到禁用状态解决了此问题。

这不是KnownTypes问题。这是在定义服务类型的实体上下文上自动启用懒散加载的结果

虽然没有提到跟踪中(在客户端或服务器端)存在过多的消息或违反缓冲区大小的情况,但我必须假设在EF上下文上启用LazyLoading导致DataContractSerializer触发EF获取大量记录,这反过来又导致(尝试)大量图形在消息写入过程中,服务器端只是(含糊不清地)对通道进行了故障处理

在EF上下文中将LazyLoading返回到禁用状态解决了这个问题

[ServiceContract]
[ServiceKnownType(typeof(ServiceType))]
public interface IService
{
    [OperationContract]
    myInitializationData InitializeClient();
}
There was an error reading from the pipe: The pipe has been ended. (109, 0x6d).