首页 新闻 赞助 找找看

使用HttpRequest调用WebService带参数 在线等

0
悬赏园豆:140 [已关闭问题] 关闭于 2013-03-14 14:31

如何使用HttpRequest调用WebService 代码如下

string url = "http://localhost:1857/Test.asmx/HelloWorld";
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            //request.Credentials = CredentialCache.DefaultCredentials;
            request.Timeout = 10000;
            byte[] data = Encoding.UTF8.GetBytes(Pars);//参数
            request.ContentLength = data.Length;
            Stream writer = request.GetRequestStream();
            writer.Write(data, 0, data.Length);
            writer.Close();

            WebResponse response = request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            String retXml = sr.ReadToEnd();
            sr.Close();
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(retXml);

            return doc;

WebService里面是这样的

 /// <summary>
    /// Test 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    // [System.Web.Script.Services.ScriptService]
    public class Test : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld(string xml)
        {
            return "Hello World";
        }
    }

web.config 

 <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>

问题来了 不带参数可以访问到WebService 现在业务必须要参数 肿么该

JCdon的主页 JCdon | 初学一级 | 园豆:2
提问于:2012-12-28 15:10
< >
分享
所有回答(9)
0

不明白,你第一段代码没有用到WCF。

Launcher | 园豆:45045 (高人七级) | 2012-12-28 15:22

用Post方式访问WebService

支持(0) 反对(0) JCdon | 园豆:2 (初学一级) | 2012-12-28 15:38

@刘小备: 把参数放Content里,类似这样 arg1=sdfsdf&arg2=3434.就是用 RequestStream.Write

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-12-28 15:41

@Launcher: 不明白怎么加

支持(0) 反对(0) JCdon | 园豆:2 (初学一级) | 2012-12-28 15:49

@刘小备: byte[] data = Encoding.UTF8.GetBytes("xml=sdfsdfds");//参数

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-12-28 16:05

@Launcher: 还是不行 要不我把例子给你帮我弄下

支持(0) 反对(0) JCdon | 园豆:2 (初学一级) | 2012-12-28 16:53

@刘小备: 不行,就是请求不对。你用 Fiddler 抓个包,看看请求发送时候的格式是啥,按照那个写就行了。Asp.net 生成的 Web Service有个help页,直接通过它就可以调用服务。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-12-28 17:18
0

不清楚,帮顶一下。

陀螺- | 园豆:74 (初学一级) | 2012-12-28 15:26

- -.

支持(0) 反对(0) JCdon | 园豆:2 (初学一级) | 2012-12-28 16:55
0

他一在是写了一个webservice,然后通过get,post的访问方式在访问这个webservice

Rich.T | 园豆:3440 (老鸟四级) | 2012-12-28 15:33

right

支持(0) 反对(0) JCdon | 园豆:2 (初学一级) | 2012-12-28 16:54
0

ajax访问webservice把参数post过去不好么?

青 蛙 | 园豆:655 (小虾三级) | 2012-12-28 16:14

不用ajax

支持(0) 反对(0) JCdon | 园豆:2 (初学一级) | 2012-12-28 16:54
0

你在WCF那个服务项目中添加webservice的服务引用,不就行了啊

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-28 16:15

你很强大

支持(0) 反对(0) JCdon | 园豆:2 (初学一级) | 2012-12-28 16:53
0

看你的代码应该是支持带参数的方法调用的,你说不行是什么原因,最好能给出具体的错误,或者你可以单步执行调试,看看是出现了什么问题。

I,Robot | 园豆:9783 (大侠五级) | 2012-12-29 03:43
0

不会,Mark先,配楼主等答案。

Gamain | 园豆:357 (菜鸟二级) | 2012-12-29 11:53
0

1. 抓包得到WebService提交之后的XML报文
2. 自己组装XML报文,并在包体报文的属性中添加你要带的参数
3. 把组装后的报文直接Post到你WebService的源地址
第一步得到报文后,剩下就很好处理了~~~

牦牛 | 园豆:218 (菜鸟二级) | 2012-12-30 13:31
0

首先你用fillder2先把请求的报文抓下来,然后再httprequest中拼接报文,然后提交报文,再得到报文后,进行报文解析

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <PROC_OR_GETLABSETBYDEPTCODE_Request xmlns="XXXX">
            <request xmlns="">
                <FDEPTCODE>04</FDEPTCODE>//这里就是请求的参数,直接填写相应的值即可
            </request>
        </PROC_OR_GETLABSETBYDEPTCODE_Request>
    </s:Body>
</s:Envelope>

上面是我抓到的包,你需要抓你那个webservice的包

az235 | 园豆:8483 (大侠五级) | 2013-01-05 09:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册