2011-05-30 42 views
5

我已經有了wcf web服務(basicHttpBinding)。我們的Delphi7客戶端無法正確使用它。 我已經將WSDL與WCF演員拼合在一起。好。 Delphi7 wsdl導入器生成代理正確。WCF Delphi7方法輸入參數

現在我已經有了輸入參數的問題。它們總是有默認值(字符串爲空,int爲0)。

方法delphi7的輸出值正常。例如: :

 public string Test(string a) 
     { 
       return "Test"+a; 
     } 

此方法總是返回「測試」。我的日誌記錄系統修復了我在方法中有空的問題,所以問題是正確的傳輸輸入參數。

我不能undersand什麼是錯

編輯

代理:

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> 

EDIT2

我研究的http請求:

.NET

<Test> xmlns="http://tempuri.org/"><a>5555</a></Test> 

作品正確的;

Delph7

<Test xmlns="http://tempuri.org/"><xsd:a>5555</xsd:a></Test> 

空輸入參數。 問題在於前綴xsd

+0

不知道是什麼原因。你有什麼例外嗎?這項服務是否可以正常使用。網絡客戶端(測試目的)? – Aravind 2011-05-30 08:26:36

+0

沒有例外,服務與.net客戶端正常工作。輸入參數正確傳遞 – 2011-05-30 09:09:10

+1

請發佈wsdl和生成的代理類 – Sam 2011-05-30 23:17:00

回答

0

我已經完成了。 我通過THttpRio的事件處理程序OnBeforeExecute在每個服務sonsume中修復了soap信封。

我修復(刪除命名空間前綴),它的工作原理。 謝謝

4

Delphi使用RPC /編碼SOAP,而WCF使用文檔/文字/包裝SOAP。所以你需要告訴Delphi使用相同的格式。您可以通過在THttpRio.Converter.Options中指定soLiteralParams來執行此操作。

+0

我已經試過了。它沒有幫助 – 2011-05-30 08:12:56

+0

@Darin:你還可以在THTTPRIO.converter.Options中發佈指定solietralPrams的代碼說明嗎? – pradeeptp 2011-09-24 16:24:19