Как изменить свою службу WCF для работы с страницами ASP.NET?
Вопрос
Я создал службу WCF (.net 3.5), которая получает данные из DB и возвращает список объектов. Это работает просто отлично. Я проверил его, используя приложение wcftestClient и получил желаемые результаты.
Теперь я попытался создать веб -приложение ASP.NET и потреблять Сервис. После включения <serviceDebug includeExceptionDetailInFaults="true"/>
В файле конфигурации сообщение об ошибке - это «ссылка на объект не установлен на экземпляр объекта».
Как изменить службу для работы с ASP.NET?
Спасибо!
Обновление 1 - Я создал ссылку на службу. Когда я запустил свое самое основное приложение для тестирования, на основе примера кода, отображаемого на веб -странице службы по умолчанию, я получил сообщение «Справочник по объекту, не установленную на экземпляре объекта».
Служба возвращает правильные результаты, когда я использую утилиту тестового клиента WCF, предоставленную Visual Studio. Когда я пытаюсь использовать следующий код, все в событии page_load, я получаю ссылочное сообщение объекта.
PhoneNumberServiceClient client = new PhoneNumberServiceClient();
// Use the 'client' variable to call operations on the service
List<PhoneNumber> phones = client.GetPhoneNumbers();
// Always close the client.
client.Close();
Я постараюсь получить дополнительную информацию отладки.
Решение
Вы пробовали открыть службу после того, как инициализировали ее, используя:
client.Open();
Если проблема все еще сохраняется, возможно, она лежит на самом методе WCF. Попробуйте добавить точки останова в своем методе и отлаживать его, чтобы отследить причину ошибки. Вы также можете использовать профилировщики.
Другие советы
Вы также должны настроить службу, чтобы разрешить подробности исключения в результатах. Следите за информацией здесь, чтобы это произошло.
Я предполагаю, что ваше приложение ASP.NET ожидает получить определенную информацию из службы, которую вы не настроили, чтобы предоставить, отсюда и ошибку NULL объекта.
Я бы написал это как комментарий, но не смог бы понять, как сделать, так что я думаю, я попробую ответ.
Вы упомянули, что использовали встроенный тестовый клиент, но когда вы создали свое клиентское приложение (веб -сайт, с которым вы хотите позвонить в свою новую службу), вы настроили его конечную точку (web.config) в соответствии с концом вашей службы WCF ? Например, клиентское приложение, вызывая службу WCF с помощью конечной точки WSHTTPBinding:
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://localhost:8080/ContractorService" binding="wsHttpBinding" contract="ContractorService.IContractorService"
name="ContractorService_WsHttp">
</endpoint>
</client>
</system.serviceModel>
Кроме того, ваш сервис возвращает список, Ссылка на службу по умолчанию То, что вы добавили к своему клиенту, скорее всего, останавливается на массиве. Щелкните правой кнопкой мыши ссылка на службу, которую сейчас имеет ваш клиент, и выберите Справочник по настройке службы, в раскрывающемся поле для типа сбора вместо System.Array выберите System.collections.generic.list.
Если вам нужны подробности о конфигурации, проверьте здесь http://msdn.microsoft.com/en-us/library/dd936243.aspx
Поместите точку перерыва в метод Page_load вашего клиента, вы сможете пройти через свой клиент -код, и он автоматически запрыгнет в вашу службу WCF, как только вы назовите его метод, тогда вы сможете точно увидеть, где он сбой. Надеюсь это поможет