Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为<;GovTalkMessage xmlns=";http://www.govtalk.gov.uk/CM/envelope"&燃气轮机;_C# - Fatal编程技术网

C# 为<;GovTalkMessage xmlns=";http://www.govtalk.gov.uk/CM/envelope"&燃气轮机;

C# 为<;GovTalkMessage xmlns=";http://www.govtalk.gov.uk/CM/envelope"&燃气轮机;,c#,C#,请帮助我使用C#生成根XML以发送到服务器 相似的 <?xml version="1.0" encoding="utf-8"?> <GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope"> <EnvelopeVersion>2.0</EnvelopeVersion> <Header> <MessageDetails>

请帮助我使用C#生成根XML以发送到服务器

相似的

<?xml version="1.0" encoding="utf-8"?>
  <GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope">
    <EnvelopeVersion>2.0</EnvelopeVersion>
    <Header>
        <MessageDetails>
            <Class>SendDocument</Class>
            <Qualifier>request</Qualifier>
            <Function>submit</Function>
      <TransactionID>5</TransactionID>
            <CorrelationID></CorrelationID>
        </MessageDetails>
        <SenderDetails>
            <IDAuthentication>
                <SenderID>[USER]</SenderID>
                <Authentication>
                    <Method>clear</Method>
                    <Value>[PASS]</Value>
                </Authentication>
            </IDAuthentication>
        </SenderDetails>
    </Header>
    <Body>
        <Message xmlns="urn:g3.ge:dea:call:SendDocument:v1">
           ................
        </Message>
    </Body>
  </GovTalkMessage>

2
发送文件
要求
提交
5.
[用户]
清楚的
[通过]
................

事先感谢您的回答

这是一个完整的XML文件

<?xml version="1.0" encoding="utf-8"?>
<GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope">
    <EnvelopeVersion>2.0</EnvelopeVersion>
    <Header>
        <MessageDetails>
            <Class>SendDocument</Class>
            <Qualifier>request</Qualifier>
            <Function>submit</Function>
            <CorrelationID></CorrelationID>
        </MessageDetails>
        <SenderDetails>
            <IDAuthentication>
                <SenderID>[USER]</SenderID>
                <Authentication>
                    <Method>clear</Method>
                    <Value>[PASS]</Value>
                </Authentication>
            </IDAuthentication>
        </SenderDetails>
    </Header>
    <Body>
        <Message xmlns="urn:g3.ge:dea:call:SendDocument:v1">
            <Container xmlns="http://www.dea.gov.ge/schemas/2011/dx">
                <Reference>GUID</Reference>
                <DocDate>yyyy-MM-dd HH:mm:ss</DocDate>
                <DocNumber>string</DocNumber>
                <Persons>
                    <Person>
                        <OriginID>1</OriginID>
                        <FirstName>string</FirstName>
                        <LastName>string</LastName>
                        <Position>string</Position>
                        <PersonType>1</PersonType>
                        <ResolutionText>string (max length: 1000 chars)</ResolutionText>
                        <OrgUnit>string (max length: 4000 chars)</OrgUnit>
                    </Person>
                    <Person>
                        <OriginID>447</OriginID>
                        <FirstName>string</FirstName>
                        <LastName>string</LastName>
                        <Position>string</Position>
                        <PersonType>2</PersonType>
                        <ResolutionText>string (max length: 1000 chars)</ResolutionText>
                        <OrgUnit>string (max length: 4000 chars)</OrgUnit>
                    </Person>
                </Persons>
                <Subject>string</Subject>
                <MainDoc>
                    <Doc>
                        <FileName></FileName>
                        <ContentType></ContentType>
                        <Signature>
                            <Type></Type>
                            <Data>BASE64BINARY</Data>
                        </Signature>
                        <Data>BASE64BINARY</Data>
                        <DocType></DocType>
                    </Doc>
                </MainDoc>
                <RespondTo>
                    <OriginalDoc>
                        <Reference>GUID</Reference>
                        <Type/>
                    </OriginalDoc>
                </RespondTo>
                <OriginalReference>GUID</OriginalReference>
                <AttachedDocs>
                    <Doc>
                        <FileName></FileName>
                        <ContentType></ContentType>
                        <Signature>
                            <Type></Type>
                            <Data>BASE64BINARY</Data>
                        </Signature>
                        <Data>BASE64BINARY</Data>
                        <DocType></DocType>
                    </Doc>
                    <Doc>
                        <FileName></FileName>
                        <ContentType></ContentType>
                        <Signature>
                            <Type></Type>
                            <Data>BASE64BINARY</Data>
                        </Signature>
                        <Data>BASE64BINARY</Data>
                        <DocType></DocType>
                    </Doc>
                    <Doc>
                        <FileName></FileName>
                        <ContentType></ContentType>
                        <Signature>
                            <Type></Type>
                            <Data>BASE64BINARY</Data>
                        </Signature>
                        <Data>BASE64BINARY</Data>
                        <DocType></DocType>
                    </Doc>
                </AttachedDocs>
                <Signature>
                    <Type></Type>
                    <Data>BASE64BINARY</Data>
                </Signature>
            </Container>
        </Message>
    </Body>
