2015-06-10 4 views
0

Я создал образец веб-сервиса, который будет запрашивать у пользователя некоторую информацию и возвращать в JSON всю необходимую информацию. У меня есть два вопроса здесьСделать ввод в поле веб-службы необязательно необязательным

  1. Я не хочу, чтобы сделать это необходимо, чтобы пользователь вводит личинка новые даты и даты продления, я хочу сделать так, требуется только один из них, а другой является необязательным
  2. Если введены как даты, так и новые и обновлены, пользователь получит все в одном 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) 

ответ

0

Вы можете использовать обнуляемые переменные для ваших 4 DateTime

private DateTime? NewServiceDate { get; set; } 
private DateTime? NewServicesTo { get; set; } 
private DateTime? RenewServiceDate { get; set; } 
private DateTime? RenewServiceTo { get; set; } 

и используйте NewServiceDate.HasValue, чтобы проверить, содержит ли оно значение.

+0

Я сделал изменения, но я получаю ту же ошибку еще. Как вводить ввод для DateTime. Я пробовал '10/17/2013' до' 10/17/2013' и '2013-10-17'' '2013-10-18'. Есть ли какие-то другие изменения, которые мне нужно сделать? Потому что, когда я запускаю службу, не вводя даты продления, и я использую «2013-10-17» для «2013-10-18», служба запускается. – Tavo

+0

@Tavo Вам также нужны нулевые параметры в вашей функции. public string getSeviceInformation (имя строки, строка userId, DateTime? NewServiceDate, DateTime? NewServicesTo, DateTime? RenewServiceDate, DateTime? RenewServiceTo) И вы, формат даты и времени, должны быть такими же, как формат даты и времени сервера.В противном случае вы можете передать строку в свою функцию, а затем преобразовать строки в datatime в функцию –

0
  1. Использование обнуляемым DateTime

Подпись метода getSeviceInformation: публичная строка getSeviceInformation (?? Имя строки, строка идентификатор пользователя, DateTime newServiceDate, DateTime newServicesTo, DateTime renewServiceDate, DateTime renewServiceTo)

  1. Проверьте, какие даты имеют значения;

если (newServiceDate.HasValue) .... сделать что-то здесь

Смежные вопросы