C#调用WebService详细教程:静态与动态引用
79 浏览量
更新于2024-09-01
收藏 134KB PDF 举报
"C# 调用WebService的方法"
在C#开发中,有时需要与远程服务进行交互,这时Web Service成为一种常见的通信方式。本文详细介绍了两种在.NET Framework环境下使用C#调用Web Service的方法:静态引用和服务代理的动态创建。
一、静态引用
静态引用是通过在项目中添加对Web Service的引用来实现调用。首先,你需要创建一个Web Service,定义一些方法,例如一个没有参数的`HelloWorld`方法和一个带参数的`Test`方法。将Web Service部署到IIS并确保其可被访问。
在Winform或Console应用程序中,你可以通过以下步骤添加对Web Service的静态引用:
1. 在项目上选择“添加引用”。
2. 右键点击“添加服务引用”。
3. 输入Web Service的URL。
4. 点击“确定”完成引用添加。
添加完成后,项目中会自动生成一个服务代理类,例如`CallWebService.TestWebSoapClient`。你可以通过实例化这个类并调用其方法来调用Web Service。以下是一个示例代码:
```csharp
private void btn_Static_Click(object sender, EventArgs e)
{
// 实例化服务代理类
CallWebService.TestWebSoapClient client = new CallWebService.TestWebSoapClient();
// 调用无参方法
string value1 = client.HelloWorld();
// 调用有参方法
string value2 = client.Test("有参方法");
// 显示结果
MessageBox.Show($"无参方法返回值:{value1},有参方法返回值:{value2}");
}
```
运行程序,点击按钮,即可看到Web Service方法的调用结果。
二、动态调用
静态引用虽然方便,但当Web Service的地址变更时,需要重新添加引用。为了解决这个问题,可以使用`System.ServiceModel`命名空间中的类动态创建服务代理。这种方式更灵活,但需要手动处理类型转换和错误处理。
动态调用的基本步骤如下:
1. 创建`System.ServiceModel.ChannelFactory`对象,指定Web Service的协定和服务终结点。
2. 使用`CreateChannel`方法创建服务代理实例。
3. 通过代理实例调用Web Service方法。
4. 不要忘记关闭通道和工厂,释放资源。
以下是一个动态调用的示例代码片段:
```csharp
using System.ServiceModel;
// 定义服务接口
[ServiceContract(Namespace = "http://yourwebservicenamespace.com")]
public interface ITestWebService
{
[OperationContract]
string HelloWorld();
[OperationContract]
string Test(string input);
}
private void btn_Dynamic_Click(object sender, EventArgs e)
{
// 创建终结点地址
EndpointAddress address = new EndpointAddress("http://yourwebserviceurl.com/Service.asmx");
// 创建绑定,这里以BasicHttpBinding为例
BasicHttpBinding binding = new BasicHttpBinding();
// 创建ChannelFactory并指定服务接口和绑定
ChannelFactory<ITestWebService> factory = new ChannelFactory<ITestWebService>(binding, address);
try
{
// 创建服务代理
ITestWebService proxy = factory.CreateChannel();
// 调用方法
string value1 = proxy.HelloWorld();
string value2 = proxy.Test("有参方法");
// 显示结果
MessageBox.Show($"无参方法返回值:{value1},有参方法返回值:{value2}");
// 关闭通道和工厂
((IClientChannel)proxy).Close();
factory.Close();
}
catch (Exception ex)
{
// 错误处理
MessageBox.Show($"调用出错:{ex.Message}");
((ICommunicationObject)proxy).Abort();
factory.Abort();
}
}
```
总结,C#调用Web Service提供了静态引用和动态创建服务代理两种方式。静态引用适合于Web Service地址稳定的情况,而动态调用则更适合于地址可能变化的场景。理解这两种方法可以帮助开发者更好地应对不同情况下的Web Service调用需求。
1315 浏览量
146 浏览量
119 浏览量
2024-10-26 上传
238 浏览量
150 浏览量
223 浏览量
weixin_38544781
- 粉丝: 9
- 资源: 940
最新资源
- ADO.NET 2.0高级编程
- 一个项目经理的经验总结(网络工程)
- 代码大全是一本成就多少程序员的书啊。
- 芯片sp3232中文介绍
- oracle9i dataguard
- 李亚非老师的神经网络教程
- 无损失”数据格式,对于500万像素的数码相机,一个RAW文件保存了500万个点的感光数据。而TIFF格式在相机内部就处理过,就好比说SONY相机以色彩艳丽著称,富士相机在人像上色彩把握很稳重等,这些都是影像处理器对色彩特别处理的结果。
- 局域网IP冲突问题的探讨
- 深入编程内幕(VC++)
- 上网速度太慢怎么办 21个全面提速技巧
- 深入浅出之正则表达式
- Weblogic管理员手册
- C++ Professional Programmer's Handbook
- MATLAB编程风格指南
- linux 进程间通信
- DHTMLandJavaScript