0

私はWCFを学んでいるので、私の用語があちこちで外れている場合はお詫びします。

WCFで送信され、FiddlerによってキャプチャされたSOAPメッセージを逆シリアル化しようとしていますが、「ルートレベルのデータが無効です。1行目、1行目」というエラーメッセージが表示され続けます。

WCFサービスは、次のコードでセットアップされます。

// Set up WcfProxy DataPortal service url
Csla.DataPortalClient.WcfProxy.DefaultUrl = appRootUrl + "WcfSilverlightPortal.svc";

// Set up WcfProxy Binding
System.ServiceModel.BasicHttpBinding largeBinding = new System.ServiceModel.BasicHttpBinding();
largeBinding.MaxReceivedMessageSize = 20000000;
largeBinding.MaxBufferSize = 20000000;
largeBinding.OpenTimeout = new TimeSpan(0, 10, 0);
largeBinding.ReceiveTimeout = new TimeSpan(0, 10, 0);
largeBinding.CloseTimeout = new TimeSpan(0, 10, 0);
largeBinding.SendTimeout = new TimeSpan(0, 10, 0);
largeBinding.Name = "BasicHttpBinding_IWcfPortal";
Csla.DataPortalClient.WcfProxy.DefaultBinding = largeBinding;

Fiddlerでキャプチャされたsoapメッセージは次のとおりです。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <Fetch xmlns="http://ws.lhotka.net/WcfDataPortal">
         <request xmlns:d4p1="http://schemas.datacontract.org/2004/07/Csla.Server.Hosts.Silverlight" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <d4p1:ClientContext>QBhBcnJheU9mU2VyaWFsaXphdGlvbkluZm8IQWh0dHA6Ly9zY2hlbWFzLmRhdGFjb250cmFjdC5vcmcvMjAwNC8wNy9Dc2xhLlNlcmlhbGl6YXRpb24uTW9iaWxlCQFpKWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlQBFTZXJpYWxpemF0aW9uSW5mb0AIQ2hpbGRyZW4JAWE5aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEwL1NlcmlhbGl6YXRpb24vQXJyYXlzAUALUmVmZXJlbmNlSWSDQAhUeXBlTmFtZZhlQ3NsYS5Db3JlLkNvbnRleHREaWN0aW9uYXJ5LCBDc2xhLCBWZXJzaW9uPTQuMy4xMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTkzYmU1ZmRjMDkzZTRjMzABQAZWYWx1ZXMJAWE5aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEwL1NlcmlhbGl6YXRpb24vQXJyYXlzAQEB</d4p1:ClientContext>
            <d4p1:ClientCulture>en-US</d4p1:ClientCulture>
            <d4p1:ClientUICulture>en-US</d4p1:ClientUICulture>
            <d4p1:CriteriaData i:nil="true" />
            <d4p1:GlobalContext>QBhBcnJheU9mU2VyaWFsaXphdGlvbkluZm8IQWh0dHA6Ly9zY2hlbWFzLmRhdGFjb250cmFjdC5vcmcvMjAwNC8wNy9Dc2xhLlNlcmlhbGl6YXRpb24uTW9iaWxlCQFpKWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlQBFTZXJpYWxpemF0aW9uSW5mb0AIQ2hpbGRyZW4JAWE5aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEwL1NlcmlhbGl6YXRpb24vQXJyYXlzAUALUmVmZXJlbmNlSWSDQAhUeXBlTmFtZZhlQ3NsYS5Db3JlLkNvbnRleHREaWN0aW9uYXJ5LCBDc2xhLCBWZXJzaW9uPTQuMy4xMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTkzYmU1ZmRjMDkzZTRjMzABQAZWYWx1ZXMJAWE5aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEwL1NlcmlhbGl6YXRpb24vQXJyYXlzAQEB</d4p1:GlobalContext>
            <d4p1:Principal>QBhBcnJheU9mU2VyaWFsaXphdGlvbkluZm8IQWh0dHA6Ly9zY2hlbWFzLmRhdGFjb250cmFjdC5vcmcvMjAwNC8wNy9Dc2xhLlNlcmlhbGl6YXRpb24uTW9iaWxlCQFpKWh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlQBFTZXJpYWxpemF0aW9uSW5mb0AIQ2hpbGRyZW4JAWE5aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEwL1NlcmlhbGl6YXRpb24vQXJyYXlzAUALUmVmZXJlbmNlSWSDQAhUeXBlTmFtZZhwQ3NsYS5TZWN1cml0eS5VbmF1dGhlbnRpY2F0ZWRQcmluY2lwYWwsIENzbGEsIFZlcnNpb249NC4zLjEzLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49OTNiZTVmZGMwOTNlNGMzMAFABlZhbHVlcwkBYTlodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tLzIwMDMvMTAvU2VyaWFsaXphdGlvbi9BcnJheXNeM0tleVZhbHVlT2ZzdHJpbmdTZXJpYWxpemF0aW9uSW5mby5GaWVsZERhdGFPem9adkxybV4DS2V5mRZDc2xhUHJpbmNpcGFsLklkZW50aXR5XgVWYWx1ZUAMRW51bVR5cGVOYW1lLgNuaWyGAUAHSXNEaXJ0eYVABVZhbHVlLgR0eXBlmA5iOmJhc2U2NEJpbmFyeQkBYiBodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYaCNCUAYQXJyYXlPZlNlcmlhbGl6YXRpb25JbmZvCEFodHRwOi8vc2NoZW1hcy5kYXRhY29udHJhY3Qub3JnLzIwMDQvMDcvQ3NsYS5TZXJpYWxpemF0aW9uLk1vYmlsZQkBaSlodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZUARU2VyaWFsaXphdGlvbkluZm9ACENoaWxkcmVuCQFhOWh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vMjAwMy8xMC9TZXJpYWxpemF0aW9uL0FycmF5c14zS2V5VmFsdWVPZnN0cmluZ1NlcmlhbGl6YXRpb25JbmZvLkNoaWxkRGF0YU96b1p2THJtXgNLZXmZDV9maWVsZE1hbmFnZXJeBVZhbHVlQAdJc0RpcnR5hUALUmVmZXJlbmNlSWSJAgEBAUALUmVmZXJlbmNlSWSDQAhUeXBlTmFtZZhvQ3NsYS5TZWN1cml0eS5VbmF1dGhlbnRpY2F0ZWRJZGVudGl0eSwgQ3NsYSwgVmVyc2lvbj00LjMuMTMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05M2JlNWZkYzA5M2U0YzMwAUAGVmFsdWVzCQFhOWh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vMjAwMy8xMC9TZXJpYWxpemF0aW9uL0FycmF5cwEBQBFTZXJpYWxpemF0aW9uSW5mb0AIQ2hpbGRyZW4JAWE5aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEwL1NlcmlhbGl6YXRpb24vQXJyYXlzXjNLZXlWYWx1ZU9mc3RyaW5nU2VyaWFsaXphdGlvbkluZm8uQ2hpbGREYXRhT3pvWnZMcm1eA0tleZkFUm9sZXNeBVZhbHVlQAdJc0RpcnR5hUALUmVmZXJlbmNlSWSJAwEBAUALUmVmZXJlbmNlSWSJAkAIVHlwZU5hbWWYcUNzbGEuQ29yZS5GaWVsZE1hbmFnZXIuRmllbGREYXRhTWFuYWdlciwgQ3NsYSwgVmVyc2lvbj00LjMuMTMuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj05M2JlNWZkYzA5M2U0YzMwAUAGVmFsdWVzCQFhOWh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vMjAwMy8xMC9TZXJpYWxpemF0aW9uL0FycmF5c14zS2V5VmFsdWVPZnN0cmluZ1NlcmlhbGl6YXRpb25JbmZvLkZpZWxkRGF0YU96b1p2THJtXgNLZXmZE19idXNpbmVzc09iamVjdFR5cGVeBVZhbHVlQAxFbnVtVHlwZU5hbWUuA25pbIYBQAdJc0RpcnR5hUAFVmFsdWUuBHR5cGWYCGI6c3RyaW5nCQFiIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hmG9Dc2xhLlNlY3VyaXR5LlVuYXV0aGVudGljYXRlZElkZW50aXR5LCBDc2xhLCBWZXJzaW9uPTQuMy4xMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTkzYmU1ZmRjMDkzZTRjMzABAQFeM0tleVZhbHVlT2ZzdHJpbmdTZXJpYWxpemF0aW9uSW5mby5GaWVsZERhdGFPem9adkxybV4DS2V5mRJBdXRoZW50aWNhdGlvblR5cGVeBVZhbHVlQAxFbnVtVHlwZU5hbWUuA25pbIYBQAdJc0RpcnR5hUAFVmFsdWUuBHR5cGWYCGI6c3RyaW5nCQFiIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hAQEBXjNLZXlWYWx1ZU9mc3RyaW5nU2VyaWFsaXphdGlvbkluZm8uRmllbGREYXRhT3pvWnZMcm1eA0tleZkPSXNBdXRoZW50aWNhdGVkXgVWYWx1ZUAMRW51bVR5cGVOYW1lLgNuaWyGAUAHSXNEaXJ0eYVABVZhbHVlLgR0eXBlmAliOmJvb2xlYW4JAWIgaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWGFAQFeM0tleVZhbHVlT2ZzdHJpbmdTZXJpYWxpemF0aW9uSW5mby5GaWVsZERhdGFPem9adkxybV4DS2V5mQROYW1lXgVWYWx1ZUAMRW51bVR5cGVOYW1lLgNuaWyGAUAHSXNEaXJ0eYVABVZhbHVlLgR0eXBlmAhiOnN0cmluZwkBYiBodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYQEBAQEBQBFTZXJpYWxpemF0aW9uSW5mb0AIQ2hpbGRyZW4JAWE5aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEwL1NlcmlhbGl6YXRpb24vQXJyYXlzAUALUmVmZXJlbmNlSWSJA0AIVHlwZU5hbWWYvkNzbGEuQ29yZS5Nb2JpbGVMaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTUuMC41LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49N2NlYzg1ZDdiZWE3Nzk4ZV1dLCBDc2xhLCBWZXJzaW9uPTQuMy4xMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTkzYmU1ZmRjMDkzZTRjMzABQAZWYWx1ZXMJAWE5aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEwL1NlcmlhbGl6YXRpb24vQXJyYXlzXjNLZXlWYWx1ZU9mc3RyaW5nU2VyaWFsaXphdGlvbkluZm8uRmllbGREYXRhT3pvWnZMcm1eA0tleZkFJGxpc3ReBVZhbHVlQAxFbnVtVHlwZU5hbWUuA25pbIYBQAdJc0RpcnR5hUAFVmFsdWUuBHR5cGWYDmI6YmFzZTY0QmluYXJ5CQFiIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hnoc8QXJyYXlPZnN0cmluZyB4bWxuczppPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vMjAwMy8xMC9TZXJpYWxpemF0aW9uL0FycmF5cyIgLz4BAQEBAZ8BAQEBAQEB</d4p1:Principal>
            <d4p1:TypeName>Competition.Domain.Entities.SchoolSummaryList, Competition.Domain.Csla, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</d4p1:TypeName>
         </request>
      </Fetch>
   </s:Body>
