C# WCF[DataContract]到gRPC[protobuf]的迁移
我正在尝试将我们的一些WCF服务迁移到gRPC,并在WCF数据契约包含复杂类型(如XmlElement)时面临挑战。例如,请参见以下WCF服务:C# WCF[DataContract]到gRPC[protobuf]的迁移,c#,wcf,migration,protocol-buffers,grpc,C#,Wcf,Migration,Protocol Buffers,Grpc,我正在尝试将我们的一些WCF服务迁移到gRPC,并在WCF数据契约包含复杂类型(如XmlElement)时面临挑战。例如,请参见以下WCF服务: [ServiceContract] public interface IService { [OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); } [DataContract] public class CompositeTy
[ServiceContract]
public interface IService
{
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}
[DataContract]
public class CompositeType
{
[DataMember]
public string StringValue { get; set; }
[DataMember]
public XmlElement XmlElementValue { get; set; }
// other data members
}
建议采用什么方法来确定如何将复杂类型(本例中为XmlElement)映射到协议缓冲区消息中的类型
[更新]
该场景是XML有效负载的验证。下面xml中的
节点对应于WCF服务合同中的XmlElement。根据要求提供以下有效载荷样本:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ValidaDocuments xmlns="http://www.myorganisation/Validation">
<request xmlns:a="http://www.myorganisation/Documents" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:ValidationType>All</a:ValidationType>
<a:BusinessDocument>
<a:DocumentName>ValidatorLodge</a:DocumentName>
<a:CreatedAt i:nil="true"/>
<a:ReceiptNumber i:nil="true"/>
<a:DocumentPartIdentifier>1</a:DocumentPartIdentifier>
<a:Document>
<xbrli:xbrl xsi:schemaLocation="http://xbrl.org/2006/xbrldi http://www.xbrl.org/2006/xbrldi-2006.xsd" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:tns="http://www.sbr.gov.au/ato/smsfar" xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xbrldt="http://xbrl.org/2005/xbrldt" xmlns:xlink="http://www.w3.org/1999/xlink">
<xbrli:context id="RP.Closing.JAUS.Instant">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Australian</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:OpeningAndClosingBalanceDimension">tns:Closing</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:instant>2018-06-30</xbrli:instant>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.Closing.JFOREIGN.Instant">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Foreign</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:OpeningAndClosingBalanceDimension">tns:Closing</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:instant>2018-06-30</xbrli:instant>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.Y0Plus.Closing.Instant">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:OpeningAndClosingBalanceDimension">tns:Closing</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:RelativePeriodDurationDimension">tns:Y0Plus</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:instant>2018-06-30</xbrli:instant>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.Deductible.JAUS">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Australian</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:TaxDeductibleStatusDimension">tns:Deductible</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.Deductible.JFOREIGN">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Foreign</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:TaxDeductibleStatusDimension">tns:Deductible</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.NonDeductible.JAUS">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Australian</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:TaxDeductibleStatusDimension">tns:NonDeductible</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.NonDeductible.JFOREIGN">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Foreign</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:TaxDeductibleStatusDimension">tns:NonDeductible</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.JAUS.AustNonResidentialRealProperty">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:AssetTypeDimension">tns:AustralianNonResidentialRealProperty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Australian</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.JAUS.AustralianShares">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:AssetTypeDimension">tns:AustralianShares</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Australian</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.JAUS.AustResidentialRealProperty">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:AssetTypeDimension">tns:AustralianResidentialRealProperty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Australian</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.JAUS.Other">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:AssetTypeDimension">tns:Other</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Australian</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.JAUS.OverseasRealProperty">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:AssetTypeDimension">tns:OverseasRealProperty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Australian</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.JAUS.OtherShares">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:AssetTypeDimension">tns:OtherShares</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:InternationalJurisdictionDimension">tns:Australian</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.LimitedPartners">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:EarlyInvestorDimension">tns:LimitedPartners</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.Investor">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:EarlyInvestorDimension">tns:Investor</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.Accumulation">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:SuperannuationPhaseDimension">tns:Accumulation</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.Retirement">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:SuperannuationPhaseDimension">tns:Retirement</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.Closing.Accumulation">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:OpeningAndClosingBalanceDimension">tns:Closing</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:SuperannuationPhaseDimension">tns:Accumulation</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:context id="RP.Closing.Retirement">
<xbrli:entity>
<xbrli:identifier scheme="http://www.myorganisation/tfn">34456782</xbrli:identifier>
<xbrli:segment>
<xbrldi:explicitMember dimension="tns:OpeningAndClosingBalanceDimension">tns:Closing</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:ReportPartyTypeDimension">tns:ReportingParty</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tns:SuperannuationPhaseDimension">tns:Retirement</xbrldi:explicitMember>
</xbrli:segment>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-07-01</xbrli:startDate>
<xbrli:endDate>2018-06-30</xbrli:endDate>
</xbrli:period>
</xbrli:context>
<xbrli:unit id="AUD">
<xbrli:measure>iso4217:AUD</xbrli:measure>
</xbrli:unit>
<xbrli:unit id="u1">
<xbrli:measure>iso4217:AUD</xbrli:measure>
</xbrli:unit>
<xbrli:unit id="u2">
<xbrli:measure>xbrli:pure</xbrli:measure>
</xbrli:unit>
<xbrli:unit id="Y">
<xbrli:measure>tns:Y</xbrli:measure>
</xbrli:unit>
<tns:Report.TargetFinancial.Year contextRef="RP" decimals="0" unitRef="Y">2018</tns:Report.TargetFinancial.Year>
<tns:OrganisationNameDetails>
<tns:OrganisationNameDetails.OrganisationalNameType.Code contextRef="RP">MN</tns:OrganisationNameDetails.OrganisationalNameType.Code>
<tns:OrganisationNameDetails.Currency.Code contextRef="RP">C</tns:OrganisationNameDetails.Currency.Code>
<tns:OrganisationNameDetails.OrganisationalName.Text contextRef="RP">RP_Org_Nm_Curr</tns:OrganisationNameDetails.OrganisationalName.Text>
</tns:OrganisationNameDetails>
<tns:Identifiers.AustralianBusinessNumber.Identifier contextRef="RP">13091394197</tns:Identifiers.AustralianBusinessNumber.Identifier>
<tns:AddressDetails>
<tns:AddressDetails.OverseasAddress.Indicator contextRef="RP">false</tns:AddressDetails.OverseasAddress.Indicator>
<tns:AddressDetails.Usage.Code contextRef="RP">POS</tns:AddressDetails.Usage.Code>
<tns:AddressDetails.Currency.Code contextRef="RP">C</tns:AddressDetails.Currency.Code>
<tns:AddressDetails.Line1.Text contextRef="RP">RP_POS_C_AddLine1</tns:AddressDetails.Line1.Text>
<tns:AddressDetails.Line2.Text contextRef="RP">RP_POS_C_AddLine2</tns:AddressDetails.Line2.Text>
<tns:AddressDetails.Line3.Text contextRef="RP" xsi:nil="true"/>
<tns:AddressDetails.Line4.Text contextRef="RP" xsi:nil="true"/>
<tns:AddressDetails.LocalityName.Text contextRef="RP">RP_POS_C_LocNm</tns:AddressDetails.LocalityName.Text>
<tns:AddressDetails.Postcode.Text contextRef="RP">2064</tns:AddressDetails.Postcode.Text>
<tns:AddressDetails.StateOrTerritory.Code contextRef="RP">NSW</tns:AddressDetails.StateOrTerritory.Code>
<tns:AddressDetails.CountryName.Text contextRef="RP" xsi:nil="true"/>
<tns:AddressDetails.Country.Code contextRef="RP" xsi:nil="true"/>
</tns:AddressDetails>
<tns:AddressDetails>
<tns:AddressDetails.OverseasAddress.Indicator contextRef="Auditor">false</tns:AddressDetails.OverseasAddress.Indicator>
<tns:AddressDetails.Usage.Code contextRef="Auditor">POS</tns:AddressDetails.Usage.Code>
<tns:AddressDetails.Currency.Code contextRef="Auditor">C</tns:AddressDetails.Currency.Code>
<tns:AddressDetails.Line1.Text contextRef="Auditor">Auditor_POS_C_AddLine1</tns:AddressDetails.Line1.Text>
<tns:AddressDetails.Line2.Text contextRef="Auditor">Auditor_POS_C_AddLine2</tns:AddressDetails.Line2.Text>
<tns:AddressDetails.Line3.Text contextRef="Auditor" xsi:nil="true"/>
<tns:AddressDetails.Line4.Text contextRef="Auditor" xsi:nil="true"/>
<tns:AddressDetails.LocalityName.Text contextRef="Auditor">Auditor_POS_C_LocNm</tns:AddressDetails.LocalityName.Text>
<tns:AddressDetails.Postcode.Text contextRef="Auditor">2065</tns:AddressDetails.Postcode.Text>
<tns:AddressDetails.StateOrTerritory.Code contextRef="Auditor">NSW</tns:AddressDetails.StateOrTerritory.Code>
<tns:AddressDetails.CountryName.Text contextRef="Auditor" xsi:nil="true"/>
<tns:AddressDetails.Country.Code contextRef="Auditor" xsi:nil="true"/>
</tns:AddressDetails>
</xbrli:xbrl>
</a:Document>
</a:BusinessDocument>
</request>
</ValidaDocuments>
</s:Body>
</s:Envelope>
全部的
验证器旅馆
1.
34456782
tns:澳大利亚
tns:结束
tns:报告方
2018-06-30
34456782
tns:外国
tns:结束
tns:报告方
2018-06-30
34456782
tns:结束
tns:Y0Plus
tns:报告方
2018-06-30
34456782
tns:澳大利亚
tns:报告方
tns:免赔额
2017-07-01
2018-06-30
34456782
tns:外国
tns:报告方
tns:免赔额
2017-07-01
2018-06-30
34456782
tns:澳大利亚
tns:报告方
tns:不可还原
2017-07-01
2018-06-30
34456782
tns:外国
tns:报告方
tns:不可还原
2017-07-01
2018-06-30
34456782
tns:澳大利亚非居民不动产
tns:澳大利亚
tns:报告方
2017-07-01
2018-06-30
34456782
tns:澳大利亚股票
tns:澳大利亚
tns:报告方
2017-07-01
2018-06-30
34456782
tns:澳大利亚居住不动产
tns:澳大利亚
tns:报告方
2017-07-01
2018-06-30
34456782
tns:其他
tns:澳大利亚
tns:报告方
2017-07-01
2018-06-30
34456782
tns:海外房地产
tns:澳大利亚
tns:报告方