http://kellabyte.com/2010/11/13/building-extensible-wcf-service-interfaces-with-datacontractresolver/のガイドに従って、DataContractSerializer を作成してアタッチしようとしています。
シリアライザーを宣言してメソッドを実装し、次のコードを使用してクライアントとサーバーの両方にアタッチしました。
public class ModuleDataContractResolver : DataContractResolver {
public override bool TryResolveType(Type type, Type declaredType,
DataContractResolver knownTypeResolver,
out System.Xml.XmlDictionaryString typeName,
out System.Xml.XmlDictionaryString typeNamespace) {
....// I return a true/false here
}
public override Type ResolveName(string typeName, string typeNamespace,
Type declaredType, DataContractResolver knownTypeResolver) {
....// I return a type here
}
-
var endpoint = _svcHost.Description.Endpoints.FirstOrDefault()
ContractDescription cd = endpoint.Contract;
foreach (OperationDescription opdesc in cd.Operations) {
DataContractSerializerOperationBehavior serializerBehavior = opdesc.Behaviors.Find<DataContractSerializerOperationBehavior>();
if (serializerBehavior == null) {
serializerBehavior = new DataContractSerializerOperationBehavior(opdesc);
opdesc.Behaviors.Add(serializerBehavior);
}
serializerBehavior.DataContractResolver = new ModuleDataContractResolver();
}
リゾルバーをアタッチしているにもかかわらず、これら 2 つのメソッドはサービスでもクライアントでも呼び出されないため、サービスは例外をスローしています。手順がありませんか?
更新:これが MEF を使用してこれらの型を返すことが原因ではないことを完全に確信しているわけではありません。問題の型は MEF 型であり、サービスによって検出されますが、クライアントへのインターフェイスとしてのみ公開されるため、アセンブリは読み込まれません。
サービスに MEF モジュールのリストをロードさせ、この WCF サービスを介してインターフェイスとしてクライアントに公開するという考え方です。