2012-10-17 83 views
1

我想從c#編程Magento。 在第一步中,我將服務引用添加到Visual Studio中的項目中。但我沒有MagentoService類。當我下載wdsl文件並通過Visual Studio命令行中的wsdl.exe進行轉換時,我擁有它。 所以,在與服務引用的情況下,我的代碼看起來是這樣的:用SOAP和c編程Magento#

MagentoSer.Mage_Api_Model_Server_HandlerPortTypeClient client = new MagentoSer.Mage_Api_Model_Server_HandlerPortTypeClient(); 
var session= client.login("id", "password"); 
client.call(session, "catalog_category.tree", null); 
client.endSession(session); 

一切正常,沒事。 但是,當我試圖使用

MagentoSer.Mage_Api_Model_Server_HandlerPortTypeClient client = new MagentoSer.Mage_Api_Model_Server_HandlerPortTypeClient(); 
var session= client.login("id", "password"); 
client.call(session, "product_stock.list", "qqaz"); 
client.endSession(session); 

異常出現「錯誤操作‘稱之爲’反序列化的回覆消息的身體」 指定的類型無法識別:名稱=「地圖」,命名空間=」 http://xml.apache.org/xml-soap 」在。「}

當從PHP一切測試工作確定。 我發現這兩篇文章 http://codeblow.com/questions/php-web-service-in-c-invoke-function-returns-null/ PHP Web Service in C# : Invoke() function returns null 但我不能趕上大局。

那些是關於對象ARGS在

public object call(string sessionId, string resourcePath, object args); 

或約從功能輸出? 還有一件事。在搜索Web時,我找到了代碼示例(Magneto help),使用了奇怪的數組(如complexFilter)。如果通過Visual Studio連接到wsdl文件,我如何獲得它們?這是否在Magento管理員權限中向我公開?

問候

普熱Staniszewski

+0

看起來像來自magento的soap v1,如果你有可能性,在magento中使用soap v2 api,那麼從c#使用它會更好。如果沒有,我有一些代碼,適用於v1。 – Giedrius

回答

0

在Magento管理面板嘗試switch on the WSI Compliance mode

+0

非常感謝。請告訴我,更改WS-I設置後是否需要由管理員執行更多操作?或者啓用後它應該生成wsdl:和xsd的標籤:就像那樣? 是否有任何緩存要刪除或什麼? 最好的問候 –

+0

改變後我有新的東西。我無法登錄。 讀取XML數據時,超過了最大的可命名字符計數配額(16384)。名稱表是用於存儲XML處理期間遇到的字符串的數據結構 - 具有非重複元素名稱,屬性名稱和屬性值的長XML文檔可能會觸發此配額。可以通過更改創建XML閱讀器時使用的XmlDictionaryReaderQuotas對象上的MaxNameTableCharCount屬性來增加此配額。 –

+0

我不能幫你,因爲我不是C#程序員:) – vsushkov