我已经使用 WCF 创建了一个 Web 服务。我无法弄清楚如何通过数据契约在 WSDL/XSD 中设置约束和限制。
如果我使用约束改进 XSD2 架构,然后将此自定义架构绑定到现有服务会怎样?如果是这样,我怎样才能使服务公开改进的 WSDL?否则,还有其他方法可以为 WCF 服务设置元数据吗?
我已经使用 WCF 创建了一个 Web 服务。我无法弄清楚如何通过数据契约在 WSDL/XSD 中设置约束和限制。
如果我使用约束改进 XSD2 架构,然后将此自定义架构绑定到现有服务会怎样?如果是这样,我怎样才能使服务公开改进的 WSDL?否则,还有其他方法可以为 WCF 服务设置元数据吗?
请不要混淆 XSD 和 WSDL -这是完全不同的东西
根据您的问题-尝试使用RiaServices。它允许你编写这样的代码
public class Meeting
{
[Key]
public int MeetingId { get; set; }
[Required]
public DateTime Start { get; set; }
[Required]
public DateTime End { get; set; }
[Required]
[StringLength(80, MinimumLength = 5)]
public string Title { get; set; }
public string Details { get; set; }
[Required]
[RegularExpression(@"\d{1,3}/\d{4}",
ErrorMessage = "{0} must be in the format of 'Building/Room'")]
public string Location { get; set; }
[Range(2, 100)]
[Display(Name = "Minimum Attendees")]
public int MinimumAttendees { get; set; }
[Range(2, 100)]
[Display(Name = "Maximum Attendees")]
public int MaximumAttendees { get; set; }
}
据我所知,使用约束和限制改进 WSDL 的唯一方法是使用限制属性标记 DataContract 类(如果不是真的,请修复我)
这似乎是一个普遍的问题。服务元数据描述了数据契约。也就是说,交换数据的结构,没有任何验证信息。
我一直在通过在服务层之上实现一个验证层来解决这个问题。它如下:
除了 WSDL 之外,服务作者和消费者还同意一个改进的 XSD,它描述了除了数据契约的单纯结构之外的所有验证细节。
每一方 (xml) 都针对精炼的 XSD 序列化和验证数据合同。
针对 XSD 验证请求的服务方法的示例“伪代码”。
public string MyServiceMethod(MyDataType m){
string s = XmlSerialize(m);
if( XSDValidate(s) ){
return ProcessRequest(m);
}else{
return BuildErrorResponse("The request is not compliant with the contract");
}
}
服务消费者也可以实现类似的逻辑,在将请求数据发送到服务器之前对其进行验证。
您基本上有两种创建 Web 服务的方法:
先上代码。您创建一个类并将其标记为数据合同类以及更多属性。当您编译它时,您的 Web 服务的 WSDL 将从您的类中生成。这是一种快速的方法,通常可以让您对 WSDL 进行足够好的控制。
首先是架构。您手动创建 WSDL 并使用工具(例如WSCF.Blue或 )从您的 WSDL 生成数据契约类。这将使您完全控制您的 WSDL 模式,但根据我的经验,创建 WSDL 比创建数据合同类需要更多的工作。