Я создал образец веб-сервиса, который будет запрашивать у пользователя некоторую информацию и возвращать в JSON всю необходимую информацию. У меня есть два вопроса здесьСделать ввод в поле веб-службы необязательно необязательным
- Я не хочу, чтобы сделать это необходимо, чтобы пользователь вводит личинка новые даты и даты продления, я хочу сделать так, требуется только один из них, а другой является необязательным
- Если введены как даты, так и новые и обновлены, пользователь получит все в одном JSON, но я не уверен, как добавить оба списка вместе.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, вот мой код WebService
namespace WebServiceTest
{
/// <summary>
/// Summary description for WebServicePrueba
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebServicePrueba : System.Web.Services.WebService
{
private string User { get; set; }
private string UserID { get; set; }
private DateTime NewServiceDate { get; set; }
private DateTime NewServicesTo { get; set; }
private DateTime RenewServiceDate { get; set; }
private DateTime RenewServiceTo { get; set; }
[System.Web.Services.WebMethod(Description = "Get Services Received", EnableSession = true)]
public string getSeviceInformation(string name, string userId, DateTime newServiceDate, DateTime newServicesTo, DateTime renewServiceDate, DateTime renewServiceTo)
{
User = name;
UserID = userId;
NewServiceDate = newServiceDate;
NewServicesTo = newServicesTo;
RenewServiceDate = renewServiceDate;
RenewServiceTo = renewServiceTo;
if (User == "prueba" && UserID == "prueba")
{
if (renewServiceDate == DateTime.MinValue || renewServiceTo == DateTime.MinValue)
{
ArrayList list = this.participant.getAddedTRCTest(newServiceDate, newServicesTo);
return JsonConvert.SerializeObject(list);
}
else if (newServiceDate == DateTime.MinValue || newServicesTo == DateTime.MinValue)
{
ArrayList list = this.participant.getModifiedTRCTest(renewServiceDate, renewServiceTo);
return JsonConvert.SerializeObject(list);
}
else
{
ArrayList list = this.participant.getAddedTRCTest(newServiceDate, newServicesTo);
ArrayList list2 = this.participant.getModifiedTRCTest(renewServiceDate, renewServiceTo);
return JsonConvert.SerializeObject(list);
}
}
else if (User != "prueba" && UserID == "prueba")
{
return "Please check your username";
}
else if (User == "prueba" && UserID != "prueba")
{
return "Please check your UserID";
}
else
{
return "Please check both your username and userID";
}
}
}
}
Здесь ошибка я получаю, когда я бегу WebService и не войти в одну из дат (т.е. я вхожу newServiceDate
и newServicesTo
, но не renewServiceDate
и renewServiceTo
или наоборот
System.ArgumentException: Cannot convert to System.DateTime.
Parameter name: type ---> System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at System.Convert.ToDateTime(String value, IFormatProvider provider)
at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
--- End of inner exception stack trace ---
at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
------------------------- --- -UPDATE ------------------------
@Jianping Liu, когда я объявляю нулевые параметры в своей функции, я больше не могу тестировать вебсервис, я получаю `теста
форма теста доступна только для методов с примитивными типами, как parameters.` Вот как я заявляю, что
[System.Web.Services.WebMethod(Description = "Get Services Received", EnableSession = true)]
public string getSeviceInformation(string name, string userId, DateTime? newServiceDate, DateTime? newServicesTo, DateTime? renewServiceDate, DateTime? renewServiceTo)
Я сделал изменения, но я получаю ту же ошибку еще. Как вводить ввод для DateTime. Я пробовал '10/17/2013' до' 10/17/2013' и '2013-10-17'' '2013-10-18'. Есть ли какие-то другие изменения, которые мне нужно сделать? Потому что, когда я запускаю службу, не вводя даты продления, и я использую «2013-10-17» для «2013-10-18», служба запускается. – Tavo
@Tavo Вам также нужны нулевые параметры в вашей функции. public string getSeviceInformation (имя строки, строка userId, DateTime? NewServiceDate, DateTime? NewServicesTo, DateTime? RenewServiceDate, DateTime? RenewServiceTo) И вы, формат даты и времени, должны быть такими же, как формат даты и времени сервера.В противном случае вы можете передать строку в свою функцию, а затем преобразовать строки в datatime в функцию –