1.javaè°ç¨webserviceä¾å
2.ç¨C#åç®åçWeb Service
3.asp 调用Webservice 免费wsdl接口
4.深夜写完的获取获代码——快速实现.NET(.net framework/.net core+)动态访问webservice服务
javaè°ç¨webserviceä¾å
ç°å¨å¤§å¤æ°é¡¹ç®é½ä¼ç¨å°springï¼æ以éæ© CXF æ¡æ¶ï¼cxfè½å¾å¥½çåspringç»åå¨å®ç½ä¸è½½ææ°ç xcf 3.0.3 ç½ç« /xml/ns/javaee"
xmlns:xsi="/xml/ns/javaee
/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>cxfS</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxfS</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
</web-app>
------------------------------------------------------------------------------------------------
é¨ç½²é¡¹ç®ï¼ç¶åè¿è¡Test.java
å¨æµè§å¨éé¢è¾å ¥ ponents = null;
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion
// è¿æ¥å符串常é
const string szConn = "server=(local)\\taoyi;uid=sa;pwd=;"
+ "initial catalog=mydata;data source=taoyi";
[WebMethod]
public String About()
{
return "è¿æ¯ä¸ä¸ªC#ç¼åçWeb Serviceæ¼ç¤ºç¨åº!";
}
// è¿åå ¶ä¸ä¸ä¸ªWebServiceDemo表
[WebMethod]
public DataSet GetServiceDemoTable()
{
DataSet sqlDs = new DataSet();
DataAccess dataAcc = new DataAccess(szConn);
string szSql = "Select * From WebServiceDemo";
sqlDs = dataAcc.GetDataset(szSql,"Demo");
return sqlDs;
}
// è¿åç±ç¨æ·æå®çæ¥è¯¢
[WebMethod]
public DataSet GetByUser(string szCommandText)
{
DataSet sqlDs = new DataSet();
DataAccess dataAcc = new DataAccess(szConn);
sqlDs = dataAcc.GetDataset(szCommandText);
return sqlDs;
}
}
æ¯ä¸æ¯å¾ç®åå¦ï¼å°±åªè¿ä¹ç¹ï¼åµåµ~ï¼ä¸è¿ä¹å¯ä»¥è¯´æé®é¢çäºãè¿ä¸ªç±»ä¸å£°æäºä¸ä¸ªWEBæ¹æ³ï¼æ没æåè§å¢ï¼æ¯ä¸ªæ¹æ³çåé¢é½å äº[WebMethod]ï¼è¡¨ç¤ºè¯¥æ¹æ³ä¸ºWEBæ¹æ³ãåµåµï¼å¦æä½ æ³è¦ä½ åçå½æ°å¯ä»¥è®©WEBåºç¨ç¨åºè°ç¨çè¯ï¼è¿ä¸ªå¯ä¸è½å°çå¦~ï¼ä¸ç¶WEBåºç¨ç¨åºå°±æ æ³è°ç¨çã
å°æ¤ä¸ä¸ªWEBæå¡å°±å®æäºï¼ç¹å»è¿è¡ççï¼å¦æ没ä»ä¹éçè¯ï¼å°±ä¼åºç°å¦ä¸çWEB页é¢æå¡æè¿°ï¼
Service1
The following operations are supported. For a formal definition, please review the Service Description.
* GetByUser
* GetServiceDemoTable
* About
.....ï¼ä¸é¢è¿æå¾å¤ï¼
å ¶ä¸ä»£æå·çå°±æ¯å åå¨å½æ°åå äº[WebMethod]çå½æ°ãå¨åºç°å¨é¡µé¢ä¸ä½ å¯ä»¥åå»ç¸åºçå½æ°ï¼ç¶åå°±ä¼è·³å°è°ç¨é¡µé¢ï¼ä½ å¯ä»¥å¨ç¸åºçææ¬æ¡ä¸ï¼å¦æå½æ°æåæ°çè¯ï¼è¾å ¥ç¸åºçåæ°ï¼ç¹èè°ç¨æé®ï¼é£ä¹å°±å¯ä»¥çå°å½æ°è¿åçç»æäºï¼åææ¯å½æ°è°ç¨æ éçè¯ï¼ï¼ä¸è¿å ¨æ¯XMLæ ¼å¼çææ¬ãæ¯å¦æçGetServiceDemoTableå½æ°è°ç¨çç»æå¦ä¸ï¼
<?xml version="1.0" encoding="utf-8" ?>
- <DataSet xmlns=":xml-msdata">
- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">
- <xs:complexType>
- <xs:choice maxOccurs="unbounded">
- <xs:element name="Demo">
- <xs:complexType>
- <xs:sequence>
<xs:element name="ID" type="xs:int" minOccurs="0" />
<xs:element name="szUser" type="xs:string" minOccurs="0" />
<xs:element name="szSex" type="xs:string" minOccurs="0" />
<xs:element name="szAddr" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
- <NewDataSet xmlns="">
- <Demo diffgr:id="Demo1" msdata:rowOrder="0">
<ID>1</ID>
<szUser>taoyi</szUser>
<szSex>ç·</szSex>
<szAddr>åå·æ³¸å·</szAddr>
</Demo>
- <Demo diffgr:id="Demo2" msdata:rowOrder="1">
<ID>2</ID>
<szUser>xiner</szUser>
<szSex>女</szSex>
<szAddr>åå·å®å®¾</szAddr>
</Demo>
</NewDataSet>
</diffgr:diffgram>
</DataSet>
å°æ¤ä¸ºè³ï¼Web Serviceç¨åºå°±å·²ç»ç®æ¯å®æäºã
ä¸é¢è¦åçæ¯åä¸ä¸ªWEBåºç¨ç¨åºæ¥æµè¯æåçè¿ä¸ªWeb Serviceäºï¼ççè½ä¸è½è¾¾å°æ³è¦çç»æã建ç«Webåºç¨ç¨åºçæ¥éª¤å¦ä¸ï¼
ä¸ãæ°å»ºä¸ä¸ªASP.Net Web Applicationå·¥ç¨ï¼ä¸å建Web Serviceç第ä¸æ¥ä¸æ ·ï¼åªæ¯å·¥ç¨ç±»åä¸ä¸æ ·ç½¢äºãæè¿éå·¥ç¨å为WebServiceDemoTest,å®æ´ç为pub\wwwroot\WebserviceDemoTest)ä¸çæäºæéæ件ã
äºãå¨è®¾è®¡è§å¾ä¸æå¼WebForm1.aspxæ件ï¼å¨éé¢æ¾ç½®ä¸ä¸ªpanel容å¨ï¼ä¸ºäºè¾¾å°æµè¯çç®çï¼æ们éè¦ä¸ä¸ªæå¡ç«¯æé®åä¸ä¸ªæå¡ç«¯ææ¬æ¡ï¼åå«è°ç¨æ们å¨Web Serviceä¸åçä¸ä¸ªå½æ°ï¼å¦å¤ï¼ä¸ºäºå±ç¤ºè°ç¨æ¹æ³æå¾è¾¾çæ°æ®ï¼è¿éè¦ä¸ä¸ªæå¡ç«¯æ ç¾æ§ä»¶åä¸ä¸ªDataGridæ§ä»¶ã页é¢çå¸ç½®å°±éä¾¿ä½ äºï¼æ³æä¹æ¾ç½®å°±æä¹æ¾ç½®ï¼åªè¦è½è¾¾å°æ¼ç¤ºçç®çå°±è¡ã
ä¸ãå¼ç¨å ååçWeb Serviceç¨åºï¼èåæ¥éª¤å¦ä¸project->add web reference...ï¼ç¶åè¾å ¥æ们Web Serviceçè·¯å¾ï¼è¿éæ¯编写webservice接口。
1、源码webservice的数据配置文件web.config的system.web节点添加如下代码<webServices>
<protocols>
<add name="HttpPost"/>
<add name="HttpGet"/>
</protocols>
</webServices>
深夜写完的代码——快速实现.NET(.net framework/.net core+)动态访问webservice服务
访问webservice服务时,通常采用服务引用方式,获取获然而此法较为繁琐,源码尤其在服务更新时,数据正弦公式指标源码需要手动更新引用并重新发布,获取获极为不便。源码现今,数据已有多例展示了在.NET Framework环境中实现动态访问webservice服务,获取获却鲜少见到适用于.NET Core及更高版本的源码案例。本篇文章旨在提供一个通用解决方案,数据支持.NET Framework、获取获.NET Core或以上环境的源码动态访问webservice服务接口,以供参考。数据
首先,创建一个webservice服务作为测试平台。该服务提供三种接口:无参数接口、字符串参数接口、拳皇c源码包含多个实体类参数(实体类包含嵌套和集合)及返回带有嵌套和集合的返回数据。此设计基本涵盖了webservice服务的主要场景。
测试实体类已备好,用于验证服务接口。
服务已启动并就绪。
接下来,开发请求端程序,支持.NET Framework 4.6.1+、.NET Core+及.NET 5+所有版本。57棋牌源码可以通过NuGet引入Wesky.Net.OpenTools包,确保使用最新版本以获取完善功能。本文以.NET 8控制台为例,使用者可根据需求自行调整引用。
程序中实例化WebserviceHelper对象,对于使用IOC容器的项目(如asp.net core),可进行依赖注入的注册;对于无需IOC容器的项目,直接new对象即可。获取asmx的分时obv源码url地址,并在结尾添加?wsdl。
设定要访问的服务名称,例如“HelloWorld”,然后调用接口。无参数情况下,参数设为null。
运行程序调用接口,获取xml文档返回值。
调用返回类型为OpenToolResult,net源码安装该类型包含基础类型值解析方法。解析后得到的最终返回消息为“Hello World”。
基础类型值解析方法定义了获取返回值、节点名称(一般为方法名称+“Result”)及命名空间的过程。命名空间在调用时会被存储在OpenWebserviceInfo的OpenWebservice集合中,通过url地址和接口方法名匹配到对应的命名空间。
OpenWebserviceDocCache类型定义了存储和管理命名空间的结构。
接着,尝试传入一个基础类型参数,访问“Hola”方法,传入“Wesky”,成功获取返回值“Wesky World”。
随后,模拟多个实体类参数的调用,服务应返回一个包含其他实体类的消息。
回顾TestService服务接口实现,确认动态访问是成功的。
访问webservice方法定义如下:支持0个或多个参数,参数个数需与解析wsdl地址的方法服务匹配。Result.IsSuccess为true表示请求成功,解析错误或请求失败时返回false,并附带具体错误描述。
返回值为实体类时,需要调用ExtractCustomerValueFromXml方法进行解析。以ResultInfo类型为例,此方法可处理返回实体类数据。
关键代码片段已列出,若本教程对你有所助益,请分享给需要的朋友,并关注公众号:Dotnet Dancer。如有需要,公众号后台回复“动态接口”获取演示代码和webservice测试源码。
OpenTools系列文章链接如下,新版本与旧版本完全兼容,无需更新任何代码即可使用:
版本1.0.:如何一行C#代码实现解析类型的Summary注释(适用于数据字典快速生成)
版本1.0.:C#/.NET一行代码将实体类类型转换为Json数据字符串
版本1.0.8:上位机与工控必备!用.NET快速搞定Modbus通信的方法
版本1.0.7:揭秘!.Net如何在5分钟内快速实现物联网扫码器通用扫码功能?
版本1.0.6:.NET实现获取NTP服务器时间并同步(附带Windows系统启用NTP服务功能)
版本1.0.5:C#使用P/Invoke实现注册表的增删改查功能
版本1.0.3:C#实现转Base字符串,以及Base字符串在Markdown文件内的复原演示
版本1.0.2:C#实现Ping远程主机功能(支持IP和域名)
版本1.0.1:开始开源项目OpenTools的创作(第一个功能:AES加密解密)
备注此包版本完全开源,无第三方依赖,适用于.net framework 4.6+、任意其他跨平台.net版本环境。