Веб-сервис доступен только как http, но мне нужен https. Какая техника здесь лучшая? - PullRequest
2 голосов
/ 07 августа 2009

Да, так что все знают WeatherBug, верно? У них есть этот URL ...

http://[apicode].api.wxbug.net/weatherservice.asmx

Прекрасно работает, но они не предоставляют альтернативу https для тех, кто пользуется безопасными соединениями.

Какую технику лучше использовать здесь? Я знаю, что мне нужно создать свою собственную страницу или службу, и таким образом вместо этого она обращается к «моей» службе по протоколу https, но на заднем плане она будет выполнять вызовы службы WeatherBug.

Как мне написать это в моем собственном веб-сервисе (asmx)?

Это то, что я пробовал на странице aspx, но это не сработало ...

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write(
        new StreamReader(
            WebRequest.Create(
                String.Format("{0}?{1}",
                    "http://[apicode].api.wxbug.net/weatherservice.asmx",
                    Request.QueryString.ToString()
                )
            ).GetResponse()
            .GetResponseStream()
        ).ReadToEnd()
    );
}

Ответы [ 5 ]

5 голосов
/ 07 августа 2009
  1. Создание веб-службы.
  2. Добавьте сервис Weather Eye в качестве веб-ссылки на этот веб-сервис.
  3. Дублируйте все звонки, которые weathereye совершает на вашем веб-сервисе, и вызывайте сервис Weather Eye из этих методов на вашем веб-сервисе, и пусть ваш веб-сервис возвращает результаты из веб-сервиса weathereye.
  4. Разместите ваш веб-сервис на http / https.
  5. Пусть ваши клиенты позвонят на ваш веб-сервис.

Ваши клиенты, в любом случае, должны будут подключаться к веб-сервису, так что вы могли бы также поместить эту логику в другой веб-сервис.

1 голос
/ 07 августа 2009
  1. Добавьте сервисную ссылку в ваш веб-проект:

    • Щелкните правой кнопкой мыши по проекту, выберите «Добавить ссылку на службу ...»
    • Введите адрес в диалоговом окне, выберите интересующую вас услугу.
  2. Создайте новый веб-сервис в вашем проекте:

    • Щелкните правой кнопкой мыши нужную папку, выберите «Добавить новый элемент ...»
    • Выберите «Веб-сервис», дайте ему разумное имя и т. Д.
  3. Начать кодирование:

    • Если эта служба будет вызываться из скрипта, найдите в верхней части страницы комментарий:

    // Чтобы разрешить вызов этой веб-службы из сценария с использованием ASP.NET AJAX, раскомментируйте следующую строку.

    • Даже если вы не используете ASP.NET AJAX, вам нужно следовать этой инструкции.
    • Создание методов, которые копируют методы, которые вы хотите вызвать в WeatherBug API

Следующее может дать вам при запуске:

// I don't know the WeatherBug Api, but you should get the idea
// Decorate the method as a WebMethod, otherwise you won't be able to call it
[WebMethod]
public string GetLiveWeatherByCityCode(int Length, // Is this an int?
                                       string CityCode,
                                       int UnitType,
                                       string ACode) {
  // Create a new instance of the client that was generated for you
  // when you added the Service Reference, using the name specified 
  // in the web.config (again, added for you by VS).
  using (var client = new 
           WeatherBugServiceClient("BasicHttpBinding_WeatherBugService"))
  {
    // Either return the call directly, or you could process the result before
    // returning it.
    return client.GetLiveWeatherByCityCode(Length, CityCode, UnitType, ACode);
  }
}

После этого вы сможете вызывать этот веб-метод в веб-службе обычным способом в разделе https.

1 голос
/ 07 августа 2009

Что мешает вам использовать HTTP-адрес? Устройство в вашей сети блокирует доступ HTTP?

Если ничто не блокирует HTTP, вы ничего не получаете, пытаясь использовать HTTPS для «безопасного» URL. (Это не похоже на прогноз погоды является конфиденциальной информацией)

0 голосов
/ 07 августа 2009

Вы можете использовать что-то вроде Stunnel ... или даже свернуть свой собственный прокси SSL

(простой прокси может быть создан с использованием RESTful WCF только для перенаправления вызовов)

0 голосов
/ 07 августа 2009

В чем проблема с использованием HTTP?

Если вы хотите использовать HTTPS для аутентификации информации о погоде, вам не повезло. Если пользователь использует только HTTP, нет никакого способа убедиться, что вы говорите с ним, или убедитесь, что вы получаете правильный вывод, если есть вероятность атаки «человек посередине». Вы могли бы иметь свою собственную подпрограмму посредника, которая связывалась с WeatherBug в HTTP и преобразовывалась в HTTPS, но вы не могли знать, что ваша подпрограмма посредника фактически получала данные WeatherBug.

С другой стороны, если вы не думаете, что кто-то будет пытаться организовать атаку для подачи ложных данных в надежде спланировать пикник на время дождя, какая разница между этими двумя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...