C# 为<;GovTalkMessage xmlns=";http://www.govtalk.gov.uk/CM/envelope"&燃气轮机;
请帮助我使用C#生成根XML以发送到服务器 相似的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>
<?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;
}
}
希望这能帮助你开始
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/专有),还是一个基于队列/文件的消息?