麻烦,而连接我的WCF服务到ASP.NET Web Forms应用程序

本文关键字:NET ASP Web Forms 应用程序 服务 连接 我的 WCF 麻烦 | 更新日期: 2023-09-27 18:11:58

我有一个ASP。关于书店的。NET Web Forms应用程序。我已经创建了一个数据库,并包括一些书里面。我原来的ASP。NET应用程序工作得很好,我可以在我创建的books页面中查看我的书籍。在那个页面上,我可以看到他们的名字、拇指图像和价格,还有一个链接说"添加到购物车",当按下这个链接时,它会把书放入我创建的购物车中。

然后我创建了一个WCF服务,我想把我的图书目录作为一种服务。我将我的原始项目的.dll引用添加到我的WCF服务应用程序中,下面是我的服务中的文件,其中包含我想要实现的单个服务。

Catalog.svc.cs

public class Catalog : ICatalog
{
    public IQueryable<Bookstore.Models.Book> GetBooks()
    {
        var _db = new Bookstore.Models.BookContext();
        IQueryable<Book> query = _db.Books;
        return query;
    }

ICatalog.cs

[ServiceContract]
public interface ICatalog
{
    [OperationContract]
    IQueryable<Book> GetBooks();
}

然后我创建了第三个项目,另一个ASP。. NET Web Forms应用程序,我想在其中使用我以前创建的WCF项目,并在我当前的第三个ASP. NET中显示我的第一个项目的目录。网络项目。我创建了一个名为Catalog的新页面,希望在其中显示第一个项目中的图书。我已经添加了我以前的WCF服务的服务引用,并且还添加了我的第一个ASP的引用。dll文件。网络应用程序。下面是我在第三个项目中创建的Catalog文件的代码。请注意,.aspx文件与我的第一个项目。aspx文件完全相同,其中显示了我的书籍。请注意,在我的第三个项目的Catalog.aspx.cs文件中,如下所示,我已经为之前创建的WCF服务创建了一个新实例,并使用该方法来显示图书。

Catalog.aspx

<%@ Page Title="Books" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" 
         CodeBehind="Catalog.aspx.cs" Inherits="BookstoreServiceImplementation.Catalog" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="FeaturedContent" runat="server">
    <section class="featured">
        <div class="content-wrapper">
            <hgroup class="title">
                <h1><%: Page.Title %></h1>
            </hgroup>
                 <section class="featured">
                    <ul> 
                        <asp:ListView ID="bookList" runat="server"
                            DataKeyNames="BookID"
                            GroupItemCount="3" ItemType="Bookstore.Models.Book" SelectMethod="GetBookData">
                            <EmptyDataTemplate>      
                                <table id="Table1" runat="server">        
                                    <tr>          
                                        <td>No data was returned.</td>        
                                    </tr>     
                                </table>  
                            </EmptyDataTemplate>  
                            <EmptyItemTemplate>     
                                <td id="Td1" runat="server" />  
                            </EmptyItemTemplate>  
                            <GroupTemplate>    
                                <tr ID="itemPlaceholderContainer" runat="server">      
                                    <td ID="itemPlaceholder" runat="server"></td>    
                                </tr>  
                            </GroupTemplate>  
                            <ItemTemplate>    
                                <td id="Td2" runat="server">      
                                    <table>        
                                        <tr>          
                                            <td>&nbsp;</td>          
                                            <td>
                                                <a href="<%#: GetRouteUrl("BookByNameRoute", new {bookName = Item.BookName}) %>">
                                                    <image src='/Catalog/Images/Thumbs/<%#:Item.ImagePath%>'
                                                        width="75" height="100" border="1"/>
                                                </a>
                                            </td>
                                            <td>
                                                <a href="<%#: GetRouteUrl("BookByNameRoute", new {bookName = Item.BookName}) %>">
                                                    <%#:Item.BookName%>
                                                </a>       
                                                <br />
                                                <span class="BookPrice">           
                                                    <b>Price: </b><%#:String.Format("{0:c}", Item.UnitPrice)%>
                                                </span>
                                                <br />
                                            </td>        
                                        </tr>      
                                    </table>    
                                </td>  
                            </ItemTemplate>  
                            <LayoutTemplate>    
                                <table id="Table2" runat="server">      
                                    <tr id="Tr1" runat="server">        
                                        <td id="Td3" runat="server">          
                                            <table ID="groupPlaceholderContainer" runat="server">            
                                                <tr ID="groupPlaceholder" runat="server"></tr>          
                                            </table>        
                                        </td>      
                                    </tr>      
                                    <tr id="Tr2" runat="server"><td id="Td4" runat="server"></td></tr>    
                                </table>  
                            </LayoutTemplate>
                        </asp:ListView>
                    </ul>
               </section>
        </div>
    </section>
</asp:Content>
<asp:Content ID="Content5" ContentPlaceHolderID="MainContent" runat="server">
</asp:Content>

Catalog.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.ModelBinding;
using Bookstore.Models;
namespace BookstoreServiceImplementation
{
    public partial class Catalog : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        public void GetBookData()
        {
            CatalogReference.CatalogClient catalog = new CatalogReference.CatalogClient();
            catalog.GetBooks();
        }
    }
}

问题如下,当我打开运行第三个项目并进入Catalog页面时,我没有看到第一个项目中的图书,而是得到一条文本:"No data was returned"。如果有人能帮我解决这个问题,我将很高兴。

麻烦,而连接我的WCF服务到ASP.NET Web Forms应用程序

你好像把wcf服务和wcf数据服务搞混了。

标准的wcf服务不能返回一个真正可查询的IQueryable。本质上,它只是列出IQueryable(拉下数据库中的每一行),并将其作为集合发送到网络上。在您的客户端上,当您接收到一系列书籍时,您可以看到这一点的证据。

如果您希望能够使用IQueryable将过滤后的查询通过网络发送到服务器,则需要使用wcf数据服务。数据服务在客户端上使用IQueryable来向服务器生成rest请求,以传递您的查询意图。服务器接收任意查询并返回数据。参见http://msdn.microsoft.com/en-us/library/cc668792.aspx

我相信GetBookData不应该是空的,它应该返回一个IQueryable。试着

    public IQueryable<Book> GetBookData()
    {
        CatalogReference.CatalogClient catalog = new CatalogReference.CatalogClient();
        return catalog.GetBooks();
    }