Я пытаюсь реализовать службу REST в своем приложении C # для связи с клиентом Android. Я борюсь с C # часть.
Я следил за этой статьей: http://msdn.microsoft.com/en-us/library/bb412178
Вот так я запускаю свой сервис:
WebServiceHost host = new WebServiceHost(typeof(RestService), new Uri("http://localhost:8000/"));
ServiceEndpoint ep = host.AddServiceEndpoint(typeof(IRestService), new WebHttpBinding(), "");
host.Open();
Очень похоже на статью, приведенную выше, у меня есть интерфейс IRestService и RestService с методами EchoWithGet (string s) и EchoWithPost , которые я не использую, и я не буду больше говорить об этом. Я хочу вернуть класс UserClientInfo, который является причиной проблемы, которую я опишу позже.
[ServiceContract]
interface IRestService
{
[OperationContract]
[WebGet]
UserClientInfo EchoWithGet(string s);
}
Вот реализация EchoWithGet (...). Он подключается к другой службе и вызывает UserLog, который должен вернуть UserClientInfo .
public UserClientInfo EchoWithGet(string s)
{
service = (IService)Activator.GetObject(typeof(IService), "tcp://127.0.0.1:7878/" + "Service");
service.UserLog("username", "password", out uci);
return uci;
}
UserClientInfo - довольно сложный объект. Я не уверен, смогу ли я вернуть его службой. Это структура, содержащая другие структуры внутри, которая содержит другие структуры.
[Serializable]
public struct UserClientInfo
{
public ulong ClientId;
public DatabaseManager DBManager;
public string DisplayedName;
public ChISDispositions Dispositions;
public RegistrationInfo RegistrationInfo;
public uint Right1;
public uint Right2;
public uint Right3;
public uint Right4;
public string SessionId;
public string UserId;
}
Когда я запускаю службу и указываю браузеру на http://localhost:8000/EchoWithGet?s=teststring, я получаю сообщение об ошибке подключения. Firebug показывает статус Aborted на вкладке сети. Сервис как-то вылетает. Я могу отладить его и увидеть, что UserLog () хорошо восстанавливает объект uci, и сервис возвращает его, но где-то между браузером и сервисом это не получается.
Я пытался вернуть совершенно новый объект:
UserClientInfo uci = new UserClientInfo();
Это работает и возвращает XML с простым объектом.
Я что-то не так делаю?
Есть ли какие-то ограничения услуг, о которых я должен знать?
Есть ли какой-нибудь журнал, где я мог видеть, что не так?
Спасибо за любой ответ.