我创建了一个WCF服务(.NET 3.5),该服务从数据库中获取数据并返回对象列表。它的工作正常。我使用wcftestclient应用程序对其进行了测试,并得到了理想的结果。

现在,我尝试创建一个ASP.NET Web应用程序并消耗服务。启用后 <serviceDebug includeExceptionDetailInFaults="true"/> 在配置文件中,错误消息是“对象引用未设置为对象的实例”。

如何修改服务以使用ASP.NET?

谢谢!

更新1-我创建了对服务的引用。当我运行了非常基本的测试应用程序时,基于服务默认网页上显示的示例代码,我得到了“对象引用未设置为对象的实例”消息。

当我使用Visual Studio提供的WCF测试客户端实用程序时,该服务将返回正确的结果。当我尝试使用以下代码时,全部在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。

如果您需要配置的详细信息,请在此处检查 http://msdn.microsoft.com/en-us/library/dd936243.aspx

在客户端的page_load方法中放置一个断点,您应该能够介入客户端代码,一旦调用它的方法,它将在WCF服务中自动跳入,然后您可以准确查看其失败的位置。希望这可以帮助

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top