</s:Envelope>

これをCsla.Server.Hosts.Silverlight.CriteriaRequestタイプのオブジェクトに逆シリアル化しようとしています

このクラスのコードは次のようになります。

//-----------------------------------------------------------------------
// <copyright file="CriteriaRequest.cs" company="Marimer LLC">
//     Copyright (c) Marimer LLC. All rights reserved.
//     Website: http://www.lhotka.net/cslanet/
// </copyright>
// <summary>Message sent to the Silverlight</summary>
//-----------------------------------------------------------------------
using System;
using System.Runtime.Serialization;
using System.Security.Principal;
using Csla.Core;

namespace Csla.Server.Hosts.Silverlight
{
  /// <summary>
  /// Message sent to the Silverlight
  /// WCF data portal.
  /// </summary>
  [DataContract]
  public class CriteriaRequest
  {
    /// <summary>
    /// Assembly qualified name of the 
    /// business object type to create.
    /// </summary>
    [DataMember]
    public string TypeName { get; set; }

    /// <summary>
    /// Serialized data for the criteria object.
    /// </summary>
    [DataMember]
    public byte[] CriteriaData { get; set; }

    /// <summary>
    /// Serialized data for the principal object.
    /// </summary>
    [DataMember]
    public byte[] Principal { get; set; }

