这已经解决


这是我无法从服务电话获得的合同:

[DataContract]
public class myInitializationData : ClientInitializationData
{
    [DataMember]
    public Dictionary<string, string> CultureNameLookup { get; set; }
}

这是基本类型,

[DataContract]
public class ClientInitializationData
{
    [DataMember]
    public List<IServiceType> ServiceTypes { get; set; }
}

IServiceType 是一个接口。我意识到我无法在电线上发送接口。有一个实体框架实体, ServiceType, ,实施 IServiceType 界面:

public partial class ServiceType : IServiceType
{
    //...
}

我的目标是发送 ServiceType 通过电线穿过电线的实体 myInitializationData 合同。

我阻止了装饰 myInitializationData 或者 ClientInitializationData 著名类型的课程 ServiceType, ,因为这些类是共享(链接)到Silverlight项目的。因此,如果我用著名的象图装饰这两个课程 ServiceType, ,Silverlight侧(S)将无法编译。

我没有直接装饰课程,而是用一个服务众所周知的服务合同装饰 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).

我启用了跟踪调试,但没有发现有关客户端或服务器中未能在跟踪中序列化的消息。

服务器跟踪:

  • 接收到频道的消息(行动: http://tempuri.org/iservice/initializeclient)
  • 执行 (iservice.Initializeclient)
  • 来自:执行(执行iservice.Initializeclient)
  • 通过频道发送消息(行动: http://tempuri.org/iservice/initializeclientresponse)
  • 警告故障系统。ServiceModel.Channels.ServersessionPreambleconNectionReader+ServerFramingDuplexSessionChannel
  • 警告故障系统。ServiceModel.Channels.ServiceChannel
  • 回复操作的例外(ObjectContext实例已被处置,不再可用于需要连接的操作。)

客户端跟踪:

如果我选择 ServiceTypes 属性 ClientInitializationData 数据合同,此错误消失了。因此,我认为这一定是一个序列化问题:接口和著名象征,但是WCF并未声称在跟踪中存在任何序列化问题,并且在这种情况下,我不确定跟踪的含义。


解决方案

这不是著名的问题。这是在实体上下文上自发启用懒惰的结果 ServiceType 类型。

尽管没有提及在跟踪中(在客户端或服务器侧)中违反过多的消息或缓冲区大小,但我必须假设在EF上下文上延迟载荷的启用导致Datacontractserialializer触发EF触发EF以获取EF 很多 记录,这又导致了电线上的大量图(尝试)。在消息写入期间,服务器端简单地(歧义地)对通道的错误。

此后,在EF上下文上返回Lazyloadation已解决了此问题。

有帮助吗?

解决方案

这不是著名的问题。这是在定义ServiceType类型的实体上下文上自发启用的懒惰的结果。

尽管没有提及在跟踪中(在客户端或服务器侧)中违反过多的消息或缓冲区大小,但我必须假设在EF上下文上延迟载荷的启用导致Datacontractserialializer触发EF触发EF,以获取许多记录,这又导致了电线上的大量图(尝试)。在消息写入期间,服务器端简单地(歧义地)对通道的错误。

此后,在EF上下文上返回Lazyloadation已解决了此问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top