У меня есть небольшой тестовый веб-сервис для эмуляции чего-то странного, что я замечаю в реальном приложении. Поскольку демонстрация демонстрирует то же поведение, что и приложение, я буду использовать ее для краткости.
Короче говоря, мой файл интерфейса службы выглядит следующим образом (как вы можете видеть, это служба WCF по умолчанию, созданная VS2008, но я добавил новый открытый метод (GetOtherType ()) и два новых класса внизу (SomeOtherType и SomeComplexType) ) SomeOtherType управляет общим списком типа SomeComplexType
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WCFServiceTest
{
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
[OperationContract]
SomeOtherType GetOtherType();
}
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
[DataContract]
public class SomeOtherType
{
public List<SomeComplexType> Items { get; set; }
}
[DataContract]
public class SomeComplexType
{
}
}
Мой сервис реализован следующим образом
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WCFServiceTest
{
public class Service1 : IService1
{
#region IService1 Members
public string GetData(int value)
{
throw new NotImplementedException();
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
throw new NotImplementedException();
}
#endregion
#region IService1 Members
public SomeOtherType GetOtherType()
{
throw new NotImplementedException();
}
#endregion
}
}
Проблема, с которой я столкнулся, заключается в том, что, если я включаю ссылку на эту службу в веб-приложение ASP.NET, я не вижу SomeComplexType через intellisense. Ошибка относится к типу или пространству имен не может быть найдено. Тем не менее, SomeOtherType может быть найден (я предполагаю, что тип является возвращаемым типом одного из открытых методов).
Правильно ли я считаю, что не могу предоставить тип из службы WCF, если этот тип не указан в сигнатуре метода одного из моих открытых методов (либо возвращаемого типа, либо аргумента)? Если так, как я смогу перебирать элементы внутри экземпляра SomeOtherType на клиенте?
Большое спасибо, и я надеюсь, что это понятно.
Simon