Aby odtworzyć problem, który widzę, używając VS2010, stwórz pustą stronę internetową i dodaj usługę sieciową (asmx) z opcją kodu.Parametr Nullable w metodzie serwisowej asmx powoduje awarię innej metody.
Korzystanie poniższy kod, obie webMethods mogą być wywoływane z powodzeniem:
[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";
}
}
Teraz, jeśli mogę zmienić parmezanem na metody 2 do wartości pustych typu to działa dobrze, ale uczyni to metoda 1 niepowodzeniem. ..
[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";
}
}
Uzyskany błąd to taki, który widziałem wcześniej, jeśli param brakuje podczas wywoływania usługi:
System.IndexOutOfRangeException: Indeks był poza obszarem tablicy . w System.Web.Services.Protocols.HttpServerType..ctor (Type type) at System.Web.Services.Protocols.HttpServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocolFactory.Create (Typ typu, HttpContext kontekst, HttpRequest prośba, HttpResponse odpowiedź, Boolean & abortProcessing)
również ten pojawia się tylko przełamać jeśli pierwsza metoda zwraca void, więc ten również działa dobrze:
[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";
}
}
Wszelkie pomysły co się dzieje tutaj? Nastąpiło to przy użyciu zarówno 3.5 jak i 4.0 jako szkielet docelowy.
edytuj: Tylko po to, aby uprzedzić dalsze odpowiedzi/komentarze wzdłuż tych linii ... Nie szukam porady na temat najlepszych praktyk, alternatywnych rozwiązań, miejsca dla Asmx w krajobrazie usług, wcf itp. To jest coś, co natknąłem się na debugowanie problemu w starszej aplikacji, której nie napisałem i który został już naprawiony, i jestem zainteresowany odkryciem przyczyny określonego zachowania, które tutaj opisałem.
ASMX to technologia starszego typu, i nie powinny być wykorzystywane do nowego rozwoju. WCF powinien być używany do wszystkich nowych projektów klientów i serwerów usług sieciowych. Jedna wskazówka: Microsoft przeszedł na [ASMX Forum] (http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads) na MSDN. –
Ponadto, nie wierzę, że ASMX obsługuje parametry zerowe. –
Dzięki, ale to nie jest nowy rozwój, to bardzo stara aplikacja. Przefiltrowałem go do prostej próbki, aby zilustrować problem. – heisenberg