原文: getWeatherbyCityName(city),服务器没法处理请求。 ---> 未将对象引用设置到对象的实例。 web
解决方法:不要直接使用 “服务引用” , 添加为 “Web 引用”小程序
最近用C#在winform中作一个天气预报的小程序,在网上搜了不少资料,包括现成的程序,如http://blog.csdn.net/qishuangquan/article/details/6039287,但运行到getWeatherbyCityName(city),都会出错,提示服务器没法处理请求。 ---> 未将对象引用设置到对象的实例。在网上搜索该问题的缘由,也没找到答案,怀疑.NET Framework版本的问题,换了3.0、3.五、4.0都同样,固然2.0是没有Service Reference的,但有Web Reference,在Web Reference上添加webservice地址,修改weathertest.Weather.WeatherWebServiceSoapClient w = new weathertest.Weather.WeatherWebServiceSoapClient("WeatherWebServiceSoap");为weathertest.Weather.WeatherWebService webc = new weathertest.Weather.WeatherWebService();调试竟然成功了,后来想.NET Framework4.0中有没有Web Reference,在网上搜了下找到了,原来Web Reference须要这样设置才出现:数组
⑴在须要调用WebService的项目上,点击鼠标右键,选择添加Service Reference,进入'Add Service Reference‘界面服务器
⑵点击'Advanced'按钮,进入'Service Reference Settings'界面测试
⑶点击'Add Web Reference'按钮,进入'Add Web Reference'界面this
①在'URL'文本框中,填写须要引用的WebService的地址(例如:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx)spa
②点击右边的绿色方框按钮,程序会自动前往给定的地址查找WebService服务.net
③在'Web Reference Name'文本框中,自定义这次添加的WebService的名称(例如:Weather)调试
④点击'Add Reference'按钮,程序自动将找的WebService添加的当前的项目中,并自动放在Web References文件夹中.orm
本身写了个程序,测试成功,主要代码以下:
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.ServiceModel;
using System.Runtime.InteropServices;
namespace weather2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
weather2.Weather.WeatherWebService webc = new weather2.Weather.WeatherWebService();
string[] s = new string[23];//声明一个string数组存放其返回的结果
string city = this.textBox1.Text.Trim();//得到文本框1的内容
s = webc.getWeatherbyCityName(city);
MessageBox.Show("西安气象:" + "\r\n" +"天气:" +s[6] + "\r\n" + "温度:" + s[5]);
}
catch (Exception e1)
{
MessageBox.Show(e1.ToString());
}
}
}
}
测试图见下:
回到”服务器没法处理请求。 ---> 未将对象引用设置到对象的实例“这个问题,估计是VS版本的问题,由于网上看人家用的是VS2008,但我用的是VS2010,无论怎么样,这个问题仍是给了个交代,能够安照上面的方法访问天气WebService。