string[]
受け入れて返すファイル解析 Web サービスを開発 (WCF に書き直します) しますISection[]
が、実際には、これはネストされたインターフェイスのセットです。
namespace Project.Contracts // Project.Contracts.dll
{
public interface ISection { }
public interface ISummarySection : ISection { }
public interface IDataSection : ISection { }
}
およびクラス:
namespace Project.Format.A // Project.Format.A.dll
{
[DataContract]
public class SummarySectionFormatA : ISummarySection { }
[DataContract]
public class DataSectionFormatA : IDataSection { }
}
サービス インターフェイスとその実装:
[ServiceContract]
public interface IService // Project.Contracts.dll
{
ISection[] Parse(string format, string[] data);
}
[ServiceKnownType(typeof(SummarySectionFormatA))] // tried this also
[ServiceKnownType(typeof(DataSectionFormatA))]
public class Service : IService // Project.Service.dll
{
public ISection[] Parse(string format, string[] data)
{
return Factory.Create(format).Parse(data);
}
}
declaredTypes
サーバーとクライアントの両方で構成しようとしました:
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="Project.Contracts.ISumarySection, Project.Contracts">
<knownType type="Project.Format.A.SummarySectionFormatA, Project.Format.A" />
</add>
<add type="Project.Contracts.IDataSection, Project.Contracts">
<knownType type="Project.Format.A.DataSectionFormatA, Project.Format.A" />
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
しかし、それでも同じエラーが発生します:
「データ コントラクト名 'DataSection:http://schemas.example.com/Parse' で 'DataSectionFormatA' を入力することは想定されていません。
また
基になる接続が閉じられました: 接続が予期せず閉じられました。
Contracts プロジェクトは Format プロジェクトを参照せず、参照すると設計が壊れるため、KnownTypeAttribute でインターフェイスを装飾することはできません。そのため、config を使用したいと考えています。