C#-WebService协议通讯_Net5
1.C#-Socket_TCP、Socket_UDP、WebSocket、WebService、WCF、WebAPI、MQTT的基础使用2.C#-TCP协议通讯(一)-TCPClientHelper_Net53.C#-TCP协议通讯(二)-处理TCP粘包与拆包4.C#-UDP协议通讯(一)-UDPClientHelper_Net55.C#-UDP协议通讯(二)-优化丢包问题6.C#-Http协议通讯(一)-目录7.C#-Http协议通讯(三)-HttpWebRequest8.C#-Http协议通讯(五)-HttpClient
9.C#-WebService协议通讯_Net5
10.C#-WCF协议通讯_Net511.C#-WebSocket协议通讯_Net512.MQTT学习笔记(C#)-MQTTnet13.C#-网络通讯框架(一)-HPSocket14.C#-网络通讯框架(二)-DotNetty_Net715.C#-网络通讯框架(三)-SignalR(SignalRCore版)_Net7代码地址:https://gitee.com/qq28069933146_admin/csharp_networkprotocol_research
演示地址:C#-WebService通讯示例演示
一、创建WebService服务
1、创建解决方案
2、添加WebService服务
3、运行展示:
4、接口调用说明
二、调用WebService服务
1、引用式调用
(1)创建测试程序
优先选择.Net framework运行时,服务发现Core支持;Core对WebService支持力度也差。
(2)引用WebService服务
a、net framework运行时:
b、net5运行时:
c、net5怎么查看服务:
(3)使用案例
接口
// 接口
public class WebService1 : System.Web.Services.WebService
{
// 无参
[WebMethod(Description = "欢迎界面")]
public string HelloWorld()
{
return "Hello World!我是执笔小白";
}
// 多参数
[WebMethod(Description = "求和方法")]
public int Add(int a, int b)
{
return a + b;
}
// 参数是实体类-要使用http协议请把参数和返回值都设置成int或string等常见类型,多参数用字节流实现。
[WebMethod(Description = "求差方法")]
public int Sub(Tc1 tc1)
{
return tc1.num1 - tc1.num2;
}
}
// 类库
public class Tc1
{
/// <summary>
/// 第一个数
/// </summary>
public int num1 { get; set; }
/// <summary>
/// 第二个数
/// </summary>
public int num2 { get; set; }
}
调用
/// <summary>
/// 欢迎 -Async
/// </summary>
private void button1_Click(object sender, EventArgs e)
{
ServiceReference1.WebService1SoapClient requestClient = new ServiceReference1.WebService1SoapClient();
textBox1.Text = requestClient.HelloWorld();
}
/// <summary>
/// Add方法
/// </summary>
private void button2_Click(object sender, EventArgs e)
{
ServiceReference1.WebService1SoapClient requestClient = new ServiceReference1.WebService1SoapClient();
int a = Convert.ToInt32(textBoxa.Text.Trim());
int b = Convert.ToInt32(textBoxb.Text.Trim());
textBox1.Text = requestClient.Add(a, b).ToString();
}
/// <summary>
/// Sub方法
/// </summary>
private void button3_Click(object sender, EventArgs e)
{
ServiceReference1.WebService1SoapClient requestClient = new ServiceReference1.WebService1SoapClient();
ServiceReference1.Tc1 tc1 = new ServiceReference1.Tc1(); // 数据格式
tc1.num1 = Convert.ToInt32(textBox3.Text.Trim());
tc1.num2 = Convert.ToInt32(textBox2.Text.Trim());
textBox1.Text = requestClient.Sub(tc1).ToString();
}
2、报文调用(Http报文或SOAP报文)
(1)Http报文:
a、Http访问帮助类(HttpWebRequest版)
C#-Http协议通讯(三)-HttpWebRequest_Get、Post、Put、Delete方法
b、访问示例
// post
private void button1_Click(object sender, EventArgs e)
{
string Method = "HelloWorld";
List<ReqBody> reqBodys = new List<ReqBody>();
string result = RequestCom.WebServiceHttpPost(url, Method, reqBodys,Encoding.UTF8);
textBox5.Text = result;
}
// post
private void button2_Click(object sender, EventArgs e)
{
string Method = "Add";
// a=string&b=string
List<ReqBody> reqBodys = new List<ReqBody>();
ReqBody reqBody1 = new ReqBody();
ReqBody reqBody2 = new ReqBody();
reqBody1.Key=labela.Text.Trim();
reqBody1.Value = textBoxa.Text.Trim();
reqBody2.Key = labelb.Text.Trim();
reqBody2.Value = textBoxb.Text.Trim();
reqBodys.Add(reqBody1);
reqBodys.Add(reqBody2);
string result = RequestCom.WebServiceHttpPost(url, Method, reqBodys, Encoding.UTF8);
textBox5.Text = result;
}
(2)SOAP报文:
a、SOAP访问帮助类(HttpWebRequest版)
C#-Http协议通讯(三)-HttpWebRequest_Get、Post、Put、Delete方法
b、访问示例
private void button1_Click(object sender, EventArgs e)
{
string soap_Namespace = "soap";
string soap_EnvelopeXml = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"";
string soap_HeaderXml = string.Empty;
string soap_BodyXml = " <HelloWorld xmlns=\"http://tempuri.org/\" />";
Encoding requestCoding = Encoding.UTF8;
string result = RequestCom.WebServiceHttpPost(url, soap_Namespace, soap_EnvelopeXml, soap_HeaderXml, soap_BodyXml, requestCoding);
textBox5.Text = result;
}
private void button2_Click(object sender, EventArgs e)
{
string a = textBoxa.Text.Trim();
string b = textBoxb.Text.Trim();
string soap_Namespace = "soap";
string soap_EnvelopeXml = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"";
string soap_HeaderXml = string.Empty;
string soap_BodyXml = $" <Add xmlns=\"http://tempuri.org/\"><a>{a}</a><b>{b}</b></Add>";
Encoding requestCoding = Encoding.UTF8;
string result = RequestCom.WebServiceHttpPost(url, soap_Namespace, soap_EnvelopeXml, soap_HeaderXml, soap_BodyXml, requestCoding);
textBox5.Text = result;
}
private void button3_Click(object sender, EventArgs e)
{
string a = textBoxa.Text.Trim();
string b = textBoxb.Text.Trim();
string soap_Namespace = "soap";
string soap_EnvelopeXml = "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"";
string soap_HeaderXml = string.Empty;
string soap_BodyXml = $" <Sub xmlns=\"http://tempuri.org/\"><tc1><num1>{a}</num1><num2>{b}</num2></tc1></Sub>";
Encoding requestCoding = Encoding.UTF8;
string result = RequestCom.WebServiceHttpPost(url, soap_Namespace, soap_EnvelopeXml, soap_HeaderXml, soap_BodyXml, requestCoding);
textBox5.Text = result;
}
三、特殊用法-支持传输自定义的【数据集】(DataSet.xsd)
1、WebService项目-右键-添加新项-“数据集”
2、创建一个信息载体
3、添加WebService方法
// 参数DataSet、返回结果参数DataSet(WebService不能返回DataTable)
[WebMethod(Description = "DataSet测试")]
public DataSetTB1 DataSetTest(DataSetTB1 tc1)
{
DataSetTB1 dsTB1 = new DataSetTB1();
dsTB1 = tc1;
foreach(DataRow dr in dsTB1.DTTest1.Rows) // 把每条学生的数据都改成一班
{
dr["Class"] = "一班";
}
return dsTB1;
}
4、客户端调用服务中的该方法
/// <summary>
/// DataSet测试
/// </summary>
private void button4_Click(object sender, EventArgs e)
{
ServiceReference1.WebService1SoapClient requestClient = new ServiceReference1.WebService1SoapClient();
ServiceReference1.DataSetTB1 dsTB1 = new ServiceReference1.DataSetTB1();
for (int i = 0; i < 5; i++)
{
DataRow dataRow = dsTB1.DTTest1.NewRow();
{
dataRow["ID"] = (i + 1).ToString();
dataRow["Name"] = "姓名" + (i + 1).ToString();
dataRow["Class"] = "";
}
dsTB1.DTTest1.Rows.Add(dataRow);
}
ServiceReference1.DataSetTB1 dsTBRe = new ServiceReference1.DataSetTB1();
//requestClient.DataSetTestAsync();
dsTBRe = requestClient.DataSetTest(dsTB1);
List<Xue> xue = DataTools.DataSetToIList<Xue>(dsTBRe, 0);
textBox1.Text = JsonConvert.SerializeObject(xue);
}
5、运行结果
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/17248617.html
合集:
C#-网络通信
分类:
C#+通讯_网络通信
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!