Как изменить службу WCF для работы со страницами ASP.NET? - PullRequest
2 голосов
/ 30 марта 2010

Я создал службу WCF (.NET 3.5), которая получает данные из БД и возвращает список объектов. Работает просто отлично. Я протестировал его с помощью приложения WCFTestClient и получил желаемые результаты.

Теперь я попытался создать веб-приложение ASP.NET и использовать службу. После включения <serviceDebug includeExceptionDetailInFaults="true"/> в файле конфигурации появляется сообщение об ошибке «Ссылка на объект не установлена ​​для экземпляра объекта».

Как изменить сервис для работы с ASP.NET?

Спасибо!

Обновление 1 - я создал ссылку на сервис. Когда я запустил свое очень простое приложение для тестирования на основе примера кода, отображаемого на веб-странице службы по умолчанию, я получил сообщение «Ссылка на объект не установлена ​​на экземпляр объекта».

Служба возвращает правильные результаты, когда я использую утилиту WCF Test Client, поставляемую с 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();

Я попытаюсь получить дополнительную информацию об отладке.

Ответы [ 3 ]

0 голосов
/ 30 марта 2010

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

Вы упомянули, что использовали встроенный тестовый клиент, но когда вы создали свое клиентское приложение (веб-сайт, с которого вы хотите вызывать новую службу), вы настроили его конечную точку (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, как только вы вызовете его метод, тогда вы сможете точно увидеть, где он выходит из строя. Надеюсь, это поможет

0 голосов
/ 30 марта 2010

Вы пытались открыть службу после ее инициализации, используя:

client.Open();

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

0 голосов
/ 30 марта 2010

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

Я предполагаю, что ваше приложение ASP.NET ожидает получить определенную информацию от службы, которую вы не настроили для ее предоставления, следовательно, ошибка нулевого объекта.

...