2011-12-26 42 views
0

我正在使用AdventureWorks SQL Server數據庫(表名Person)測試WCF工具。WCF與AdventureWorks SQL Server數據庫

wcftestclient.exe測試它,它給了紅色圖標,並說:

這種操作不是在WCF測試客戶端支持,因爲它 使用類型AdventureWorksDbWcf.Person

這是service.svc.cs服務類。

namespace AdventureWorksDbWcf 
{ 
    public class Service : IService 
    { 
     AW_DataClassesDataContext db = new AW_DataClassesDataContext(); 

     public Person GetOnePerson(int BusinessEntityID) 
     { 
      var _person = from one in db.Persons 
          select one; 

      Person onlyOnly; 

      return onlyOnly = _person.First<Person>(); 

     } 

     public List<Person> ListOfPeople() 
     { 
      var _person = from one in db.Persons 
          select one; 

      List<Person> list = _person.ToList(); 

      return list; 
     } 
    } 
} 

更新:這是IService

[的ServiceContract] 公共接口IService { [OperationContract的] 人GetOnePerson(INT BusinessEntityID);

[OperationContract] 
    List<Person> ListOfPeople(); 

} 

我錯過了什麼嗎?

請告訴我。

感謝,

+0

你的課程'AdventureWorksDbWcf.Person'看起來像什麼? – 2011-12-26 21:06:53

+0

這是Microsoft提供的示例數據庫。名稱AdventureWorks200R2。 – darking050 2011-12-26 21:16:13

+1

Sql服務器與錯誤無關。 – idstam 2011-12-26 21:18:17

回答

1

你必須使用適當的[DataContract]屬性,你想用[數據成員]揭露場裝飾Person類。

如果您正在使用DataEntity或LinqToSQL爲表自動生成類,請注意創建服務要使用的「數據」類的最佳實踐,而不是發送屬於您的部分的類商業邏輯。看看IDesign's WCF coding standards

+0

據我所知,當添加SQL數據庫時,Person類是自動生成的。微軟不建議編輯該文件。因此,我將創建另一個標有[dataMember]的類「PersonSQL」並將其連接到SQL類。然後我將它添加到IService並在Service類中實現它。如果我錯過了一些東西,請糾正我,我對此仍然陌生。 – darking050 2011-12-30 13:20:06

+0

你在正確的軌道上。請注意,以「數據」作爲後綴命名DataContract類是一種很好的做法。在你的情況下,它會是PersonData。所以合同將是:PersonData GetPerson(...)。 – 2011-12-30 15:49:27

+0

工作表示感謝。 – darking050 2011-12-31 20:34:58

0

檢查人員執行類,但我認爲它應該是一件好事,因爲它是一個生成的類,如果我沒有記錯。

您的界面是否有正確的服務合同和運營合同?

WCF tutorial