2013-12-10 3 views
0

Сайт работает локально, но на сервере это не так.Веб-сайт ASPX работает локально, но не на сервере

Я использую бесплатный хостинг somee.com

Ссылка на сайт: http://multiple-search.somee.com/

Этот сайт принимает поисковые запросы из текстового поля и ищет его в Google, Yahoo и т.д. я получил сообщение об ошибке при вводе searchqueries и нажатие кнопки. Ошибка:

[Win32Exception (0x80004005): Access is denied] 
System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) +614 
System.Diagnostics.Process.Start() +56 
System.Diagnostics.Process.Start(ProcessStartInfo startInfo) +49 
System.Diagnostics.Process.Start(String fileName) +31 
_Default.Button1_Click(Object sender, EventArgs e) +159 
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111 
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110 
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565 

Как устранить эту ошибку? Мой код:

using System; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void TextBox1_TextChanged(object sender, EventArgs e) 
    { 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     // Getting Text from textbox 
     string input = TextBox1.Text; 

     //Parsing criteria: New Line 
     string[] lines = input.Split('\n'); 
     foreach (string ln in lines) 
     { 
      if (CheckBox1.Checked == true) 
      { 
       System.Diagnostics.Process.Start("https://www.google.com/#q=" + ln.Substring(0)); 
      } 
      if (CheckBox2.Checked==true) 
      { 
        System.Diagnostics.Process.Start("http://search.yahoo.com/search;_ylt=AmGbBTVg4RHlgJHNOZ4AaA2bvZx4?p=" + ln.Substring(0) + "&toggle=1&cop=mss&ei=UTF-8&fr=yfp-t-900"); 
      } 
      if (CheckBox3.Checked == true) 
      { 
       System.Diagnostics.Process.Start("http://www.bing.com/search?q=" + ln.Substring(0) + "&go=&qs=n&form=QBLH&pq=chris+brown&sc=8-11&sp=-1&sk="); 
      } 
      if (CheckBox4.Checked == true) 
      { 
       System.Diagnostics.Process.Start("http://www.ask.com/web?q=" + ln.Substring(0) + "&search=&qsrc=0&o=0&l=dir"); 
      } 
      if (CheckBox5.Checked == true) 
      { 
       System.Diagnostics.Process.Start("http://search.aol.com/aol/search?s_chn=prt_ct9&enabled_terms=&s_it=comsearch50ct17&q=" + ln.Substring(0)); 
      } 
     } 
    } 
} 
+0

Не могли бы вы разместить сообщение об ошибке @arunelis? – OnoSendai

+0

О, мой, вы действительно используете 'Process.Start' для выполнения HTTP-запроса?Посмотрите на класс «HttpWebRequest» вместо этого, он позволяет отправлять любой HTTP-запрос и получать данные. В любом случае, это то, что он открывает новое окно браузера * на сервере *, это на 100% не то, что вы хотите сделать на веб-сервере! – Luaan

+0

Ребята, спасибо за ответы, вы ответили, почему это не работает. Я закончил с помощью кода JavaScript >>> http://stackoverflow.com/questions/14547783/for-loop-opening-urls – arunelis

ответ

2

Я подозреваю ограничение на вашем хостинге препятствует

System.Diagnostics.Process.Start 
0

Process.Start() запускает процесс на сервере. Это работает до тех пор, пока веб-приложение работает на вашем компьютере, но, безусловно, ограничено в размещенной среде.

0

Учетная запись пользователя, используемая IIS в AppPool, не имеет разрешений для запуска новых процессов. При запуске локально эта учетная запись, вероятно, является учетной записью администратора или, по крайней мере, пользовательского уровня.

1

Описание ошибки: [Win32Exception (0x80004005): Доступ запрещен]

Это вопрос права доступа. Чтобы исправить это, вы можете предоставить администратору доступ к пользователю IIS. Хотя это не очень хорошее решение.

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

Вы бы лучше не начинать до браузеров, но используя каждый поисковые системы API, чтобы получить результаты поиска и отображения их соответствующим образом .... посмотрите на this tutorial on how to use GOOGLE and BINGs API

+0

Да, я согласен с комментарием Павла выше. Кажется, проблема с разрешением. Попросите вашего провайдера предоставить вам полное разрешение. –

0

Как другие говорили, System.Diagnostics.Process может быть ограничено. Попробуйте сделать это по-другому, например, используя System.Net.Http.HttpClient.

1

Я согласен с Алексом, что ваш хост, скорее всего, ограничивает запуск нового процесса. Большинство хостинговых услуг откажутся разрешить доступ к тому, что по сути запускает новое приложение на своем сервере.

Кроме того, ваш код не будет работать в любом случае. Даже если они позволят начать новый процесс, клиент никогда не увидит результаты. Это откроет новые окна браузера на сервере, а не на клиентской машине.

0

Выполнение процесса на сервере не допускается. Для серверного кода, попробуйте это вместо того, чтобы хотя это будет открывать только одно окно, а не все поиска:

Server.Transfer("https://www.google.com/#q=" + ln); // for Google 

Для нескольких окон/вкладок, чтобы открыть, я хотел бы посмотреть на стороне клиента JavaScript код вместо. Кроме того, вы можете получить результаты от Google/Bing и т. Д., Используя свои API и объединить их, как описано в ответе @Paul Zahra.

+0

Спасибо. Я закончил с вашим предложением, используя код JavaScript. – arunelis

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