3

WCFサービスを介してカスタムオブジェクトのリストを逆シリアル化しようとすると、実際に障害にぶつかりました。.NET4を使用しています。さまざまな名前空間を回避するにはどうすればよいですか。ASP.NETアプリは3.5で実行されており、参照は正常に設定されています。それが問題になるのでしょうか?どうすれば回避できますか?

私のサービスは次のように設定されています。

契約

namespace MyDomain.Services.Report
{
   [ServiceContract(Name = "ICompanyReport")]
   public interface ICompanyReport
   {
       [OperationContract]
       byte[] GetFooReport(string fooName);
   }

   [Serializable]
   [DataContract(Name="FooReportRecord", Namespace="MyDomain.com"]
   public class FooReportRecord
   {
      [DataMember]
      public int ID {get; set;}
      [DataMember]
      public string Name {get; set;}
   }

}

svc.cs

public class CompanyReport: ICompanyReport
{
    public byte[] GetFooReport(string fooName)
    {
        var data = new List<FooReportRecord>();

        // get data based on fooName and populate data

        var ms = new MemoryStream();
        var bf = new BinaryFormatter();
        bf.Serialize(ms, data);
        return ms.ToArray();
    }
}

クライアント側:

var ls = proxy.GetFooReport("bar");
var bf = new BinaryFormatter();
var ms = new MemoryStream(ls);

// Unable to find assembly MyDomain.Services.Report error is thrown
var reportData = (List<FooReportRecord>)bf.Deserialize(ms);
4

1 に答える 1

1

クライアントが .NET 3.5 アプリであり、FooReportRecord が .NET 4 wcf ライブラリにあると仮定すると、コンパイル時エラーが発生します。

FooReportRecord を .NET 3.5 でコンパイルされた 3 番目のクラス ライブラリに移動し、WCF アプリとクライアント (ASP.NET) の両方からこれを参照します。

しかし、@Phil が述べたように、byte[] の代わりに FooReportRecord[] を返さないのはなぜですか

サービス

public FooReportRecord[] GetFooReport(string fooName)
{
    var data = new List<FooReportRecord>();

    // get data based on fooName and populate data

    return data.ToArray();
}

クライアント

var proxy = new ServiceReference1.CompanyReportClient();
FooReportRecord[] ls = proxy.GetFooReport("bar");
于 2013-03-18T23:39:50.713 に答える