正直なところ、私は完全に疲れ果てています。どうすればいいのか本当にわかりません。Silverlight wcf を使用して Silverlight アプリケーションを開発しています。私のwebconfigは次のようになります:
<system.web>
<httpRuntime maxRequestLength="2147483647" />
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information,Error,ActivityTracing" propagateActivity="true" >
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="CardSpace">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IO.Log">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.Runtime.Serialization" switchValue="Information,Error,ActivityTracing">
<listeners >
<add name="xml" />
</listeners>
</source>
<source name="System.IdentityModel">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="myUserTraceSource"
switchValue="Information, ActivityTracing">
<listeners>
<add name="xml"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="e:\Traces.svclog"
/>
</sharedListeners>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="2147483647"
/>
</diagnostics>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="ServicesBinding" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<service behaviorConfiguration="ServiceBehavior" name="SUS.Web.Services.BaseService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="ServicesBinding"
contract="SUS.Web.Services.BaseService" />
</service>
<service behaviorConfiguration="ServiceBehavior" name="SUS.Web.Services.NuggetServices">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="ServicesBinding"
contract="SUS.Web.Services.NuggetServices" />
</service>
<service behaviorConfiguration="ServiceBehavior" name="SUS.Web.Services.WorkspaceServices">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="ServicesBinding"
contract="SUS.Web.Services.WorkspaceServices" />
</service>
<service behaviorConfiguration="ServiceBehavior" name="SUS.Web.Services.GeneralTemplateService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="ServicesBinding"
contract="SUS.Web.Services.GeneralTemplateService" />
</service>
<service behaviorConfiguration="ServiceBehavior" name="SUS.Web.Services.QueryService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="ServicesBinding"
contract="SUS.Web.Services.QueryService" />
</service>
</services>
</system.serviceModel>
サーバーと Silverlight プロジェクトの間でアセンブリを共有しているので、それらの間でクラスを送信できます。サーバーは 250 個のオブジェクトを生成します。最大167個まとめて発送できます。これらの 250 個の VmNugget オブジェクトから任意の 167 個の VmNugget オブジェクトを選択できます。具体的なオブジェクトの問題ではありません。私のViewModelはかなり複雑で、互いに含めることができ、1つは別の祖先になることができます。MY クラスは [DataContract] および [DataMember] 属性で装飾されています。シリアル化中にプロセスを検査する方法のヒントはありますか? MY webService は次のように装飾されています。
[ServiceKnownType(typeof(VmCulture))]
[ServiceKnownType(typeof(VmNugget))]
[ServiceKnownType(typeof(VmDesignedNugget))]
[ServiceKnownType(typeof(VmDesigner))]
[ServiceKnownType(typeof(OperationLog))]
[ServiceKnownType(typeof(OperationLog))]
[ServiceKnownType(typeof(VmFile))]
[ServiceKnownType(typeof(VmQuery))]
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class QueryService : BaseService
興味深いこと:
次のようなプロパティからすべてのコンストラクターを削除しました。
private ObservableCollection<VmNugget> my;
[DataMember]
public ObservableCollection<VmNugget> My
get{
/* commented
if (this.my == null)
this.my = new ObservableCollection<VmNugget>();
*/
return this.my;
}
返されたコレクションに 167 個を超える空のオブジェクトを配置しようとしましたが、それらをシリアル化してクライアントに送信することはできません。これらのオブジェクトは空 (初期化されていない) である必要があります。
Rows プロパティに OBservableCollection を持つ VmQuery クラスを使用して送信しています。
どうもありがとうございました。
トーマス