    /// <summary>
    /// Serialized data for the global context object.
    /// </summary>
    [DataMember]
    public byte[] GlobalContext { get; set; }

    /// <summary>
    /// Serialized data for the client context object.
    /// </summary>
    [DataMember]
    public byte[] ClientContext { get; set; }

    /// <summary>
    /// Serialized client culture.
    /// </summary>
    /// <value>The client culture.</value>
    [DataMember]
    public string ClientCulture { get; set; }

    /// <summary>
    /// Serialized client UI culture.
    /// </summary>
    /// <value>The client UI culture.</value>
    [DataMember]
    public string ClientUICulture { get; set; }
  }
}

3つのxml要素「Body」、「Fetch」、「request」のそれぞれをsoapメッセージから取得し、「element」という名前のXElement変数として保存して、以下のコードを実行してみました。

DataContractSerializer dcs = new DataContractSerializer(typeof(CriteriaRequest));
MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(element.Value));
ms.Seek(0, SeekOrigin.Begin);
XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(ms, Encoding.UTF8, new XmlDictionaryReaderQuotas(), null);
CriteriaRequest fr = (CriteriaRequest)dcs.ReadObject(reader);

いずれの場合も、オブジェクトの逆シリアル化に失敗し、私はアイデアがありません。

私はすべての関連情報を提供したと思いますが、何か他に役立つことがあれば私に知らせてください、そして私はそれを提供します。

ありがとう。

4

1 に答える 1

0

より単純なシリアライザーを使用して、CSLA.NETオブジェクトグラフを直接シリアル化することはできません。XmlSerializer、JsonSerializer、およびさまざまなDataContractSerializerバリエーションなどのシリアライザーは、グラフを完全に複製してオブジェクト化するほど高度ではないため、CSLAではサポートされていません。

BinaryFormatter、NetDataContractSerializer、およびMobileFormatterのみがサポートされています。

ビジネスオブジェクトをサービスインターフェイスとして直接公開しようとしている可能性があります。これはアーキテクチャ上の選択としては不十分であり、私が誰かをサポートしたり奨励したりすることを決して選択しませんでした。XMLサービスに関するFAQページが役立つ場合があります。

于 2013-02-11T06:42:01.617 に答える