話說是這樣的,這兩天開發一個簡訊發送功能,客戶給了一個 Web Service 地址(沒有文檔),讓我調用就可以發送了,我在VS 2013添加了服務引用,一切正常,可是執行代理方法時,怎麼都報錯RPC Message receiveExtMTPushRequest1 in operation rec...
話說是這樣的,這兩天開發一個簡訊發送功能,客戶給了一個 Web Service 地址(沒有文檔),讓我調用就可以發送了,
我在VS 2013添加了服務引用,一切正常,可是執行代理方法時,怎麼都報錯
- RPC Message receiveExtMTPushRequest1 in operation receiveExtMTPush1 has an invalid body name receiveExtMTPush. It must be receiveExtMTPush1
難道我的方法名錯了嗎?可是VS自動生成的不可能錯,參數也不可能錯(客戶核對過)。
我用瀏覽器打開這個 web service,描述是一個 AXIS web service,難道 .NET 調用 AXIS web service 就不行?看了下 WSDL 也是標準的啊。
於是我嘗試網上說的動態調用方式,折騰來去反射時就報錯,算了看看其它方法吧。
我想找一個 web service 調試工具吧,如果再不成功就告訴客戶 web service 是不是有問題?我就找到了 .NET WebService Studio,很輕量的一個工具,幾十K。
填好EndPoint -> 點擊GET獲取到方法和參數列表 -> 選中Input中每個參數輸入相應的值 -> 點擊Invoke執行,我靠,Output中居然成功了。
點擊 Request/Response看看請求和響應的數據
這下好辦了,把 Request 中的 SOAP 放到 Fiddler 中去POST一下,成功!
VS生成的代理類調用不成功,應該是少了一個HTTP HEADER參數 SOAPAction(不是SOAP HEADER),這個參數有一定意義,在WSDL中也可以找到,在跨平臺調用時尤為常見,大家可以網上搜搜。
解決方案:
1. 自己組合一個SOAP XML,然後用 HttpClient或WebRequest 來調用 Web Service,然後解析返回的XML即可;
2. 在 .NET WebService Studio 中點擊 WSDLs & Proxy,裡面有代理類和客戶端代碼,複製到項目中使用。