</GovTalkMessage>

2
发送文件
要求
提交
[用户]
清楚的
[通过]
指南
yyyy MM dd HH:MM:ss
一串
1.
一串
一串
一串
1.
字符串(最大长度:1000个字符)
字符串(最大长度:4000个字符)
447
一串
一串
一串
2.
字符串(最大长度:1000个字符)
字符串(最大长度:4000个字符)
一串
Base64二进制
Base64二进制
指南
指南
Base64二进制
Base64二进制
Base64二进制
Base64二进制
Base64二进制
Base64二进制
Base64二进制

首先,您需要为XML生成XSD模式。政府网关应为您的特定提交域提供XSD。如果没有,您可以使用XML菜单中“创建模式”下的Visual Studio XML工具从XML文件生成一个相当好的模式

拥有架构文件后,可以使用Windows SDK中的XSD.exe工具生成服务类。如果您有多个模式文件(例如,一个用于GovTalkMessage包装器,另一个用于特定域,如我下面的示例中的税务局),您可以将它们合并到一个服务类文件中:

如果XSD工具安装在其典型位置,则可以运行以下命令:

 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64>xsd.exe /c c:\Schemas\GovTalkMessage.xsd C:\ServiceClasses\IREnvelope.xsd /o:C:\GovTalkApplication
