Per ricreare il problema sto vedendo, utilizzando VS2010, creare un sito Web vuoto e aggiungere un servizio Web (asmx) con code-behind.Il parametro Nullable nel metodo di servizio asmx causa l'errore di un altro metodo
utilizzando il seguente codice, entrambi i webMethods possono essere invocate con successo:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService {
[WebMethod]
public void Method1(int x) {
// i'm good
}
[WebMethod]
public string Method2(int x) {
return "it worked";
}
}
Ora, se cambio il parm sul metodo di 2 ad un tipo nullable funziona bene, ma renderà il metodo 1 fallire. ..
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService {
[WebMethod]
public void Method1(int x) {
// no changes made to this method, but it no longer works
}
[WebMethod]
public string Method2(int? x) {
return "it worked";
}
}
L'errore risultante è quella che ho visto prima se un parametro non è presente quando si chiama un servizio:
System.IndexOutOfRangeException: l'indice era fuori dai limiti dell'array . a System.Web.Services.Protocols.HttpServerType..ctor (Tipo ) a System.Web.Services.Protocols.HttpServerProtocol.Initialize() a System.Web.Services.Protocols.ServerProtocolFactory.Create (Tipo tipo, HttpContext contesto, HttpRequest richiesta, HttpResponse risposta, booleano & abortProcessing)
inoltre, questo appare solo per rompere se il primo metodo restituisce void, quindi questo funziona anche bene:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService {
[WebMethod]
public string Method1(int x) {
return "works again";
}
[WebMethod]
public string Method2(int? x) {
return "it worked";
}
}
Tutte le idee cosa sta succedendo Qui? Ciò si è verificato usando sia il 3.5 che il 4.0 come framework di riferimento.
edit: ulteriori risposte Giusto per anticipare/commenti in questo senso ... io non sono alla ricerca di informazioni sulle migliori pratiche, le soluzioni alternative, il posto di ASMX nel paesaggio di servizio, WCF, ecc Questo è qualcosa che ho mi sono imbattuto durante il debug di un problema in un'app legacy che non ho scritto e che è già stato risolto, e sono interessato a scoprire la causa del comportamento specifico che ho delineato qui.
ASMX è una tecnologia legacy, e non deve essere utilizzato per un nuovo sviluppo. WCF dovrebbe essere utilizzato per tutti i nuovi sviluppi di client e server di servizi Web. Un suggerimento: Microsoft ha ritirato il [Forum ASMX] (http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads) su MSDN. –
Inoltre, non credo che ASMX supporti i parametri nullable. –
Grazie, ma questo non è un nuovo sviluppo, è una app molto vecchia. L'ho distillato in un semplice campione per illustrare il problema. – heisenberg