是否可以使用WCF在wsdl中將字符串nillable的默認值更改爲false? 我找不到任何屬性或設置開箱即用,但是有可能通過使用屬性自行執行此操作來以某種方式擴展WCF?還是有更好的辦法?我需要把我的一些字符串屬性標記爲nillable = false,但不是全部。將WCF設置爲nillable = false
e.g:
[DataMember]
[Nillable(false)]
public string MyData{ get; set; }
是否可以使用WCF在wsdl中將字符串nillable的默認值更改爲false? 我找不到任何屬性或設置開箱即用,但是有可能通過使用屬性自行執行此操作來以某種方式擴展WCF?還是有更好的辦法?我需要把我的一些字符串屬性標記爲nillable = false,但不是全部。將WCF設置爲nillable = false
e.g:
[DataMember]
[Nillable(false)]
public string MyData{ get; set; }
[DataMember(IsRequired=True)]
這應該這樣做,我相信?
試過,它只設置成員在郵件中是必需的。一個字符串可以是null,並且仍然是消息的一部分。 – Markus
我同意。這不是*答案,WCF消費者(如SharePoint BCS)仍然會認爲該值能夠爲空 - 在嘗試將其用作標識時,它會抱怨。因此這不是解決這個問題的適當方法。 – user2246674
您必須編寫自己的WsdlExportExtension來實現此目的。
這裏有一個例子:
public class WsdlExportBehavior : Attribute, IContractBehavior, IWsdlExportExtension
{
public void ExportContract(WsdlExporter exporter, WsdlContractConversionContext context)
{ }
public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
{
var schemaSet = exporter.GeneratedXmlSchemas;
foreach (var value in schemaSet.GlobalElements.Values)
{
MakeNotNillable(value);
}
foreach (var value in schemaSet.GlobalTypes.Values)
{
var complexType = value as XmlSchemaComplexType;
if (complexType != null && complexType.ContentTypeParticle is XmlSchemaSequence)
{
var sequence = complexType.ContentTypeParticle as XmlSchemaSequence;
foreach (var item in sequence.Items)
{
MakeNotNillable(item);
}
}
}
}
private static void MakeNotNillable(object item)
{
var element = item as XmlSchemaElement;
if (element != null)
{
element.IsNillable = false;
}
}
public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, BindingParameterCollection parameters)
{ }
public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime client)
{ }
public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
{ }
public void Validate(ContractDescription description, ServiceEndpoint endpoint)
{ }
}
,並應用[WsdlExportBehavior]你的服務類。
希望這會有所幫助。
退房http://stackoverflow.com/questions/1589750/wcf-string-element-nillable-false – GTG
他似乎是通過設置他所有的字符串或全部必需的來清除虛假的,而不是真的是我想要做的。我設法讓WsdlExporter工作,但現在我需要在生成的模式和我的接口和類之間進行一些匹配,以獲得我的[Nillable]屬性。關於在哪裏可以找到這種信息的任何想法? – Markus
相關:http://stackoverflow.com/questions/9039850/wcf-wsdl-nillable-attributes/21266714#21266714 – Steven