一旦您有了XML的服务类,您就可以从数据中创建新对象,并相当容易地将它们序列化为XML。在这个代码示例中,我使用配置文件中的AppSettings来存储各种常量值,并使用一个名为_localData的私有数据表来保存我的身体数据,我将其放入IR R68有效负载(在元素中)。我还在这里使用log4net记录器,这是偶然的。CreateIRBody方法是您必须为需要包含的任何负载编写的:

   public GovTalkMessage CreateRequestMessage(string env)
        {
            try
            {
                log.Debug("CreateRequestMessage called");
                GovTalkMessageBody Body = new GovTalkMessageBody();

                IR68 ir68 = new IR68(_localData);
                log.Debug("Creating IR68 body ...");

                IRenvelope ire = new IRenvelope();
                ire = ir68.CreateIRBody();

                //serialize ire into XmlElement and then set Body.Any = 

                XmlElement xe = GiftAidSubmissionProcessController.SerializeIREnvelope(ire);
                XmlElement[] XmlElementIRenvelope = new XmlElement[1];
                XmlElementIRenvelope[0] = xe;

                Body.Any = XmlElementIRenvelope;

                //GovTalkDetails

                GovTalkMessageGovTalkDetailsChannelRoutingChannel Channel = new GovTalkMessageGovTalkDetailsChannelRoutingChannel();
                Channel.Version = ConfigurationManager.AppSettings["ChannelVersion"];
                Channel.Product = ConfigurationManager.AppSettings["ChannelProduct"];
                Channel.ItemElementName = ItemChoiceType.URI;
                Channel.Item = ConfigurationManager.AppSettings["ChannelURI"];

                GovTalkMessageGovTalkDetailsChannelRouting ChannelRouting = new GovTalkMessageGovTalkDetailsChannelRouting();
                ChannelRouting.Channel = Channel;

                GovTalkMessageGovTalkDetailsKey Key = new GovTalkMessageGovTalkDetailsKey();
                Key.Type = ConfigurationManager.AppSettings["GovTalkDetailsKeyType"];
                Key.Value = ConfigurationManager.AppSettings["GovTalkDetailsKey"];

                GovTalkMessageGovTalkDetails Details = new GovTalkMessageGovTalkDetails();

                GovTalkMessageGovTalkDetailsChannelRouting[] ChannelRoutings = 
                    new GovTalkMessageGovTalkDetailsChannelRouting[1];
                ChannelRoutings[0] = ChannelRouting;
                Details.ChannelRouting = ChannelRoutings;

                GovTalkMessageGovTalkDetailsKey[] Keys = new GovTalkMessageGovTalkDetailsKey[1];
                Keys[0] = Key;
                Details.Keys = Keys;

                string[] TargetDetails = new string[1];
                TargetDetails[0] = ConfigurationManager.AppSettings["GovTalkDetailsTargetOrganistion"];
                Details.TargetDetails = TargetDetails;

                //GovTalk Header

                GovTalkMessageHeaderSenderDetailsIDAuthenticationAuthentication Authentication = new GovTalkMessageHeaderSenderDetailsIDAuthenticationAuthentication();
                switch (ConfigurationManager.AppSettings["SenderAuthenticationMethod"])
                {
                    case "MD5":
                        Authentication.Method = GovTalkMessageHeaderSenderDetailsIDAuthenticationAuthenticationMethod.MD5;
                        break;
                    case "clear":
                        Authentication.Method = GovTalkMessageHeaderSenderDetailsIDAuthenticationAuthenticationMethod.clear;
                        break;
                    case "W3Csigned":
                        Authentication.Method = GovTalkMessageHeaderSenderDetailsIDAuthenticationAuthenticationMethod.W3Csigned;
                        break;
                }
                Authentication.Role = ConfigurationManager.AppSettings["SenderAuthenticationRole"];
                Authentication.Item = ConfigurationManager.AppSettings["SenderAuthenticationValue"];

                GovTalkMessageHeaderSenderDetailsIDAuthentication IDAuthentication = new GovTalkMessageHeaderSenderDetailsIDAuthentication();
                IDAuthentication.SenderID = ConfigurationManager.AppSettings["SenderID"];

                GovTalkMessageHeaderSenderDetailsIDAuthenticationAuthentication[] Authentications = new GovTalkMessageHeaderSenderDetailsIDAuthenticationAuthentication[1];
                Authentications[0] = Authentication;
                IDAuthentication.Authentication = Authentications;

                GovTalkMessageHeaderSenderDetails SenderDetails = new GovTalkMessageHeaderSenderDetails();
                SenderDetails.IDAuthentication = IDAuthentication;

                GovTalkMessageHeaderMessageDetails MessageDetails = new GovTalkMessageHeaderMessageDetails();
                MessageDetails.Class = ConfigurationManager.AppSettings["MessageDetailsClass"];
                MessageDetails.Qualifier = GovTalkMessageHeaderMessageDetailsQualifier.request;
                MessageDetails.FunctionSpecified = true;
                MessageDetails.Function = GovTalkMessageHeaderMessageDetailsFunction.submit;
                MessageDetails.TransformationSpecified = true;
                MessageDetails.Transformation = GovTalkMessageHeaderMessageDetailsTransformation.XML;
                MessageDetails.GatewayTest = ConfigurationManager.AppSettings["MessageDetailsGatewayTest"];
                if (env == "local")
                {
                    MessageDetails.GatewayTimestampSpecified = true;
                    MessageDetails.GatewayTimestamp = DateTime.Now;
                }
                else
                {
                    MessageDetails.GatewayTimestampSpecified = false;
                    MessageDetails.GatewayTimestamp = DateTime.MinValue; }

                GovTalkMessageHeader Header = new GovTalkMessageHeader();
                Header.MessageDetails = MessageDetails;
                Header.SenderDetails = SenderDetails;

                GovTalkMessage GovTalkMessage = new hmrcclasses.GovTalkMessage();

                GovTalkMessage.EnvelopeVersion = ConfigurationManager.AppSettings["GovTalkMessageEnvelopeVersion"];
                GovTalkMessage.Header = Header;
                GovTalkMessage.GovTalkDetails = Details;
                GovTalkMessage.Body = Body;

                log.Info("GovTalkMessage created successfully");

                return GovTalkMessage;
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }

        }
希望这能帮助你开始

  • 复制整个XML(CRTL+A CTRL+C)
  • 打开VisualStudio并创建新类
  • 单击菜单-编辑->粘贴特殊->将XML粘贴为类
  • 之后,您可以使用XmlSerializer生成该XML

    var entity = new GovTalkMessage();
    //fill entity properties with data
    
    var writer = new StringWriter();
    var serializer = new XmlSerializer(typeof(GovTalkMessage));
    
    serializer.Serialize(writer, entity);
    
    var xmlText = writer.ToString();
    //and so on...
    

    只需生成一个服务引用。无需手动执行SOAP。@Paata-信封包装器和负载(
    Message xmlns=…
    )是否有XSD?另外,您使用的是什么协议?这是一个Xml Web服务(例如Pox/专有),还是一个基于队列/文件的消息?