Во-первых, я хочу сказать, что у меня есть полнофункциональная служба WCF, которая использует множество конечных точек и сервисных контрактов без каких-либо проблем.
Хорошо, вот мой сценарий. У меня есть класс, который вложен в другой класс.
[Serializable]
[DataContract]
public class Database {
[Serializable]
[DataContract]
public class MyTable {
}
}
На моей конечной точке я ссылаюсь на интерфейс, который учитывает использование этих классов. Мой интерфейс выглядит так:
[ServiceContract]
public interface IDatabase {
[OperationContract]
void GetData(Database.MyTable MyTableData);
}
Моя конечная точка выглядит так:
<endpoint address="Database" binding="netTcpBinding" bindingConfiguration=""
name="Database" contract="MyNamespace.IDatabase" ></endpoint>
Теперь на клиенте я сталкиваюсь с ошибкой, утверждающей, что метаданные не могут найти ссылку. Я точно знаю, в чем проблема, и тот факт, что этот класс вложен в другой класс. Чтобы исправить эту проблему или действительно обойти ее, я сделал следующее для моего интерфейса.
[ServiceContract(Namespace="http://MyNamesapce"]
public interface IDatabase {
[OperationContract]
void GetData(Database.MyTable MyTableData);
}
Это решает все проблемы, и клиент может отлично генерировать метаданные. Я знаю, что упускаю понимание очень важной части WCF здесь. Я более или менее ищу ответы на вопрос, почему указание пространства имен в этом сервисном контракте, который ссылается на вложенный класс, помогает решить мою проблему генерации метаданных, ответ должен быть очевидным, но я сейчас ослеплен.
РЕДАКТИРОВАТЬ 1
Кроме того, если бы я мог решить эту проблему в app.config, я бы с удовольствием.