`
isiqi
  • 浏览: 16538250 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

WinForm如何调用Web Service

阅读更多

今天看了李天平关于WinForm调用Web Service的代码,我自己模仿做一个代码基本都是复制粘贴的,结果不好使。郁闷的是,又碰到那个该死的GET调用Web Service,我想肯定又是Web.config需要配置,结果WinForm没有这个配置文件,奇怪,为什么人家的就好使,我写的就不好使呢。

上网搜吧,唉,找个两个多小时,基本都是和我一样的代码,互相转载。根本没人提代码好不好使,也没人提正确的用法。就在我要放弃的时候,终于发现原来是在 Web ServiceWeb.config里配置的(下面滴2步),真是欲哭无泪啊,大家可要注意啊。

好了,把过程详细说下吧。

1、建立项目WebServiceWinForm项目,这里起名为WinFormInvokeWebService,如图所示,

2Service1.asmx代码为:(这部分其实和上篇的代码是一样的)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Data;

namespace WebService1

{

/// <summary>

/// Service1 的摘要说明

/// </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 Service1 : System.Web.Services.WebService

{

//无参方法

[WebMethod]

public string HelloWorld()

{

return "Hello World";

}

//有参方法1

[WebMethod]

public int Add(int a, int b)

{

return a + b;

}

//有参方法2

[WebMethod]

public int Sum(int x)

{

int sum = 0;

for (int i = 0; i <= x; i++)

{

sum += i;

}

return sum;

}

// 返回一个复合类型

[WebMethod]

public Student GetStudentByStuNo(string stuNo)

{

if(stuNo=="001")

return new Student { StuNo = "001", StuName = "张三" };

if(stuNo=="002")

return new Student { StuNo = "002", StuName = "李四" };

return null;

}

//返回返回泛型集合的

[WebMethod]

public List<Student> GetList()

{

List<Student> list = new List<Student>();

list.Add(new Student() { StuNo = "001", StuName = "张三" });

list.Add(new Student() { StuNo = "002", StuName = "李四" });

list.Add(new Student() { StuNo = "003", StuName = "王五" });

return list;

}

//返回DataSet

[WebMethod]

public DataSet GetDataSet()

{

DataSet ds = new DataSet();

DataTable dt = new DataTable();

dt.Columns.Add("StuNo", Type.GetType("System.String"));

dt.Columns.Add("StuName", Type.GetType("System.String"));

DataRow dr = dt.NewRow();

dr["StuNo"] = "001"; dr["StuName"] = "张三";

dt.Rows.Add(dr);

dr = dt.NewRow();

dr["StuNo"] = "002"; dr["StuName"] = "李四";

dt.Rows.Add(dr);

ds.Tables.Add(dt);

return ds;

}

}

public class Student

{

public string StuNo { get; set; }

public string StuName { get; set; }

}

}

3、在WebServiceweb.config文件的system.web节下面加上以下配置。如果不添加在运行手工发送HTTP请求调用WebService(利用GET方式)时,总是出现“远程服务器返回错误: (500) 内部服务器错误。”就是这个该死的错误,让我浪费2个多小时

<webServices>

<protocols>

<add name="HttpPost" />

<add name="HttpGet" />

</protocols>

</webServices>

4、在WinForm应用程序里添加Web引用,有人会发现选择WinForm项目里只能添加服务引用,我当初也是这么认为后来,后来发现在做异步的调用的时候有些方法实在点不出来,所以这里说下如何添加Web引用,选择项目WinFormInvokeWebService右键->添加服务引用,弹出以下对话框

(1)选择高级

(2)选择添加web引用

(3)选择“此解决方案中的Web服务”

(4)选择Service1

(5)在web引用名里输入一个服务名称,这里使用默认的名称localhost,点添加引用

5、添加3Windows窗体,

(1)Form1拖放的控件为:

Form1的代码为:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WinFormInvokeWebService

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

localhost.Service1 service = new localhost.Service1();

localhost.Student s = service.GetStudentByStuNo("002");

MessageBox.Show("学号:" + s.StuNo + ",姓名:" + s.StuName);

}

private void button2_Click(object sender, EventArgs e)

{

new Form2().Show();

}

private void button3_Click(object sender, EventArgs e)

{

new Form3().Show();

}

}

}

(2)Form2拖放的控件为:


Form2
的代码为:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

//导入此命名空间

using System.Net;

using System.Xml;

using System.IO;

using System.Web; //先添加System.Web引用再导入此命名空间

namespace WinFormInvokeWebService

{

public partial class Form2 : Form

{

public Form2()

{

InitializeComponent();

}

//手工发送HTTP请求调用WebService-GET方式

private void button1_Click(object sender, EventArgs e)

{

//http://localhost:3152注意你的地址可能和我的不一样,运行WebService看下你的端口改下

string strURL = "http://localhost:3152/Service1.asmx/GetStudentByStuNo?stuNo=";

strURL += this.textBox1.Text;

//创建一个HTTP请求

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);

//request.Method="get";

HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();

Stream s = response.GetResponseStream();

XmlTextReader Reader = new XmlTextReader(s);

Reader.MoveToContent();

string strValue = Reader.ReadInnerXml();

strValue = strValue.Replace("&lt;", "<");

strValue = strValue.Replace("&gt;", ">");

MessageBox.Show(strValue);

Reader.Close();

}

//手工发送HTTP请求调用WebService-POST方式

private void button2_Click(object sender, EventArgs e)

{

//http://localhost:3152注意你的地址可能和我的不一样,运行WebService看下你的端口改下

string strURL = "http://localhost:3152/Service1.asmx/GetStudentByStuNo";

//创建一个HTTP请求

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);

//Post请求方式

request.Method = "POST";

//内容类型

request.ContentType = "application/x-www-form-urlencoded";

//参数经过URL编码

string paraUrlCoded = HttpUtility.UrlEncode("stuNo");

paraUrlCoded += "=" + HttpUtility.UrlEncode(this.textBox1.Text);

byte[] payload;

//URL编码后的字符串转化为字节

payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);

//设置请求的ContentLength

request.ContentLength = payload.Length;

//获得请求流

Stream writer = request.GetRequestStream();

//将请求参数写入流

writer.Write(payload, 0, payload.Length);

//关闭请求流

writer.Close();

//获得响应流

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

<span st

分享到:
评论
1 楼 virusea 2011-11-20  
请问怎么通过获取这个数据然后通过dataset显示出来!

相关推荐

    winform调用webservice 手机号码所在地查询

    首先,我们需要了解WinForm调用Web Service的基本步骤: 1. **添加Web引用**:在Visual Studio中,打开WinForm项目,右键点击“解决方案资源管理器”中的“服务引用”,选择“添加服务引用”。输入Web Service的...

    C#写的winform调用webservice详细教程

    ### C# WinForm 调用 WebService 实现天气预报应用详细教程 #### 一、引言 在本文中,我们将详细介绍如何使用 C# 在 WinForm 应用程序中调用 WebService 来获取天气预报数据。对于初学者来说,理解和实现这一过程...

    C#使用Http Post方式传递Json数据字符串调用Web Service

    C#中通过直接添加引用的方来调用Web Service的方式不够灵活,故采取手动发送Http请求的方式来调用Web Service。最后选择使用Post方式来调用Web Service

    推荐_WINFORM与WEB的直接交互.rar

    本文将深入探讨如何在C# WinForm应用中实现与Web服务的直接交互,而无需通过传统的Web Service作为中介。我们将重点关注标题中的"WINFORM与WEB的直接交互.rar"资源,它包含两个关键文件:`form.cs`和`INSWEB.cs`。 ...

    winform 调用webservice

    综上所述,"winform调用webservice"涉及了.NET桌面应用开发、Web服务的调用与交互等多个技术点。通过学习这个示例,开发者可以理解如何在WinForm应用中集成Web服务,实现数据的远程获取和处理,为自己的应用程序增添...

    在WinForm程序中调用WebService

    首先,你需要在Visual Studio中新建一个ASP.NET Web Application项目,并选择"Web Service"模板。 2. **定义服务方法**: - 在新建的WebService项目中,如`MyBankService.cs`,你需要定义服务的方法,这些方法将被...

    Winform调用WebService简单示例

    2. 调用Web服务方法。假设有一个名为`GetData`的Web方法,接受一个字符串参数并返回另一个字符串,可以这样调用: ```csharp string input = textBox1.Text; string result = client.GetData(input); ``` 3. 处理...

    web service第一次启动慢

    在Windows应用程序(WinForm)中,经常需要调用外部的web service以获取数据或执行操作。然而,在第一次访问时,可能会遇到启动慢的问题。这通常归因于以下几个可能的因素: 1. DNS解析时间:当应用程序尝试连接到...

    WinForm调用Webservice之(手机号码所在地查询)

    在C#中,我们可以使用`System.Web.Services`命名空间中的`SoapHttpClientProtocol`类(通常是`WebService`的子类)来调用Web Service。首先,添加服务引用,生成代理类,然后通过实例化代理类并调用其方法来执行服务...

    WebForm调用WinForm.rar

    例如,可以使用ASP.NET Web Service(ASMX)或WCF(Windows Communication Foundation)服务来创建一个接口,使得WebForm能通过HTTP请求调用WinForm中的方法。 3. **ActiveX调用**:文件名"2)active调用"可能指的...

    vs2012 winform 天气预报 webservices

    右键点击项目 -&gt; "添加服务引用",输入Web Service的URL,VS2012会自动生成代理类,让你可以直接调用Web Service的方法。 4. **调用Web Service方法**:在代码视图中,实例化生成的代理类,然后调用其提供的获取...

    C#Web服务Asp.net调用winFrom调用

    本主题将深入探讨如何在ASP.NET Web服务中调用WinForms应用程序的功能,以实现更复杂的系统集成和交互。 首先,我们需要理解Web服务的基本概念。Web服务是一种基于互联网的软件应用,它能够通过标准协议(如SOAP或...

    Winform调用WebService

    本应用实例结合了这两者,展示了如何在Winform应用中调用WebService来获取邮政编码对应的地址信息。 首先,我们需要了解Winform中调用WebService的基本步骤: 1. 添加服务引用:在Visual Studio中,右键点击项目,...

    亮剑.NET深入体验与实战精要2

    7.7.1 .NET的WinForm调用Web Service 295 7.7.2 手动发送HTTP请求调用Web Service 295 7.8 实现异步调用Web Service 297 7.9 如何保证Web Service的安全 299 7.9.1 通过SoapHeader来增强 Web Service的安全性 299 ...

    亮剑.NET深入体验与实战精要3

    7.7.1 .NET的WinForm调用Web Service 295 7.7.2 手动发送HTTP请求调用Web Service 295 7.8 实现异步调用Web Service 297 7.9 如何保证Web Service的安全 299 7.9.1 通过SoapHeader来增强 Web Service的安全性 299 ...

    Webform与Winform交互

    1. **Web服务(Web Service)**:Web服务是一种基于HTTP协议的通信方式,它可以暴露特定功能供其他应用调用。在Winform中,可以创建一个Web服务客户端来调用Webform上的服务,实现数据传递。反之,Webform也可以通过...

    C#语言Winform的webService框架

    在HYAppFrame中,Web Service作为服务器端的核心组件,提供了多种服务接口,使得客户端(Winform应用程序)能够远程调用,执行服务器端的功能,如数据处理、业务逻辑等。 ### 2. Winform应用程序框架 Winform是...

    C#动态调用Web服务的3种方法

    ### C#动态调用Web服务的三种方法 在C#应用程序开发中,特别是在Windows Forms (WinForm)项目中,我们经常需要与Web服务进行交互。当这些服务位于本地时,通常可以通过简单地在项目的Web References中添加引用并...

Global site tag (gtag.js) - Google Analytics