2016-09-25 63 views
1

我是新來的Visual Studio。我創建了關於書籍信息的數據合同。我創建了一個WCF Web服務解析txt文件並創建該書籍信息的實例列表。託管一個WCF服務,它返回一個datacontract的實例列表

當我試圖調用此服務來獲取書籍信息並在Web窗體上取代。我發現我不知道如何訪問這些實例的Datamember。有誰能夠幫助我?

public interface IService1 
{ 
    [OperationContract] 
    List<Book> GetAllBooks(); 
    [OperationContract] 
    String SearchBookById(); 
} 

[DataContract] 
public class Book 
{ 
    [DataMember] 
    public int Num { get; set; } 
    [DataMember] 
    public string ID { get; set; } 
    [DataMember] 
    public string name { get; set; } 
    [DataMember] 
    public string author { get; set; } 
    [DataMember] 
    public int year { get; set; } 
    [DataMember] 
    public float price { get; set; } 
    [DataMember] 
    public int stock { get; set; } 
} 

public List<Book> GetAllBooks() 
{ 
    var bookList = new List<Book>(); 
    int n = 1; 

    StreamReader reader = new StreamReader(@"C:\infs 7204\prac3\books(1).txt"); 
    { 
     string fileLine; 
     while((fileLine = reader.ReadLine())!= null) 
     { 
      string[] bookInfo = fileLine.Split(','); 
      int year = Int32.Parse(bookInfo[3]); 
      float price = float.Parse(bookInfo[4].Trim('$')); 
      int stock = Int32.Parse(bookInfo[5]); 
      bookList.Add(new Book { Num = n, ID = bookInfo[0], name = bookInfo[1], author=bookInfo[2], 
      year=year,price=price, stock=stock}); 
      n++; 

     } 
    } 
    return bookList; 
} 

我需要在我的網頁上的表格中顯示那些書類。這是我想要訪問數據合同列表的方式。但我有一個warrning說:「不能隱式轉換type'prac3.ServiceReference1.Book []爲‘prac3.Book []’」

public partial class WebForm1 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Service1Client client = new Service1Client(); 
     Book[] list= client.GetAllBooks(); 


    } 
} 

此外,有沒有哪些conponent在工具箱中我應該使用任何segesstion顯示錶格?

+0

發佈您的錯誤以及。很難回答沒有錯誤的細節。 –

回答

0

你的警告Cannot implicitly convert type'prac3.ServiceReference1.Book[] to 'prac3.Book[]表明,很可能你有Book類型的重複定義。

有有兩種可能性:

  1. 更可能的是,充當Laurijssen已經指出的那樣,您的客戶端項目可能有一個項目引用您的服務項目。因此,你必須定義的所有W上的公共類型的訪問。 ithin(包括Book)確保您的客戶端項目是否引用了服務項目:在Visual Studio中打開您的客戶端項目,在解決方案資源管理器中展開您的客戶端項目下的參考節點,並查找您的服務項目名稱是否顯示那裏。
  2. 或者,您不太可能在您的客戶項目中重新定義了類Book

在這兩種情況下,你得到的Book兩個定義:一個prac3.Book(在服務項目中定義),另一個prac3.ServiceReference1.Book(由客戶項目服務引用生成,一般在文件服務引用\服務命名空間名稱\參考.cs)在您的客戶端項目目錄下。)在您的情況下,您試圖將prac3.ServiceReference1.Book數組設置爲prac3.Book,因此會導致類型不匹配。

對於立即補救更改以下行的客戶端代碼

Book[] list= client.GetAllBooks(); 

以下

prac3.ServiceReference1.Book[] list= client.GetAllBooks(); 

而且考慮刪除的參考服務項目或重複定義。客戶參考其引用的服務組合是非常不尋常的。

+0

問題解決了!我添加了一個新的Web應用程序來使用該服務,而不是在包含該服務的應用程序中添加一個webworm項目。錯誤消失了。謝謝。現在我想在網頁上的excel-like表格中顯示數據合同的所有類。你如何建議我這樣做? –

1

嘗試包含Book的完整名稱空間並查看它是否有效。 您是否添加了對Book類的項目引用並生成了服務引用?如果是這樣的thje情況下,更好地除去項目引用,並讓SvcUtil工具生成添加服務引用」一個共同的名字空間。

List<prac3.ServiceReference1.Book> books = client.GetAllBooks(); 

foreach (prac3.ServiceReference1.Book book in books) 
{ 
    Console.WriteLine(book.author); 
} 
+0

我寫錯誤寫了類似的代碼。我不明白爲什麼會出現這些錯誤。我在我的問題中添加客戶端代碼。請幫幫我。 –

+0

好的,編輯答案,它可能有幫助 – Laurijssen

+0

我不明白你是什麼意思..數據契約和操作契約在相同的命名空間在同一個服務文件。我確實添加了服務參考。 –