我需要翻译的内容:
我有一个使用basicHttpBinding协议的WCF web服务。我们的Delphi7客户端无法正确地使用它。
我已经通过WCF extras来压缩了WSDL文件。好的,Delphi7 wsdl导入程序可以正确地生成代理。
现在我遇到的问题是输入参数总是有默认值(对于字符串为空,对于整数为0)。
但是Delphi7可以正常获取方法的输出数据。
public string Test(string a)
{
return "Test"+a;
}
这个方法总是返回"Test"。我的日志记录系统显示我得到了一个空的“a”参数,所以问题在于正确传递输入参数。
我不明白出了什么问题。
编辑
代理:
ISyncer = interface(IInvokable)
['{D46862B0-BDD3-8B80-35A8-A2AC69F24713}']
function Test(const a: String): String; stdcall;
end;
调用:
Sync:=(dmMain.HTTPRIO1 as ISyncer);
test:=Sync.Test('5555');
dmMain.HTTPRIO1在选项中具有soLiteralParams属性:
初始化:
InvRegistry.RegisterInvokeOptions(TypeInfo(ISyncer), ioLiteral);
调用后我收到了一条异常信息:
Error deserializtion message body for operation Test.
Operation formatter detects ivalid message body. Expecting node type "Element"
with name "Test" and namespace "http://tempuri.org". Actually node type "Element"
with name "xsd:String" and namespace "http://w3.org/2001/XMLSchema"
WSDL 片段:
<xsd:element name="Test">
−
<xsd:complexType>
−
<xsd:sequence>
<xsd:element minOccurs="0" name="a" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
−
<xsd:element name="TestResponse">
−
<xsd:complexType>
−
<xsd:sequence>
<xsd:element minOccurs="0" name="TestResult" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
编辑2
我正在研究HTTP请求:
.NET
<Test> xmlns="http://tempuri.org/"><a>5555</a></Test>
工作正确;
Delphi 7
<Test xmlns="http://tempuri.org/"><xsd:a>5555</xsd:a></Test>
空输入参数。 问题出在前缀xsd。