使用枚举并将其传递到我的Web服务中
我有一个ASP.NET MVC解决方案,也是一个用于数据访问的WCF服务。在我的WebUI中,我有一些像这样的枚举:使用枚举并将其传递到我的Web服务中
public enum CompanyColumsEnumViewModel
{
CompanyName,
CompanyPostCode,
CompanyCity
}
此枚举允许我根据特定列执行搜索。例如:在CompanyPostCode字段中搜索'2000'。
当用户提交的搜索公式推,我打电话给我的服务,我传递一些参数是这样的:
var companies = _requestServiceClient.GetCompanies(term, column);
其中长期=“2000”和列=“CompanyPostCode”
我的问题是什么是最好的:
传递列作为枚举的Web服务? (1)
-
传递列作为我的web服务中的简单字符串? (2)
(1)的IEnumerable <公司> GetCompanies(字符串术语,CompanyColumsEnumViewModel柱)
(2)的IEnumerable <公司> GetCompanies(字符串术语,字符串列)
如果我使用枚举我必须在这两边声明这些枚举:一个在我的WebUI和一个在我的Web服务中?
谢谢。
如果枚举是你的ServiceContract的一部分(如存在作为一个参数),那么你需要的属性其设置为DataContract
:
[DataContract]
public enum CompanyColumsEnumViewModel
{
[EnumMember]
CompanyName,
[EnumMember]
CompanyPostCode,
[EnumMember]
CompanyCity
}
然后,您可以在服务引用发现这客户端。我认为,这将成为字符串列的首选。
+1为明确的例子。 @Bronzato,[这是关于使用数据协议的MSDN页面。](http://msdn.microsoft.com/en-us/library/ms733127.aspx) – 2012-04-12 13:15:12
谢谢大家,我会看看MSDN页面。 – Bronzato 2012-04-12 13:31:53
你可以在一个单独的文件中声明你的枚举为正常的。自定义对象可以被显式地赋予定义的数据契约和成员,但是如果枚举在WCF服务中作为参数公开,那么WCF足够聪明,可以返回并将其序列化到WSDL本身。
这对所有类型都适用。如果在WCF方法中有一个类作为参数,并且该类将此枚举作为属性,那么类和枚举都将通过WSDL公开,并且会在客户端自动生成。
应该只能使用枚举。您是否将Web服务设置为Web UI项目中的服务引用?该枚举应该已经生成(请参阅您的服务参考中的Reference.svcmap下的Reference.cs)。 – 2012-04-12 13:03:09
是的,我的服务被设置为“服务参考”。我在哪里必须在我的服务中声明枚举?在我的界面?在一个单独的文件? – Bronzato 2012-04-12 13:07:24