Я создаю веб-службу с использованием ASP.NET C#. Я отправляю различные типы данных из webservice, поэтому я использую следующую структуру.C# .NET WebService возвращающий объект
public enum WS_ServiceResponseResult
{
Success,
Failure,
}
public class WS_ServiceResponse
{
public WS_ServiceResponseResult result { get; set; }
public object data { get; set; }
}
public class WS_User
{
public long id{ get; set; }
public string name{ get; set; }
}
Метод
[WebMethod(EnableSession = true)]
public WS_ServiceResponse LogIn(string username, string pasword)
{
WS_ServiceResponse osr = new WS_ServiceResponse();
long userID = UserController.checkLogin(username, pasword);
if (userID != 0)
{
osr.result = WS_ServiceResponseResult.Success;
osr.data = new WS_User() { id = userID, name = username };
}
else
{
osr.result = WS_ServiceResponseResult.Failure;
osr.data = "Invalid username/password!";
}
return osr;
}
Я использую два типа клиента, JavaScript и C# .NET формы Windows Webservice образца. Когда я вызываю из javascript, я не получаю никаких проблем, а osr.data заполняется WS_User. Поэтому я могу легко использовать osr.data.id. Но когда я использую из C# .NET (прокси генерируется с помощью «Add Web Reference») можно успешно назвать, но когда результат приходит я мыльный Exception
{System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: Сервер не смог обработать запрос. ---> System.InvalidOperationException: произошла ошибка при создании документа XML . ... ...
Что мне не хватает? Объект Guess недостаточно четко определен и вызывает проблемы. Каковы обходные пути?
Благодаря
Максуд
Дополнение
Если добавить следующий фиктивный метод, то он прекрасно работает. Надеюсь, что это поможет, чтобы получить решение.
[WebMethod]
public WS_User Dummy()
{
return new WS_User();
}
Вы создаете прокси-клиент для C#? –
Да. Для этого я использовал Add Web Reference. Если я возвращаю osr.data = "abcd"; // то есть объект - это данные, то я не получаю исключения. Я получаю результат = успех и данные = "abcd"; Но если я использую объект WS_User, то у меня возникают проблемы. – max