話說是這樣的,這兩天開發(fā)一個短信發(fā)送功能,客戶給了一個 Web Service 地址(沒有文檔),讓我調(diào)用就可以發(fā)送了,
我在VS 2013添加了服務(wù)引用,一切正常,可是執(zhí)行代理方法時,怎么都報錯
難道我的方法名錯了嗎?可是VS自動生成的不可能錯,參數(shù)也不可能錯(客戶核對過)。
我用瀏覽器打開這個 web service,描述是一個 AXIS web service,難道 .NET 調(diào)用 AXIS web service 就不行?看了下 WSDL 也是標(biāo)準(zhǔn)的啊。
于是我嘗試網(wǎng)上說的動態(tài)調(diào)用方式,折騰來去反射時就報錯,算了看看其它方法吧。
我想找一個 web service 調(diào)試工具吧,如果再不成功就告訴客戶 web service 是不是有問題?我就找到了 .NET WebService Studio,很輕量的一個工具,幾十K。
填好EndPoint -> 點擊GET獲取到方法和參數(shù)列表 -> 選中Input中每個參數(shù)輸入相應(yīng)的值 -> 點擊Invoke執(zhí)行,我靠,Output中居然成功了。
點擊 Request/Response看看請求和響應(yīng)的數(shù)據(jù)
這下好辦了,把 Request 中的 SOAP 放到 Fiddler 中去POST一下,成功!
VS生成的代理類調(diào)用不成功,應(yīng)該是少了一個HTTP HEADER參數(shù) SOAPAction(不是SOAP HEADER),這個參數(shù)有一定意義,在WSDL中也可以找到,在跨平臺調(diào)用時尤為常見,大家可以網(wǎng)上搜搜。
解決方案:
1. 自己組合一個SOAP xml,然后用 HttpClient或WebRequest 來調(diào)用 Web Service,然后解析返回的XML即可;
2. 在 .NET WebService Studio 中點擊 WSDLs & PRoxy,里面有代理類和客戶端代碼,復(fù)制到項目中使用。
|
新聞熱點
疑難解答