【问题标题】:How to specify a parameter of an OperationContract as required如何根据需要指定 OperationContract 的参数
【发布时间】:2010-08-04 14:33:12
【问题描述】:

我想知道如何根据需要在 WCF 中指定 OperationContract 方法的参数,以便生成的 xsd 包含 minOccurs="1" 而不是 minOccurs="0"。

例子:

[ServiceContract(Namespace = "http://myUrl.com")]  
public interface IMyWebService  
{  
   [OperationContract]  
   string DoSomething(string param1, string param2, string param3);  
}

生成这个 xsd:

<xs:element name="DoSomething">  
  <xs:complexType>  
    <xs:sequence>  
      <xs:element minOccurs="0" name="param1" nillable="true" type="xs:string" />  
      <xs:element minOccurs="0" name="param2" nillable="true" type="xs:string" />  
      <xs:element minOccurs="0" name="param3" nillable="true" type="xs:string" />  
    </xs:sequence>  
  </xs:complexType>  

但我想在代码中定义 minOccurs="1" 而无需在 xsd 文件中手动修复它。

【问题讨论】:

标签: c# wcf wsdl operationcontract


【解决方案1】:

您可能需要将参数包装在一个类中,然后您可以使用DataMember 属性并指定IsRequired=true

[ServiceContract(Namespace = "http://myUrl.com")]  
public interface IMyWebService  
{  
   [OperationContract]  
   string DoSomething(RequestMessage request);  
}

[DataContract]
public class RequestMessage
{
   [DataMember(IsRequired = true)]
   public string param1 { get; set; }

   [DataMember(IsRequired = true)]
   public string param3 { get; set; }

   [DataMember(IsRequired = true)]
   public string param3 { get; set; }
}

【讨论】:

  • 这不是我希望阅读的答案,但感谢您说明必须如何完成。
  • 这不会在生成的 xsd 中将 OperationContract 中的 'request' 参数标记为 minOccurs="0" 吗?
  • @arathorn 我看到你在这里从来没有收到过回复。你提出了一个强项。我认为你是对的。 WCF 中的 OperationContract 参数要求的强制执行(据我所知)无法在不输入消息合同的情况下对“可空”类型执行。这是我找到的链接:social.msdn.microsoft.com/Forums/vstudio/en-US/… ...我认为您的观点是正确的。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多