Просто пытаюсь получить небольшое демо, работающее для отдыха.У меня есть библиотека классов домена, консольное приложение и проект службы wcf.
Интерфейс [ServiceContract] находится в библиотеке классов домена:
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebGet]
CompositeType GetDataUsingDataContract(string id);
}
Реализация находится в службе wcfприложение (шаблон Visual Studio):
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class Service1 : IService1
{
public CompositeType GetDataUsingDataContract(string id)
{
if (id != null)
{
return new CompositeType() { StringValue = id, BoolValue=true };
}
return null;
}
}
Когда я правильно связываю это в IIS, оно работает просто отлично:
http://test123/Service1.svc/GetDataUsingDataContract?id=42
выводит: {"d": {"__ type": "CompositeType: #Domain "," BoolValue ": true," StringValue ":" 42 "}}
Затем я написал получателю:
static void Main(string[] args)
{
var factory = new ChannelFactory<IService1>(new WebHttpBinding(), new EndpointAddress("http://test123/Service1.svc"));
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
var service = factory.CreateChannel();
CompositeType result = service.GetDataUsingDataContract("42");
}
Это компилируется и запускается, но свойстваРезультатом CompositeType являются null и false.Сериализация не прошла должным образом.Я использовал fiddler, чтобы проверить правильность http-вызова, и это точно так же, как я делаю это вручную с браузером.Когда я изменяю параметр «42» на ноль, он также дает мне объект CompositeType вместо нуль.Fiddler показывает {"d": null}, как и ожидалось.
Я не в курсе!
Обновление
Код для CompositeType
[DataContract]
public class CompositeType
{
[DataMember]
public bool BoolValue { get; set; }
[DataMember]
public string StringValue { get; set; }
}