Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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# 如何在.Net中的WCF客户端Web服务调用中包含CDATA节?_C#_.net_Web Services_Wcf_Cdata - Fatal编程技术网

C# 如何在.Net中的WCF客户端Web服务调用中包含CDATA节?

C# 如何在.Net中的WCF客户端Web服务调用中包含CDATA节?,c#,.net,web-services,wcf,cdata,C#,.net,Web Services,Wcf,Cdata,我被要求创建一个wcf客户机,该客户机访问一个自定义java Web服务,我无法修改它。我需要使用webservice方法,如: ... 配置模板模板模板 这是一个配置字符串 ... 在属性“ConfigValue”中,我通常需要保存字符串,但我还需要能够将节点内的整个XML文档保存为CDATA格式,如: 。。。 配置模板模板模板 模块X的配置模板 ... ]]> ... 我创建了一个对该webservice的Visual Studio项目的服务引用,并创建了代理类,我可以使用第一个代码部

我被要求创建一个wcf客户机,该客户机访问一个自定义java Web服务,我无法修改它。我需要使用webservice方法,如:


...
配置模板模板模板
这是一个配置字符串
...
在属性“ConfigValue”中,我通常需要保存字符串,但我还需要能够将节点内的整个XML文档保存为CDATA格式,如:

。。。
配置模板模板模板
模块X的配置模板
...
]]>
...
我创建了一个对该webservice的Visual Studio项目的服务引用,并创建了代理类,我可以使用第一个代码部分中描述的webservice,但问题是,我希望包含在请求中的CDATA是自动编码的,因此不再可用,因为我无法更改目标Web服务:

![CDATA[
?xml version=“1.0”encoding=“UTF-8”standalone=“是”?
配置
模块X的标题配置模板/标题
...
/配置
]]
我需要以某种方式修改XML文本属性的序列化,或者抑制编码


您知道如何解决这个问题吗?

将XML转换为Base64字符串,然后传输它。在接收端进行简单的重新转换将为您提供正确的XML字符串。

一个解决方案不是很好,但它的工作原理是修改生成的C#服务引用。在类型的分部类中,我看到如下内容:

公共部分类tKeyValuePair:对象,System.ComponentModel.INotifyPropertyChanged
{
私有字符串键域;
私有字符串值字段;
/// 
[System.Xml.Serialization.XmlAttributeAttribute(DataType=“NMTOKEN”)]
公共字符串密钥
{
得到
{
返回这个.keyField;
}
设置
{
this.keyField=值;
此。RaisePropertyChanged(“密钥”);
}
}
/// 
[System.Xml.Serialization.XmlTextAttribute()]
公共字符串值
{
得到
{
返回此.valueField;
}
设置
{
this.valueField=值;
本.增加财产变动(“价值”);
}
}
提示!我使用以下命令行创建了引用,因为生成的代码与Visual Studio服务引用不同:

svcutilhttp://server/service?wsdl /nologo/d:C:\temp\/enableDataBinding/wrapped
当我将“public string Value”和“private string valueField”的引用代码修改为XmlNode[]类型时,可以通过C代码创建一个XmlNode数组,其中一个XmlNode具有文本内容或CDATA内容,如:

XmlNode test=newxmlcatasection(“cdata中的文本”);

如果您打算将有效的XML作为CData,这也可以使用。

配置的接收端或使用者是一个不受我控制的内部java组件。以下答案对您有用吗?我解决了这个问题,但级别不同。我得到了服务器端jaxb使用的信息,因此如果内容是html编码的,或者是包含在CDATA中的,这与此无关。下面的答案中描述了另一种解决方案-但是您提供的链接非常有用。