Чтобы воссоздать проблему, которую я вижу, используя VS2010, создайте пустой веб-сайт и добавьте веб-службу (asmx) с кодом.
Используя следующий код, оба веб-метода могут быть успешно задействованы:
[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";
}
}
Теперь, если я изменю parm на методе 2 на тип с нулевым значением, он будет работать нормально, но это сделает отказ метода 1...
[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";
}
}
Результирующая ошибка - это та, которую я видел раньше, если при вызове службы отсутствует параметр:
System.IndexOutOfRangeException: индекс находился за пределами массив. в System.Web.Services.Protocols.HttpServerType..ctor(Тип типа) при System.Web.Services.Protocols.HttpServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocolFactory.Create(Тип типа, Контекст HttpContext, запрос HttpRequest, ответ HttpResponse, Логическое & abortProcessing)
Кроме того, это только кажется сломанным, если первый метод возвращает void, поэтому это также отлично работает:
[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";
}
}
Любые идеи, что здесь происходит? Это произошло с использованием как 3.5, так и 4.0 в качестве целевой структуры.
edit: просто чтобы упредить дальнейшие ответы/комментарии по этим строкам... Я не ищу советы о лучших практиках, альтернативных решениях, asmx-месте в ландшафте сервиса, wcf и т.д. Это то, что я пришел во время отладки проблемы в устаревшем приложении, которое я не писал и которое уже исправлено, и мне интересно узнать причину конкретного поведения, которое я здесь изложил.