2010-05-23 9 views
0

Я использую контроллер для вызова хранимой процедуры, которая требует 12 параметров. Это отлично работает в режиме отладки локально (работает с удаленной базой данных), но не тогда, когда я публикую его на своем сервере IIS 7. Он жалуется на параметр № 7, утверждая, что он не поставляется с URL-адресом.Слишком много параметров в контроллерах MVC2 или проблемах IIS?

URL-адрес выглядит следующим образом;

http://localhost:50160/GetPlaces?p1=1&p2=1&p3=1&p4=1&p5=1&p6=1&p7=1&p8=1&p9=1&p10=1&p11=1&p12=1

Кто-нибудь есть какие-либо идеи, что может быть причиной этого? Любая помощь будет очень оценена здесь.

using System; 
using System.Configuration; 
using System.Web.Mvc; 
using System.Data; 
using System.Text; 
using System.Data.SqlClient; 
using Prototype.Models; 

namespace Prototype.Controllers 
{ 
    public class NameOfStoredProcedureController : Controller 
    { 

     char[] lastComma = { ',' }; 

     StringBuilder json = new StringBuilder(); 

     private String strCon = ConfigurationManager.ConnectionStrings["SomeConnectionString"].ConnectionString; 
     private SqlConnection con; 

     public StoredProcedureController() 
     { 
      con = new SqlConnection(strCon); 
     } 

     public string do_NameOfStoredProcedure(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, int p9, int p10, int p11, int p12) 
     { 
      con.Open(); 

      using (SqlCommand cmd = new SqlCommand("NameOfStoredProcedure", con)) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("@parameter1", p1); 
       cmd.Parameters.AddWithValue("@parameter2", p2); 
       cmd.Parameters.AddWithValue("@parameter3", p3); 
       cmd.Parameters.AddWithValue("@parameter4", p4); 
       cmd.Parameters.AddWithValue("@parameter5", p5); 
       cmd.Parameters.AddWithValue("@parameter6", p6); 
       cmd.Parameters.AddWithValue("@parameter7", p7); 
       cmd.Parameters.AddWithValue("@parameter8", p8); 
       cmd.Parameters.AddWithValue("@parameter9", p9); 
       cmd.Parameters.AddWithValue("@parameter10", p10); 
       cmd.Parameters.AddWithValue("@parameter11", p11); 
       cmd.Parameters.AddWithValue("@parameter12", p12); 


       using (SqlDataReader reader = cmd.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         json.AppendFormat("[{0},\"{1}\"],", reader["column1"], reader["column2"]); 
        } 
       } 
       con.Close(); 
      } 

      if (json.Length.ToString().Equals("0")) 
      { 
       return "[]"; 
      } 

      else 
      { 
       return "[" + json.ToString().TrimEnd(lastComma) + "]"; 
      } 
     } 


     //http://host.com/NameOfStoredProcedure?parameter=value 
     public ActionResult Index(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, int p9, int p10, int p11, int p12) 
     { 
      return new ContentResult 
      { 
       ContentType = "application/json", 
       Content = do_NameOfStoredProcedure(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) 
      }; 
     } 
    } 
} 
+1

Нужно видеть контроллер, и, возможно, код модели. (URL-адрес выглядит нормально.) – Richard

+0

@Richard - Я выложу код, но разве не странно, что он работает на локальном сервере отладки, но не в самом ИИС? – cc0

ответ

0

Установите MaxRequestBytes в параметрах HTTP для 64kb

1

Вы проверили с «Ограничением длины запроса GET»?

+0

Хм, справа. Я полагаю, что в IIS есть такая ситуация, я все еще очень любитель в IIS, но я буду искать ее. Спасибо за совет. Кажется немного странным, что такой относительно короткий URL-адрес будет соответствовать ограничениям по умолчанию. – cc0

+0

@portland - я установил лимит контента вверх, но все равно не сигару. Я также не получаю никакой другой ошибки при попытке загрузить страницу, кроме того, что не все параметры были поставлены. – cc0

+2

Если вы используете IIS 7 или выше, в разделе requestFiltering есть атрибут maxQueryString, который позволяет вам управлять этим значением по умолчанию 2048: http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/ requestLimits –

1

В коде есть много проблем, но ни один из них не должен останавливать его.

Необходимо отлаживать.

  1. Положите точку останова в начале вашего контроллера и проверьте, что значения его параметров установлены как ожидалось.

  2. Запустите SQL Profiler, чтобы узнать, какие вызовы выполняются в вашей базе данных, и проверьте, что это так, как вы ожидаете.

+0

Существуют ли какие-либо проблемы с этим кодом, кроме кажущейся неспособности модульного тестирования? Параметры из p7 и out не получают назначенных значений из URL-адреса, а 6 первых - в порядке. Опять же, все это работает локально, поэтому кажется, что есть проблема с IIS. – cc0

+1

Проблемы с кодом: (1) Поля 'con' и' json' должны быть локальными. (2) Именование. (3) Непосредственное отображение SProc в HTTP GET. Если я смогу сразу увидеть три, я предполагаю, что, вероятно, будут более глубокие проблемы, которые проявятся при более глубоком изучении или в более широком контексте. – Richard

+0

Спасибо, хорошая обратная связь. Какие именно проблемы с именами вы видите? – cc0

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