Служба Silver и WCF за брандмауэром - PullRequest
1 голос
/ 01 октября 2010

У меня есть приложение Silverlight 4.0 (ASP.Net 4.0) на нашем веб-сайте для наших клиентов, как только они проходят аутентификацию. Программа загружается нормально, но не может общаться с созданной службой WCF. Внутри все отлично работает.

Приложение Silverlight размещено на IIS 7.5 с внутренним IP-адресом 10.1.1.8 с брандмауэром, перенаправляющим реальное приложение на внутренний IP-адрес. Эта часть отлично работает. Служба WCF находится на IP 10.1.1.10 и представляет собой одну и ту же виртуальную машину только с разными IP-адресами. Сервер базы данных также может быть проверен без проблем.

http://www.ntbuddy.com/images/stackoverflow/SilverlightWcf1.png

  • Внутренний пользователь (10.1.15.1) может нормально пользоваться сайтом
  • Внешний пользователь может получить доступ к сайту без каких-либо проблем, кроме случаев, когда он пробует приложение Silverlight
  • При обращении к программе она вызывает программу Wcf по адресу 10.1.1.10. Будучи внутренним пользователем, они могут видеть Wcf, они прекрасно работают. Внешние пользователи не могут.
  • Если я вызову ту же процедуру с веб-страницы ASP.Net, веб-страница выдаст результат без проблем.

Ссылка на услугу в справочнике услуг: "http://10.1.1.10/ServiceReference/Common.svc" для следующей процедуры.

Ниже приведена простейшая процедура, в которой я запрашиваю у Wcf номер для процедуры автоматического нумерации.

Работает только для внутренних пользователей (Silverlight)

private void BtnAutoNumberClick(object sender, RoutedEventArgs e)
{
   AutoNumber("AUTO");
}

private void AutoNumber(string autoNumber)
{
   var objResult = new CommonClient();
   objResult.GetAutoNumberCompleted += new EventHandler<GetAutoNumberCompletedEventArgs>(LoadResultsAutoNumber);
   objResult.GetAutoNumberAsync(autoNumber, 4, autoNumber);
}

void LoadResultsAutoNumber(object sender, GetAutoNumberCompletedEventArgs e)
{
   txtOrderNumber.Text = string.Format("{0}", e.Result.AutoNumber);
}

Что мне нужно изменить в приложении Silverlight, чтобы оно работало как для внешнего пользователя, так и для внутреннего пользователя? Я хочу, чтобы служба Wcf не предоставлялась, но будет, если это необходимо.

Ответы [ 2 ]

1 голос
/ 05 октября 2010

Хорошо, это заняло шесть дней чтения и изучения, чтобы «кликнуть».Я подумал, что Silverlight будет абсолютно легким делом, что по большей части так, как я писал приложения ASP.Net/WinForm в течение многих лет.Много раз мы смотрим на проблему, смотрим и смотрим, и для нашей жизни мы не можем найти решение, поскольку сосредоточены на одной проблеме и не отступаем назад и не смотрим на общую картину.Потребовался «Шираз Бхайджи», который ответил, что около 10 серий IP-адресов являются только внутренними.Я знал это, но был магическим ключом к освобождению моего разума от его беспорядка.Я нарисовал все на своей доске и положил в таблицы маршрутизации, а затем ударил себя по затылку в очевидное решение (например, внешний посетитель не может видеть мою внутреннюю сеть 10 серии).

ВВкратце, вот что я узнал о моем первом приложении Silverlight:

Silverlight запускается на КЛИЕНТЕ, а не на сервере (например, ASP.Net).Я тестировал весь свой Silverlight с приложением ASP.Net, которое отлично работало более года.Приложение Silverlight работает на сервере, и я не мог понять, почему моя служба WCF работает для ASP.Net, но не для Silverlight.Поскольку приложение Silverlight загружается на клиент, они будут видеть службу WCF только в том случае, если она находится за брандмауэром, либо (1) вы открываете брандмауэр, чтобы у него был доступ, либо (2) перемещаете службу в Интернет (убедитесь, чтовключить необходимую безопасность).Я уверен, что есть и другие способы, даже комбинация 1 и 2.

Я выбрал вариант № 1, чтобы переместить его в выделенный и видимый сервис.Я сделал это легко доступным и на альтернативном порту с безопасностью в службе.Брандмауэр перенаправляет на мой внутренний сайт, и все хорошо.Поэтому, если вы используете Silverlight, убедитесь, что при внутреннем тестировании вы также запускаете и тестируете извне, если вы собираетесь выставлять его также и снаружи.

1 голос
/ 02 октября 2010

IP-адреса, начинающиеся с 10, являются внутренними адресами, вы не сможете получить доступ к этому адресу за пределами брандмауэра.

http://en.wikipedia.org/wiki/IP_address

Если вы посмотрите на таблицу, помеченную "Зарезервированные IANA диапазоны частной сети IPv4 "

Вам необходимо предоставить свою службу, используя внешний IP-адрес.

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