如何修改我的WCF服务以使用ASP.NET页面?

时间:2010-03-30 00:29:32

标签: asp.net wcf .net-3.5

我创建了一个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();

我将尝试获取一些额外的调试信息。

3 个答案:

答案 0 :(得分:0)

您还必须配置服务以允许结果中的异常详细信息。 Follow the info in here to make that happen

我认为你的ASP.NET应用程序期望从你没有设置它的服务中捕获某些信息,因此空对象错误。

答案 1 :(得分:0)

我会把它写成评论,但无法弄清楚如何,所以我想我会尝试回答。

你提到你使用了内置的测试客户端,但是当你创建了你的客户端应用程序(你想要调用新服务的网站)时,你已经配置了它的终点(web.config)来匹配结束你的wcf服务?例如,客户端应用程序使用wsHttpBinding端点调用wcf服务:

<configuration>
<system.serviceModel>
    <client>
        <endpoint address="http://localhost:8080/ContractorService" binding="wsHttpBinding" contract="ContractorService.IContractorService"
            name="ContractorService_WsHttp">
        </endpoint>
    </client>
</system.serviceModel>

此外,您的服务正在返回一个列表,您添加到客户端的默认服务引用很可能在数组处停止。右键单击客户端现在具有的服务引用,然后在集合类型的下拉框中选择configure service reference,而不是System.array,选择System.Collections.Generic.List。

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

在客户端的Page_Load方法中放置一个断点,您应该能够单步执行客户端代码,一旦调用它的方法,它将自动跳入您的wcf服务,然后您就可以确切地看到它失败的位置。 希望这有帮助

答案 2 :(得分:0)

使用以下命令初始化服务后是否尝试过打开服务:

client.Open();

如果问题仍然存在,那么它可能就在WCF方法本身上。尝试在方法上添加断点并对其进行调试以跟踪错误原因。您也可以使用分析器。