2011-12-26 86 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