使用枚举并将其传递到我的Web服务中

使用枚举并将其传递到我的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服务中?

谢谢。

+0

应该只能使用枚举。您是否将Web服务设置为Web UI项目中的服务引用?该枚举应该已经生成(请参阅您的服务参考中的Reference.svcmap下的Reference.cs)。 – 2012-04-12 13:03:09

+0

是的,我的服务被设置为“服务参考”。我在哪里必须在我的服务中声明枚举?在我的界面?在一个单独的文件? – Bronzato 2012-04-12 13:07:24

如果枚举是你的ServiceContract的一部分(如存在作为一个参数),那么你需要的属性其设置为DataContract

[DataContract] 
public enum CompanyColumsEnumViewModel 
{ 
    [EnumMember] 
    CompanyName, 

    [EnumMember] 
    CompanyPostCode, 

    [EnumMember] 
    CompanyCity 
} 

然后,您可以在服务引用发现这客户端。我认为,这将成为字符串列的首选。

+0

+1为明确的例子。 @Bronzato,[这是关于使用数据协议的MSDN页面。](http://msdn.microsoft.com/en-us/library/ms733127.aspx) – 2012-04-12 13:15:12

+0

谢谢大家,我会看看MSDN页面。 – Bronzato 2012-04-12 13:31:53

你可以在一个单独的文件中声明你的枚举为正常的。自定义对象可以被显式地赋予定义的数据契约和成员,但是如果枚举在WCF服务中作为参数公开,那么WCF足够聪明,可以返回并将其序列化到WSDL本身。

这对所有类型都适用。如果在WCF方法中有一个类作为参数,并且该类将此枚举作为属性,那么类和枚举都将通过WSDL公开,并且会在客户端自动生成。