Сбой обратного вызова WCF / Silverlight к серверу в IIS - PullRequest
0 голосов
/ 15 сентября 2009

Используя Silverlight 3, Windows XP, IIS 5.1, я написал небольшое приложение, которое использует канальный метод вызова сервера, а не «ссылку на службу» в соответствии с этой статьей MSFT.

Приложение открывается и вызов сервера работает при запуске его на компьютере разработчика в VS 2008 с использованием адреса localhost плюс номер порта. Когда я изменяю адрес на имя компьютера dellnov2006 и публикую приложение в IIS, приложение открывается, но вызов веб-службы не работает.

Наблюдая за вызовом в Web Dev Helper, я вижу, что приложение пытается вызвать файл службы, http://dellnov2006/Service1.svc, и получает ошибку 404.

Пока у меня есть:

-В IIS сопоставлен тип .svc с aspnet-isapi.dll -Запустите утилиту CleanIISScriptMaps -Запустить aspnet_regiis.exe -i - включить

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

-

Вот обратный вызов на сервер и содержимое файла Service1.svc:

 private void Button_Click(object sender, RoutedEventArgs e)
    {
      // create a custom binding that uses HTTP and binary encoding
      var elements = new List<BindingElement>();
      elements.Add(new BinaryMessageEncodingBindingElement());
      elements.Add(new HttpTransportBindingElement());
      var binding = new CustomBinding(elements);

      // create a channel factory for the service endpoint configured
      //   with custom binding

      //var cf = new ChannelFactory<IService1>(binding,
      //   new EndpointAddress("http://localhost:1042/Service1.svc"));

      var cf = new ChannelFactory<IService1>(binding,
         new EndpointAddress("http://dellnov2006/Service1.svc"));

      // save the syncronized context for the ui thread
      uiThead = SynchronizationContext.Current;

      // open the channel
      IService1 channel = cf.CreateChannel();

      // invoke the method asychrnoously
      channel.BeginGetPerson(4, GetPersonCallback, channel);
    }

Вот содержимое файла svc для того, что они стоят:

<%@ ServiceHost Language="C#" Debug="true" Service="SilverlightChannelApp1.Web.Service1" CodeBehind="Service1.svc.cs" %>

Большое спасибо Майк Томас

Ответы [ 3 ]

0 голосов
/ 15 сентября 2009

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

Изменить это:

new EndpointAddress("http://dellnov2006/Service1.svc"));

К этому:

new EndpointAddress("http://dellnov2006:1042/Service1.svc"));
0 голосов
/ 15 сентября 2009

Решение этого вопроса было очень простым, но мне потребовались оба ваших ответа это.

Работа с сервисом, предложенная Ширазом, работала, поэтому проблема с вызовом сервиса.

Предложение изменить адрес конечной точки для включения порта # звучало хорошо, но не сработало.

Решение было изменить:

new EndpointAddress("http://dellnov2006/Service1.svc"));

к этому:

new EndpointAddress("http://dellnov2006/Silverlight/Service1.svc"));

где Silverlight - псевдоним виртуального каталога. Другими словами, я открываю приложение на IIS как 'http://dellnov2006/Silverlight/

Большое спасибо, я не могу поверить, насколько просто это было после такого большого количества времени, потраченного на поиск. Я работаю один, и если бы не этот форум, у меня были бы серьезные проблемы. Майк Томас

0 голосов
/ 15 сентября 2009

Может быть одним из следующих:

  • Проблема с web.config службы. Например, этот localhost был частью адреса.
  • что служба не может найти dll, которая должна быть в каталоге bin

Попробуйте перейти к услуге с помощью веб-браузера

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