首页 新闻 会员 周边

我用PHP写了个webservice,请问.net 如何通过POST方法使用wsdl里的方法

0
悬赏园豆:50 [已解决问题] 解决于 2010-08-26 14:03

.net webservice中用 aa.asmx/方法名 就可以访问方法了,但是aa.wsdl呢?

我不需要添加web服务引用的那种方式、麻烦高手指点。

肥嘟嘟左卫门的主页 肥嘟嘟左卫门 | 初学一级 | 园豆:70
提问于:2010-08-23 10:59
< >
分享
最佳答案
0

在.net中 post 你会吗?

如果你会,我就不说了,我就告诉你如何编写soap格式,对于简单的soap格式,你可以用soapui这个工具生成post的内容格式,然后把这个拷贝到你的代码中,更改相应的值就行了.

如果比较复杂的话,比如包含安全,那就需要专门的soap包来协助你解析.

收获园豆:30
Launcher | 高人七级 |园豆:45045 | 2010-08-23 11:18
post提交页面我会的。但是现在是POST提交的是webservice。要是以.asmx结尾的也没什么难点,关键是以.wsdl结尾的。。我如何POST给他传参数,如何使用他的方法?而不是用soap方式。
肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2010-08-23 11:31
@肥嘟嘟左卫门:你post的地址是把 ?wsdl 去掉的部分.post 的内容是一个soap格式的xml字符串,如下: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:act="http://action.tianxiang.com.cn/"> <soapenv:Header/> <soapenv:Body> <act:getMessage> <!--Optional:--> <arg0> <!--Zero or more repetitions:--> <reqDetailList> <!--Optional:--> <seqnumber>1</seqnumber> <!--Optional:--> <bankname>鎷涘晢閾惰鑲′唤鏈夐檺鍏徃鍖椾含娓呭崕鍥敮琛�/bankname> <!--Optional:--> <acctname>渚晱</acctname> <!--Optional:--> <acctno>6225880121640099</acctno> </reqDetailList> <!--Optional:--> <batchid>2005</batchid> <!--Optional:--> <corpno>11001049</corpno> <!--Optional:--> <num>1</num> <!--Optional:--> <workdate>20100517</workdate> </arg0> </act:getMessage> </soapenv:Body> </soapenv:Envelope>
Launcher | 园豆:45045 (高人七级) | 2010-08-23 12:15
我POST的地址是例如 www.hcr.com:90/test.wsdl 这就是webservice我没有?wsdl
肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2010-08-23 13:46
@肥嘟嘟左卫门:我咋访问不了?你这个url不对吧,咋会带 . 你在 ie 中输入: http://www.hcr.com:90/test.wsdl 或者 http://www.hcr.com:90/test.wsdl?wsdl 或者 http://www.hcr.com:90/test?wsdl 你看看哪个地址能正确返回信息?
Launcher | 园豆:45045 (高人七级) | 2010-08-23 14:03
http://www.hcr.com:90/test.wsdl 这个你是访问不了的,不好意思这是本地的。
肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2010-08-23 14:11
@肥嘟嘟左卫门:那我给你的那三个url,你测试没?到底哪个能用? 你有SoapUI工具吗?如果方便,你装一个,然后用SoapUI来创建一个soap的客户端.
Launcher | 园豆:45045 (高人七级) | 2010-08-23 14:22
这个url是我自己写的wbeservice.然后我在.net里添加web服务使用都没有问题,我现在只想知道如何POST方式,而不是soap方式。假如是.net创建的webservice可以这样来使用,如: HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://www.hcr.com:90/i.asmx/a?name=ss");//a webservice方法名 而我现在用PHP写的webservice没有.asmx文件。有的只是.wsdl如http://www.hcr.com:90/test.wsdl 而我的方法怎么访问。
肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2010-08-23 14:45
@肥嘟嘟左卫门:如果你要使用 url get参数的形式,那么你需要修改你的PHP写的 web service,把它从RPC模式改为Rest模式. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://www.hcr.com:90/test.wsdl "); request.Method = "POST"; 然后把你的soap消息编码为字节 byte[] 后,用 request.GetRequestStream().Write 写入请求.
Launcher | 园豆:45045 (高人七级) | 2010-08-23 15:07
恩,我一开始也是这样想的, using System; using System.Web.Services; using System.Collections.Generic; using System.Text; using System.Web; using System.IO; using System.Xml; using System.Collections; using System.Net; using System.Xml.Serialization; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { WebProxy myProxy = new WebProxy(); ASCIIEncoding encoding = new ASCIIEncoding(); Hashtable ht = new Hashtable(); ht.Add("a", 1); ht.Add("b", 2); string postData = "a=1,b=2"; byte[] data = encoding.GetBytes(postData); HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://www.hcr.com:90/test2.wsdl/add"); myRequest.Method = "POST"; myRequest.ContentType = "application/x-www-form-urlencoded"; myRequest.ContentType = "text/xml; charset=utf-8"; myRequest.ContentLength = 0; HttpWebResponse rep = (HttpWebResponse)myRequest.GetResponse(); if (rep.StatusCode == HttpStatusCode.OK) { StreamReader sr = new StreamReader(rep.GetResponseStream()); Label1.Text = sr.ReadToEnd(); } } } 看我的路径,我想用add方法。但是总提示404也就是未找到。 wsdl: <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.hcr.com:90" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="test2" targetNamespace="http://www.hcr.com:90"> <wsdl:message name="addRequest"> <wsdl:part name="a" type="xsd:int"/> <wsdl:part name="b" type=&qu
肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2010-08-23 15:16
我现在比较忙,你能不能下载一个SoapUI,然后用这个工具去生成消息格式,不用你自己在这里瞎折腾.另外,不要用 ASCIIEncoding,用UTF8,或者GB2312.ASCII会把某些字符搞没了.
Launcher | 园豆:45045 (高人七级) | 2010-08-23 16:08
其他回答(4)
0
收获园豆:5
Astar | 园豆:40805 (高人七级) | 2010-08-23 11:07
引用当然是可以的,但是我需要的是POST提交方式。所以我不需要引用,我就是想知道如何POST给WSDL执行里面的方法和传递参数。
支持(0) 反对(0) 肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2010-08-23 11:13
0

不知道如何解答,不过我认识很 多做.net架构的,估计可以帮得上忙吧

收获园豆:5
Salley | 园豆:200 (初学一级) | 2010-08-23 13:47
0

我来mark一下

收获园豆:5
wdwwtzy | 园豆:114 (初学一级) | 2010-08-23 15:21
0

mark

收获园豆:5
蝗虫的大腿 | 园豆:22 (初学一级) | 2010-08-23 16:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册