C实现WebService
- 格式:pdf
- 大小:91.63 KB
- 文档页数:7
在没有安装IIS的情况下使用vc#和VWD实现WEBservice的实验“今天写一个webservice的具体实现过程,所用编辑器都是微软的免费Express版。
而且没有用IIS。
webservice的应用分:服务器端和客户端在做webservice的时候必须使用IIS服务器运行服务端,才能在客户端对其进行调用,但是XP默认情况下是没有安装IIS的,我们现在假设在我们的服务器端放了一个加法程序,在客户端是一个winForm程序来调用这个webService,这仅仅是一个练习,我们没有必要再去安装IIS,我们可以巧妙的运用以下手段达到webservice的练习:使用Microsoft Visual Web Developer 2005 Express Edition(简称VWD)做网页,调试的时候系统会启动一个轻量级的web服务器(叫 development server,用过WEB MARTRIX的同志是最早见到这个东东的),它会显示当前页面的URL和端口号(随机分配).我们简称它为ADS。
1.打开VWD, Web Service---存为: "d:\soa"---ok这时会自动定位到Service.cs文件中,注意还有一个自动建立的对应文件"Service.asmx"为了区别我们新建一个新的文件:2.右键单击"solution Explorer"中的"d:\soa"---"Add new item"此步骤可以使用"Ctrl+shift+a"快捷键来完成3.选择"web service" ---命名为"myTest.asmx"---勾选"Place code in separate file"---Add4.将下列代码替换到"myTest.cs"中:using System;using System.Web;using System.Collections;using System.Web.Services;using System.Web.Services.Protocols;///<summary>/// Summary description for myTest///</summary>[WebService(Namespace = "/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]public class myTest : System.Web.Services.WebService {public myTest () {//Uncomment the following line if using designed components//InitializeComponent();}[WebMethod]public int Add(int x, int y){return x + y;}}5.运行此时任务栏右下角的指示区域会出现我们的ADS,假设它目前的端口是"3660",那么对应的页面地址就是:"http://localhost:3660/soa/myTest.asmx"6.打开Microsoft Visual C# 2005 Express Edition--新建"windows application"---命名为"custom"---OK7.右键单击"solution Explorer"中的"References"---"Add web references" 这时会出现"Add web references" 的对话窗口,在URL栏中填入"http://localhost:3660/soa/myTest.asmx" ---单击“GO”---将“reference name”改成“KKK”---单击“add reference”8.向Form1中拖入一个Button1 和一个Lable1,添加一个button1_Click事件将“Form1.cs”替换为:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using custom.kkk;namespace custom{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e) {myTest t = new myTest();label1.Text = Convert.ToString(t.Add(2, 3));}}}好了,一个完整的例子演示完了!Microsoft Visual C# 2005 Express Edition。
C#实现WebService上传下载文件WebService代码:////// 上传文件////// 文件的byte[]/// 上传文件的路径/// 上传文件名字///[WebMethod]public bool UploadFile(byte[] fs, string path, string fileName) {bool flag = false;try{//获取上传案例图片路径path = Server.MapPath(path);if (!Directory.Exists(path)){Directory.CreateDirectory(path);}//定义并实例化一个内存流,以存放提交上来的字节数组。
MemoryStream m = new MemoryStream(fs);//定义实际文件对象,保存上载的文件。
FileStream f = new FileStream(path + "\" + fileName, FileMode.Create);//把内内存里的数据写入物理文件m.WriteT o(f);m.Close();f.Close();f = null;m = null;flag = true;}catch (Exception ex){flag = false;}return flag;}[WebMethod(Description = "下载服务器站点文件,传递文件相对路径")]public byte[] DownloadFile(string strFilePath, string path){FileStream fs = null;string CurrentUploadFolderPath = HttpContext.Current.Server.MapPath(path);string CurrentUploadFilePath = CurrentUploadFolderPath + "\" + strFilePath;if (File.Exists(CurrentUploadFilePath)){try{///打开现有文件以进行读取。
c调用webservice接口的方法随着互联网的发展,Web服务已经成为了各种应用程序之间进行数据交互的重要方式。
而WebService接口则是Web服务的一种实现方式,它使用标准的HTTP协议进行通信,可以跨平台、跨语言地进行数据交互。
本文将介绍如何使用C语言调用WebService接口的方法。
首先,我们需要了解WebService接口的基本原理。
WebService接口通常使用SOAP(Simple Object Access Protocol)协议进行通信,SOAP是一种基于XML的协议,用于在网络上交换结构化的信息。
因此,我们在使用C语言调用WebService接口时,需要使用C语言的XML解析库来解析SOAP消息。
接下来,我们需要选择一个合适的C语言的XML解析库。
目前比较常用的XML解析库有Expat、Libxml2等。
这些库都提供了C语言的API,可以方便地解析XML文档。
我们可以根据自己的需求选择合适的库进行使用。
在开始调用WebService接口之前,我们需要了解接口的具体信息,包括接口的URL、请求方法、请求参数等。
通常,我们可以通过查阅接口的文档或者与接口提供方进行沟通来获取这些信息。
接下来,我们可以使用C语言的网络编程库来发送HTTP请求。
C语言提供了一些网络编程库,如libcurl等,可以方便地发送HTTP请求。
我们可以使用这些库来发送SOAP消息给WebService接口,并接收返回的SOAP消息。
在发送SOAP消息之前,我们需要根据接口的要求构造SOAP消息的XML文档。
我们可以使用C语言的XML解析库来构造XML文档,然后将XML文档转换为字符串,作为SOAP消息的内容发送给WebService接口。
当我们发送SOAP消息后,接口会返回一个SOAP消息作为响应。
我们可以使用C语言的网络编程库接收响应,并使用XML解析库解析响应的XML文档。
根据接口的要求,我们可以从XML文档中提取出需要的数据。
C#WebService创建、发布、调⽤的实例讲解Web service是⼀个平台独⽴的,低耦合的,⾃包含的、基于可编程的web的应⽤程序,可使⽤开放的XML标准来描述、发布、发现、协调和配置这些应⽤程序,⽤于开发分布式的互操作的应⽤程序。
Web service是⼀种可以接收从Internet或者Internet上的其它系统中传递过来的请求,轻量级的独⽴的通讯技术。
webservice说明:假设A是Client端,B是webservice服务端,⽤户通过http协议向服务器发送soap请求,webservice返回客户端XML格式的数据。
客户端由代理对象(proxy)负责与webservice的通信。
所以在客户端使⽤webservice,完全和使⽤⼀个本地对象是⼀样的。
我们现在以⼀个简单的实例来说明。
⼀、⾸先创建Webservice⼯程,以VS2010为例,如果选择.Net Framework 4,则找不到Web服务应⽤程序,此时选择空Web应⽤程序。
创建好空应⽤程序后,选择该⼯程右键添加Web服务。
创建好程序后默认会有⼀个HellWorld函数a) WebService1.asmx⽂件中的代码namespace WebApplication1{[WebService(Namespace = "/")] // webservice命名空间[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][ponentModel.ToolboxItem(false)]// 若要允许使⽤ AJAX 从脚本中调⽤此 Web 服务,请取消对下⾏的注释。
// [System.Web.Script.Services.ScriptService]public class WebService1 : System.Web.Services.WebService{[WebMethod]public string HelloWorld() {return "Hello World";}}}b) 运⾏程序,如图1所⽰,列出了服务函数名,点击要调⽤的函数如图2所⽰,点击调⽤后出现图2第⼆张图所⽰返回函数值。
调用WebService 实例和开发 C 语言应用程序可以通过多种方式实现,以下是其中一种简单的方法:1.获取WebService 的WSDL(Web Services Description Language)文件。
WSDL 文件描述了WebService 的接口和数据类型,可以通过它来生成客户端代码。
2.使用工具生成客户端代码。
有许多工具可以从WSDL 文件生成客户端代码,例如Microsoft 的Wsdl.exe 或Apache 的wsdl2h。
这些工具可以根据WSDL 文件生成C 语言的头文件和源文件。
3.编写 C 语言应用程序。
使用生成的代码,编写 C 语言应用程序来调用WebService。
在应用程序中,需要包含生成的代码,并使用相应的函数和数据类型来调用WebService。
4.编译和运行应用程序。
将应用程序编译并运行,然后调用WebService。
以下是一个简单的示例代码,演示如何使用生成的客户端代码调用WebService:c复制代码#include"mywebservice.h"// 生成的客户端代码的头文件int main() {MyWebService *service = NULL; // 创建 WebService 对象MyWebService_MyOperationRequest request; // 创建请求对象MyWebService_MyOperationResponse response; // 创建响应对象// 设置请求参数request.param1 = "value1";request.param2 = "value2";// 调用 WebServiceservice->MyOperation(request, &response);// 处理响应结果printf("Response code: %d\n", response.responseCode);printf("Response message: %s\n", response.responseMessage);// 释放资源if (service) {delete service;service = NULL;}return0;}以上是一个简单的示例,具体实现需要根据实际的WebService 和数据类型进行调整。
使用C#创建webservice及三种调用方式微软.NET战略的一个比较重要的部分就是webservice,利用webservice我们可以创建真正有效的分布式应用程序。
下面,我们对webservice做一些说明。
假设A是客户端,B是webservice服务端,用户通过http协议向服务器发送soap请求,webservice返回客户端XML格式的数据。
现在我们看一看创建一个webservice的大致过程:服务端的webservice是必须要建的。
中间的soap,xml我们不用去关心,在客户端这边,比较重要的是如何从webservice取得对象?答案是用的是proxy对象。
客户端由代理对象(proxy)负责与webservice的通信。
所以在客户端使用webservice,完全和使用一个本地对象是一样的。
我们现在以一个简单的实例来说明。
打开,新建工程( web服务),在位置中键入http://localhost/webserver,其中webserver就是工程的名字。
确定后,出现一个Service1.asmx.cx,双击,出现代码窗口,using System;using System.Collections;using ponentModel;using System.Data;using System.Diagnostics;using System.Web;using System.Web.Services;namespace webserver{/// <summary>/// Service1 的摘要说明。
/// </summary>(1)public class Service1 : System.Web.Services.WebService{public Service1(){//CODEGEN:该调用是 Web 服务设计器所必需的InitializeComponent();}#region Component Designer generated code//Web 服务设计器所必需的private IContainer components = null;/// <summary>/// 设计器支持所需的方法 - 不要使用代码编辑器修改/// 此方法的内容。
C#调⽤WebService的三种⽅法最近⽤到了webService的调⽤,因为是远程调⽤,并且对⽅的webService是⽤Java写的,开发过程遇到很多问题,现在把⽤到的⽅法总结⼀下。
1.静态调⽤这是最便捷的⽅法,分为直接使⽤webService地址调⽤,和使⽤本地xml⽂件调⽤。
如下图,如果直接调⽤?wsdl的地址,就把地址复制黏贴到地址框⾥,如果本地没法连接到⽹址,就把?wsdl的地址⽤浏览器打开,保存成xml⽂件,拷贝到本地,再把本地xml⽂件的地址【类似C:\Users\admin\Desktop\XX.xml】复制到下图的地址框⾥,然后点击转到,会在绿⾊的框⾥显⽰:“在地址XX处找到1个服务”,然后修改下命名空间【可以不改】,点击确认。
然后在代码的【Connected Services】⽂件夹下,可以找到⼀个【Reference.cs】的⽂件,这⾥⾯就有引⽤的webService的⽅法。
调⽤的⽅法很简单,在Reference.cs⾥找到开发⽂档⾥提到的⽅法,正常实例化,调⽤就可以,需要引⽤下图蓝框⾥定义的命名空间。
另外,如果调⽤时出现这样的报错:【基础连接已关闭:未能为SSL/TLS安全通道建⽴信任关系】,可以按下⾯三步解决,(1)需要在【Reference.cs】⾥添加引⽤:using ;using .Security;using System.Security.Authentication;using System.Security.Cryptography.X509Certificates;(2)在调⽤的类⾥添加⽅法:private static bool RemoteCertificateValidate(object sender, X509Certificate cert,X509Chain chain, SslPolicyErrors error){System.Console.WriteLine("Warning, trust any certificate");// trust any certificatereturn true;//为了通过证书验证,总是返回true}(3)在类的构造⽅法调⽤上⾯⽅法:ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;//验证服务器证书回调⾃动验证2.动态调⽤动态调⽤需要借助帮助类,这⾥⾯我已经加上了解决【SSL/TLS】问题的代码,代码如下。
C#动态调用WebService第一篇:C# 动态调用Web Service整理,内容来源于网络及本人实践】前面整理了一篇关于VS2008实现简单的WebService的文章,但里面的调用是静态的,当服务地址更改后,需要重新编译程序,对于很多应用来说是不现实的。
本文介绍一下C#动态调用WebService 的方法。
1.实现写个叫WebServiceHelper的类[csharp] view plaincopyprint?space webhelp2.{ing System;ing ;ing System.IO;ing System.CodeDom;ing Microsoft.CSharp;ing piler;ing System.Web.Services.Description;ingSystem.Web.Services.Protocols;11.public class WebServiceHelper 12.{ 13.#region InvokeWebService 14.15.public static object InvokeAndCallWebService(string url, string methodname, object[] args)16.{ 17.return WebServiceHelper.InvokeAndCallWebService(url, null, methodname, args);18.} 19.public static object InvokeAndCallWebService(string url,/* string @namespace, */string classname, string methodname, object[] args)20.{ 21.string @namespace = “EnterpriseServerBase.WebService.DynamicWebCalling”;22.if(( classname == null)||(classn ame == “"))23.{ 24.classname = WebServiceHelper.GetWsClassName(url);25.} 26.27.try 28.{ 29.//获取WSDL 30.WebClient webClient = new WebClient();31.Stream stream = webClient.OpenRead(url + ”?WSDL“);32.ServiceDescription description =ServiceDescription.Read(stream);33.ServiceDescriptionImporter descriptionImporter = new ServiceDescriptionImporter();34.descriptionImporter.AddService Description(description, ”“, ”“);35.CodeNamespace codeNamespace = new CodeNamespace(@namespace);36.37.//生成客户端代理类代码38.CodeCompileUnit codeCompileUnit = new CodeCompileUnit();spaces.Add(code Namespace);40.descriptionImporter.Import(codeNamespace, codeCompileUnit);41.CSharpCodeProvider codeProvider = new CSharpCodeProvider();42.43.//设定编译参数pilerParameters compilerParameters = new CompilerParameters();pilerParameters.GenerateExecutabl e = false;pilerParameters.GenerateInMemory = true;pilerParameters.ReferencedAssemblies.Add(”Syste m.dll“);pilerParameters.ReferencedAssemblies.Add(”Sy stem.XML.dll“);pilerParameters.ReferencedAssemblies.A dd(”System.Web.Services.dll“);pilerParameters.Referen cedAssemblies.Add(”System.Data.dll“);51.52.//编译代理类pilerResults codeResult = pileAssemblyFromDom(compilerParameters, codeCompileUnit);54.if(true == codeResult.Errors.HasErrors)55.{ 56.System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();57.foreach(pil pilerError compileError in codeResult.Errors)58.{ 59.stringBuilder.Append(compileError.ToSt ring());60.stringBuilder.Append(System.Environment.NewLine);6 1.} 62.throw new Exception(stringBuilder.ToString());63.} 64.65.//生成代理实例,并调用方法66.System.Reflection.Assembly assembly = piledAssembly;67.Type @class = assembly.GetType(@names pace + ”.“ + classname, true, true);68.object instance = Activator.CreateInstance(@class);69.System.Reflection.MethodIn fo methorInfo = @class.GetMethod(methodname);70.71.return methorInfo.Invoke(instance, args);72.73.} 74.catch(Exception ex)75.{ 76.throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));77.} 78.} 79.80.private static string GetWsClassName(string wsUrl)81.{ 82.string[] parts = wsUrl.Split('/');83.string[] pps = parts[parts.Length-1].Split('.');84.85.return pps[0];86.} 87.#endregion 88.} 89.}2.注意1.)若编译提示“命名空间“System.Web”中不存在类型或命名空间名称“Services”(是缺少程序集引用吗?)”,只需在解决方案资源管理器中添加对System.Web.Services的程序集引用即可。
C#使⽤WebService⼀、新建webservice1. 新建项⽬→ Web服务应⽤程序2. 或者在现有项⽬中点击右键新建web服务程序asmx3.4.5. 只要在webservice类⾥⾯的⽅法标注为【WebMethod】就成为别⼈可以调的⽅法6.7. 如果要返回DataTable8. 只要 DataTable.TableName 不为空, 即可返回否则不⾏.9. ⼆、webservice调⽤引⽤之后直接就可以使⽤⾥⾯的⽅法了命名空间类名 client=new 类; client.⽅法()常⽤错误①⽆法加载协定为“ServiceReference1.InterfaceSoap”的终结点配置部分,因为找到了该协定的多个终结点配置。
请按名称指⽰⾸选的如果出现以上错误是因为第⼀次引⽤webservice的时候已经在webconfig⾥⾯产⽣了<endpoint>配置节点,⾸次运⾏的时候⼜⼀次加了那么⼀个配置节点重复了,需要⼿动删除⼀个节点原因是在web.config ⽂件中多次引⽤了“添加外部引⽤”<client><endpoint address="http://218.90.168.115:8000/PJSDFacade/PJSD/Interface.asmx"binding="basicHttpBinding" bindingConfiguration="InterfaceSoap"contract="ServiceReference1.InterfaceSoap" name="InterfaceSoap" /><!-- 下⾯节点删除--><endpoint address="http://218.90.168.115:8000/PJSDFacade/PJSD/Interface.asmx"binding="customBinding" bindingConfiguration="InterfaceSoap12"contract="ServiceReference1.InterfaceSoap" name="InterfaceSoap12" /></client>所以删掉⼀个节点既可(如查引⽤的是WebServiceSoap,删掉WebServiceSoap1的有关节点,反之~)也可以在页⾯引⽤的时候指定bindingConfiguration名字:如:ServiceReference.WebServiceSoap web = new WebServiceSoapClient("InterfaceSoap");在调⽤webservice返回数据的时候,出现以下错误:已超过传⼊消息(65536)的最⼤消息⼤⼩配额。
VC Webservice Execute方法在VC(Visual C++)中,Webservice Execute方法是一种非常重要的方法,它用于执行与Webservice相关的操作。
在本文中,我将对VC Webservice Execute方法进行深入探讨,以便你能更全面地了解这一主题。
1. 了解VC Webservice Execute方法的基本概念VC Webservice Execute方法是VC中用于执行与Webservice相关操作的方法。
它提供了一种方便的方式来访问和操作Webservice,实现了客户端与服务器端之间的通信和数据交换。
通过调用该方法,可以实现对Webservice的调用和数据传输,为程序的运行和信息交互提供了便利。
2. VC Webservice Execute方法的具体用法在使用VC Webservice Execute方法时,需要首先创建一个Webservice对象,然后通过该对象调用Execute方法来执行相应的操作。
通过传入参数和调用相应的接口,可以实现与Webservice的交互和数据传输。
在实际应用中,可以根据具体的需求和情景来灵活运用该方法,实现各种功能和业务逻辑的实现。
3. VC Webservice Execute方法的优缺点优点:VC Webservice Execute方法提供了一种便捷的方式来实现与Webservice的交互和数据传输,加快了程序的开发和实现过程。
通过该方法,可以更快速地实现各种功能和业务逻辑,提高了程序的效率和灵活性。
缺点:在使用VC Webservice Execute方法时,需要较为熟练地掌握相关知识和技能,以确保方法的正确调用和使用。
需要注意对数据的传输和处理,以避免出现错误和问题。
4. 个人观点与理解对于VC Webservice Execute方法,我认为它是一种非常实用和便捷的方法,能够有效地实现程序与Webservice之间的通信和数据交换。