我的WCF服务,Silverlight应用程序使用它来检索数据。我没问题,
[OperationContract]
MyCollectionClass GetList(int sessID, string name);
[CollectionDataContract]
public class MyCollectionClass : List<MyClass>{ }
[DataContract]
public class MyClass {
[DataMember]
public string Prop1 { get; set; }
[DataMember]
public string Prop2 { get; set; }
}
但是..当MyCollectionClass有一个不到3000+的“记录”时,它可以工作。当记录数量更大时,WCF服务似乎有效,但在Silverlight应用程序的已完成事件上会发生异常:“找不到服务”。
我发现这可能与服务配置有关,我试图同时使用它们:
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647"
在WCF和客户端配置上。还添加:
readerQuotas:
maxArrayLength="2000000"
maxStringContentLength="2000000"/>
(也改变了找到的值)但似乎不起作用。
我认为问题是消息超过每个“消息”的最大字节数,但我不明白为什么数据不跨越不同的消息。
感谢任何提示。
乔治
答案 0 :(得分:1)
我有同样的问题,在我的情况下只是序列化一个字符串而没有问题,但在你的情况下,你正在序列化一大堆对象,有一个默认的限制,我记得我看到一个关于那个帖子(只是配置中的一个设置 - &gt; maxItemsInObjectGraph)来增加序列化对象的数量,
<强>链接强>
http://silverlight.net/forums/t/17674.aspx http://forums.asp.net/t/1330713.aspx
设置:强>
HTH 布劳略
答案 1 :(得分:0)
尝试在服务器端启用wcf服务日志记录。这可能会有所帮助:http://msdn.microsoft.com/en-us/library/ms730064.aspx
答案 2 :(得分:0)
我在InitializeComponent之后立即使用这两个语句:
binding.MaxReceivedMessageSize = 5000000 binding.MaxBufferSize = 5000000
您可以将数字更改为您想要的数字,但我必须这样做以便在Silverlgiht客户端上接收大量数据。我的绑定对象定义为:
私有绑定As New BasicHttpBinding
这是在vb.net中。在我加入这些物品后,它就像一个魅力。
答案 3 :(得分:0)
答案 4 :(得分:0)
我使用silverlight 4和vs 2010,我遇到了同样的问题,我解决了修改web.config文件的问题。
我原来的web.config文件有:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
我改变了:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/> <!--this very is important: it is the size of the buffer-->
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
答案 5 :(得分:0)
我可以建议您减少返回的记录数量吗?不是作为一种解决方案而是作为可用性建议。我无法想象任何用户正在显示3000多条记录。如果你要聚合数据集中的值而不是聚合它们服务器端,它将极大地提高你的应用程序的性能......我在我的应用程序中遇到过这种情况,并且几乎总是能够更好地解决这个问题。改变设计而不是选项......