c#根据wsdl文件调用webservice wsdl调用接口

11:26 提问
已知wsdl文件,如何写webservice接口
现在别人发了一个wsdl文件和一些接口参数说明给我。请问我如何调用这个接口。
wsdl内容大致如下
按赞数排序
有地址,那么在vs里面项目-添加服务引用,填入地址即可
根据wsdl2java直接生成客户端,然后调用就行
这个webservice接口好简单,用RPCServiceClient调用就很方便
参见AXIS2的org.apache.axis2.rpc.client.RPCServiceClient类中的invokeBlocking方法
其他相似问题C#---WebService技术(动态调用及静态引用)
MS的.NET框架以经从1.0发布到4.0,耗时一年的酒店管理系统也终于完工,在此总结一下这个系统中用到的一些技术!
1.整个软件的架构,基于webservice的动态调用,公开如下:
&namespace Hotel_app
动态调用WebService 的相关方法
&/summary&
&&& public
sealed class DynamicWebServiceCall
/// &summary&
/// 动态调用WebService 的方法
/// &/summary&
/// &param name="pcUrl"&WebService
的访问路径
/// &param
name="pcClassName"&要调用的类名&/param&
/// &param
name="pcMethodName"&方法名&/param&
/// &param
name="args"&方法参数&/param&
&returns&&/returns&
public static object InvokeWebService(string pcUrl, string
pcMethodName, object[] args)
&&&&&&&&&&&
return InvokeWebService(pcUrl, "", pcMethodName, args);
/// &summary&
/// 动态调用WebService 的方法
/// &/summary&
/// &param name="pcUrl"&WebService
的访问路径 &
/// &param
name="pcClassName"&要调用的类名,当Url里已经传动了类名的时候,这里设置为“”&/param&
/// &param
name="pcMethodName"&方法名&/param&
/// &param
name="args"&方法参数&/param&
&returns&&/returns&
public static object InvokeWebService(string pcUrl, string
pcClassName, string pcMethodName, object[] args)
&&&&&&&&&&&
object loRetVal =
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
if (!string.IsNullOrEmpty(pcClassName))
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
pcUrl += pcClassN
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
pcClassName = GetWsClassName(pcUrl);
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
Assembly loAssemble = CreateDynWebServiceAssemble(pcUrl);
&&&&&&&&&&&&&&&
if (loAssemble != null)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
string lcNameSpace =
"Sonic.Web.WebService.DynamicWebService";
&&&&&&&&&&&&&&&&&&&
Type t = loAssemble.GetType(lcNameSpace + "." + pcClassName, true,
&&&&&&&&&&&&&&&&&&&
object obj = Activator.CreateInstance(t);
&&&&&&&&&&&&&&&&&&&
MethodInfo loMethodInfo = t.GetMethod(pcMethodName);
&&&&&&&&&&&&&&&&&&&
if (loMethodInfo != null)
&&&&&&&&&&&&&&&&&&&&&&&
loRetVal = loMethodInfo.Invoke(obj, args);
&&&&&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
catch (Exception e)
&&&&&&&&&&&
&&&&&&&&&&&&&&&
loRetVal =
&&&&&&&&&&&
&&&&&&&&&&&
return loRetV
/// &summary&
/// 动态创建WebService的Assembly
/// &/summary&
/// &param name="pcUrl"&WebService
的访问路径 入 &
&returns&&/returns&
public static Assembly CreateDynWebServiceAssemble(string
&&&&&&&&&&&
Assembly loRetVal =
&&&&&&&&&&&
string lcNameSpace =
"Sonic.Web.WebService.DynamicWebService";
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
//获取WSDL
&&&&&&&&&&&&&&&
WebClient loWC = new WebClient();
&&&&&&&&&&&&&&&
Stream stream = loWC.OpenRead(pcUrl + "?WSDL");
&&&&&&&&&&&&&&&
ServiceDescription sd = ServiceDescription.Read(stream);
&&&&&&&&&&&&&&&
ServiceDescriptionImporter sdi = new
ServiceDescriptionImporter();
&&&&&&&&&&&&&&&
sdi.AddServiceDescription(sd, "", "");
&&&&&&&&&&&&&&&
CodeNamespace cn = new CodeNamespace(lcNameSpace);
&&&&&&&&&&&&&&&
//生成客户端代理类代码
&&&&&&&&&&&&&&&
CodeCompileUnit ccu = new CodeCompileUnit();
&&&&&&&&&&&&&&&
ccu.Namespaces.Add(cn);
&&&&&&&&&&&&&&&
sdi.Import(cn, ccu);
&&&&&&&&&&&&&&&
CSharpCodeProvider csc = new CSharpCodeProvider();
&&&&&&&&&&&&&&&
ICodeCompiler icc = csc.CreateCompiler();
&&&&&&&&&&&&&&&
//设定编译参数
&&&&&&&&&&&&&&&
CompilerParameters cplist = new CompilerParameters();
&&&&&&&&&&&&&&&
cplist.GenerateExecutable =
&&&&&&&&&&&&&&&
cplist.GenerateInMemory =
&&&&&&&&&&&&&&&
cplist.ReferencedAssemblies.Add("System.dll");
&&&&&&&&&&&&&&&
cplist.ReferencedAssemblies.Add("System.XML.dll");
&&&&&&&&&&&&&&&
cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
&&&&&&&&&&&&&&&
cplist.ReferencedAssemblies.Add("System.Data.dll");
&&&&&&&&&&&&&&&
//编译代理类
&&&&&&&&&&&&&&&
CompilerResults cr = pileAssemblyFromDom(cplist, ccu);
&&&&&&&&&&&&&&&
if (true == cr.Errors.HasErrors)
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
System.Text.StringBuilder sb = new
System.Text.StringBuilder();
&&&&&&&&&&&&&&&&&&&
foreach (pilerError ce in
cr.Errors)
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
sb.Append(ce.ToString());
&&&&&&&&&&&&&&&&&&&&&&&
sb.Append(System.Environment.NewLine);
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
throw new Exception(sb.ToString());
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
//生成代理实例,并调用方法
&&&&&&&&&&&&&&&
loRetVal = cr.CompiledA
&&&&&&&&&&&
&&&&&&&&&&&
catch (Exception e)
&&&&&&&&&&&
&&&&&&&&&&&&&&&
loRetVal =
&&&&&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
return loRetV
private static string GetWsClassName(string wsUrl)
&&&&&&&&&&&
string[] parts = wsUrl.Split('/');
&&&&&&&&&&&
string[] pps = parts[parts.Length - 1].Split('.');
&&&&&&&&&&&
return pps[0];
调用方式:
&&&&&&&&&&&&&&&&&&&&&&
---------------------------------
&&&&&&&&&&&&&&&&&&&&&&&
string url_temp = mon_app.service_url +
"Szwgl/Szwgl_app.asmx";
&&&&&&&&&&&&&&&&&&&&&&&
object[] args = new object[10];
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&
args[2] = sk_
&&&&&&&&&&&&&&&&&&&&&&&
args[3] = mon_app.
&&&&&&&&&&&&&&&&&&&&&&&
args[4] = mon_app.
&&&&&&&&&&&&&&&&&&&&&&&
args[5] = jjzt_
&&&&&&&&&&&&&&&&&&&&&&&
args[6] = mon_app.
&&&&&&&&&&&&&&&&&&&&&&&
args[7] = mon_app.
&&&&&&&&&&&&&&&&&&&&&&&
args[8] = DateTime.Now.ToString();
&&&&&&&&&&&&&&&&&&&&&&&
args[9] = mon_app.
&&&&&&&&&&&&&&&&&&&&&&&
object result =
Hotel_app.DynamicWebServiceCall.InvokeWebService(url_temp,
"Fun_zw_cx", args);
&&&&&&&&&&&&&&&&&&&&&&&
if (result != null &&
result.ToString() == mon_app.get_suc)
&&&&&&&&&&&&&&&&&&&&&&&
在此总结一下项目实施后,发现了动态调用的存在的巨大优势是程序开发过程中,良好的调试功能,你根本就不需要去关心每次服务端的更改会造成客户端的引用问题,你要关心的只是参数的多少及类型和返回值;当然,有利也有敝,实施后,由于每次调用server都要动态编译,所以就造成整个处理过程会变慢,对于大的处理,会代来客户端长时间的假死(此时你有必要设置IIS中的超时为300,最大为300,否则你的过程很难保证能顺利执行,经过很多次的偿试,webservice默认的超时时间为60S,而且这个默认值是你无法更改的)
系统上线12家后,基本处于稳定,只是效率非常低,于是,由动态调用改为静态引用,我抱着偿试的态度再一次修正前期开发过程中没有注意的问题,静态调用的一个问题是:开发过程中的引用,在你具体实施后,如何去更新引用呢,这是一个大麻烦,由于我所在的公司的系统是基本连锁的,每个店的service的地址是不一样的,你不可能每一次上线去更新一次web引用,这是一个非常糟糕的事情,好在我又发现一个方式,开发环境下直接引用,调用之前,你会发现,webservice是允许你临时设置引用的URI的,如下:
mon_app.get_czsj();
Szwgl_app.Szwgl_app Szwgl_app_new = new
Hotel_app.Szwgl_app.Szwgl_app();
Szwgl_app_new.Url = mon_app.service_url +
"Szwgl/Szwgl_app.asmx";
string ss = Szwgl_app_new.Fun_zw_cx(lsbh, jzbh, sk_tt,
mon_app.yydh, mon_app.qymc,
jjzt_type, mon_app.czy, mon_app.syzd,
DateTime.Now.ToString(), mon_app.xxzs);
我在app.config中设置了我的uri地址,在静态调用之前,先来设置这个代理的URL,试试看后,果然是可以的,再试,两者的速度那叫一个乌龟对麻雀,终于可以告别龟速的处理效率!
总结,任何一个项目,前期的架构一定要认真去选择,否则当你实施后,会后患无穷的!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。虽然现在已经进入了.NET FrameWork 4.0的时代,WebService也已经逐渐被淘汰,取而代之的是WCF。
但在工作中难免遇到需要兼容旧版本程序和按照以前的文档进行开发。
一般一个已经实现功能的WebService会发布自己的WSDL文件,供客户端调用生成代理类。
&但有时是先有server与client交互的接口定义(WSDL)文件,然后由server和client端分别写程序,一个提供web服务,一个使用web服务。
&最近,我也遇到了这个问题。由于业务方仅提供了WSDL文件并确定了其规范,需要我们开发服务端供调用。
1、使用VS2010提供的工具wsdl.exe由WSDL文件生成cs文件
&&&& 使用wsdl.exe的/serverInterface选项(或缩写的 /si)指定输入的wsdl文件(注意,如果要转换的wsdl文件中import了其他wsdl文件,则所有文件都应列出,包括使用到的xsd文件也应列出)。输出将是 一个代码文件(默认是C#的,如果需要别的语言,参考MSDN中wsdl.exe的使用说明),其中包含每个 wsdl 绑定的接口。&&&
&& 示例:假设有ServerInterfaceSample.wsdl&&&& wsdl.exe /si ServerInterfaceSample.wsdl
&&&&如果使用Service.xsd作为schema文件,则改为
&&& wsdl.exe /si ServerInterfaceSample.wsdl& Service.xsd
&&& 生成代码如下:
using ponentM
using System.D
using System.Web.S
using System.Web.Services.P
using System.Xml.S
/// &remarks/&
[piler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
[System.Web.Services.WebServiceBindingAttribute(Name="WebServiceSoap", Namespace="")]
public interface IWebServiceSoap {
&&&&/// &remarks/&
&&&&[System.Web.Services.WebMethodAttribute()]
&&&&[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="", ResponseNamespace="", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
&&&&long sendSMS(InfoHeader header, string sessionId, string sender, string smsContent, string receiverList, string productCode, string pseudoFlag);
  2、使用以上生成的文件进行修改,实现你的WebService方法即可.
阅读(...) 评论()  站在开发者的角度,WebService 技术确实是不再&时髦&。甚至很多人会说,我们不再用它。当然,为了使软件可以更简洁,更有层次,更易于实现缓存等机制,我是非常建议将 SOAP 转为 RESTful 架构风格的。但到目前为止,WebService 在一些Public Institution 中使用还是十分广泛的。
  这里主要讨论一下关于WebService的调用问题。关于WebService 的调用分为静态调用和动态调用两种。
  静态调用的方式是通过&Add Service Reference...&创建客户端代理类。这种方式让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务。这样是使工作简单了,但是却将提供Web服务的URL、方法名、参数绑定在一起了,这是VS.NET自动为我们生成Web服务代理的限制。如果发布Web服务的URL改变了,则我们需要重新让VS.NET生成代理,并重新编译。很常见的一个场景,某银行Web服务,因为部署的URL更改,而不得不去重新编译生成代理,这将会带来很多不必要的工作量。如果我们使用动态调用就可以避免这种情况。关于静态调用,不是这篇文章的重点,故不作详细介绍。
  在某些情况下我们需要在程序运行期间动态调用一个服务。在 .NET Framework 的 System.Web.Services.Description 命名空间中有我们需要的东西。动态调用有动态调用 WebService、生成客户端代理程序集文件、生成客户端代理类源代码3种方式。
动态调用的具体步骤为:
1)从目标 URL 下载 WSDL 数据;
2)使用 ServiceDescription 创建和格式化 WSDL 文档文件;
3)使用 ServiceDescriptionImporter 创建客户端代理类;
4)使用 CodeDom 动态创建客户端代理类程序集;
5)利用反射调用相关 WebService 方法。
  第一种方式通过在内存中创建动态程序集的方式完成了动态调用过程;第二种方式将客户端代理类生成程序集文件保存到硬盘,然后可以通过 Assembly.LoadFrom() 载入并进行反射调用。对于需要多次调用的系统,要比每次生成动态程序集效率高出很多;第三种方式是保存源码文件到硬盘中,然后再进行反射调用。
  这里将只讨论第二种方式,这种方式也是我们在实际应用中最常用的。这种方式只下载 一次 WSDL 信息并创建代理类的程序集。往后程序每次启动都会反射之前创建好的程序集。如果是 Web服务 URL 变更,只需要修改 App.config 中的 WebServiceUrl 和 ProxyClassName 配置项,并将程序根目录下生成的程序集删除即可。下次程序启动又会重新下载WSDL信息并创建代理类的程序集。&
  App.config文件。&
1 &?xml version="1.0" encoding="utf-8" ?&
2 &configuration&
&appSettings&
&!--WebService地址--&
&add key="WebServiceUrl" value="http://localhost:25060/testService/" /&
&!--WebService输出dll文件名称--&
&add key="OutputDllFilename" value="TestWebService.dll" /&
&!--WebService代理类名称--&
&add key="ProxyClassName" value="TestService" /&
&/appSettings&
11 &/configuration&
  创建代理类。&
public class WSHelper
/// &summary&
/// 输出的dll文件名称
/// &/summary&
private static string m_OutputDllF
/// &summary&
/// WebService代理类名称
/// &/summary&
private static string m_ProxyClassN
/// &summary&
/// WebService代理类实例
/// &/summary&
private static object m_ObjI
/// &summary&
/// 接口方法字典
/// &/summary&
private static Dictionary&EMethod, MethodInfo& m_MethodDic = new Dictionary&EMethod, MethodInfo&();
/// &summary&
/// 创建WebService,生成客户端代理程序集文件
/// &/summary&
/// &param name="error"&错误信息&/param&
/// &returns&返回:true或false&/returns&
public static bool CreateWebService(out string error)
error = string.E
m_OutputDllFilename = ConfigurationManager.AppSettings["OutputDllFilename"];
m_ProxyClassName = ConfigurationManager.AppSettings["ProxyClassName"];
string webServiceUrl = ConfigurationManager.AppSettings["WebServiceUrl"];
webServiceUrl += "?WSDL";
// 如果程序集已存在,直接使用
if (File.bine(Environment.CurrentDirectory, m_OutputDllFilename)))
BuildMethods();
return true;
//使用 WebClient 下载 WSDL 信息。
WebClient web = new WebClient();
Stream stream = web.OpenRead(webServiceUrl);
//创建和格式化 WSDL 文档。
if (stream != null)
// 格式化WSDL
ServiceDescription description = ServiceDescription.Read(stream);
// 创建客户端代理类。
ServiceDescriptionImporter importer = new ServiceDescriptionImporter
ProtocolName = "Soap",
Style = ServiceDescriptionImportStyle.Client,
CodeGenerationOptions =
CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync
// 添加 WSDL 文档。
importer.AddServiceDescription(description, null, null);
//使用 CodeDom 编译客户端代理类。
CodeNamespace nmspace = new CodeNamespace();
CodeCompileUnit unit = new CodeCompileUnit();
unit.Namespaces.Add(nmspace);
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters parameter = new CompilerParameters
GenerateExecutable = false,
// 指定输出dll文件名。
OutputAssembly = m_OutputDllFilename
parameter.ReferencedAssemblies.Add("System.dll");
parameter.ReferencedAssemblies.Add("System.XML.dll");
parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
parameter.ReferencedAssemblies.Add("System.Data.dll");
// 编译输出程序集
CompilerResults result = pileAssemblyFromDom(parameter, unit);
// 使用 Reflection 调用 WebService。
if (!result.Errors.HasErrors)
BuildMethods();
return true;
error = "反射生成dll文件时异常";
stream.Close();
stream.Dispose();
error = "打开WebServiceUrl失败";
catch (Exception ex)
error = ex.M
return false;
/// &summary&
/// 反射构建Methods
/// &/summary&
private static void BuildMethods()
Assembly asm = Assembly.LoadFrom(m_OutputDllFilename);
//var types = asm.GetTypes();
Type asmType = asm.GetType(m_ProxyClassName);
m_ObjInvoke = Activator.CreateInstance(asmType);
//var methods = asmType.GetMethods();
var methods = Enum.GetNames(typeof(EMethod)).ToList();
foreach (var item in methods)
var methodInfo = asmType.GetMethod(item);
if (methodInfo != null)
var method = (EMethod)Enum.Parse(typeof(EMethod), item);
m_MethodDic.Add(method, methodInfo);
/// &summary&
/// 获取请求响应
/// &/summary&
/// &param name="method"&方法&/param&
/// &param name="para"&参数&/param&
/// &returns&返回:Json串&/returns&
public static string GetResponseString(EMethod method, params object[] para)
string result = null;
if (m_MethodDic.ContainsKey(method))
var temp = m_MethodDic[method].Invoke(m_ObjInvoke, para);
if (temp != null)
result = temp.ToString();
  调用接口。
   // SOAP 请求响应方式
TextBox3.Text = WSHelper.GetResponseString(EMethod.Add, Convert.ToInt32(TextBox1.Text), Convert.ToInt32(TextBox2.Text));
  除了静态调用和动态调用,我们还可以发送HttpPost请求来调用WebService的方法。Soap请求就是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式。使用HttpPost请求,对返回结果我们可以手动解析。下面的实现其实和调用WebAPI是完全一样的。
/// &summary&
/// 请求信息帮助
/// &/summary&
public partial class HttpHelper
private static HttpHelper m_H
/// &summary&
/// &/summary&
public static HttpHelper Helper
get { return m_Helper ?? (m_Helper = new HttpHelper()); }
/// &summary&
/// 获取请求的数据
/// &/summary&
/// &param name="strUrl"&请求地址&/param&
/// &param name="requestMode"&请求方式&/param&
/// &param name="parameters"&参数&/param&
/// &param name="requestCoding"&请求编码&/param&
/// &param name="responseCoding"&响应编码&/param&
/// &param name="timeout"&请求超时时间(毫秒)&/param&
/// &returns&返回:请求成功响应信息,失败返回null&/returns&
public string GetResponseString(string strUrl, ERequestMode requestMode, Dictionary&string, string& parameters, Encoding requestCoding, Encoding responseCoding, int timeout = 300)
string url = VerifyUrl(strUrl);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url));
HttpWebResponse webResponse = null;
switch (requestMode)
case ERequestMode.Get:
webResponse = GetRequest(webRequest, timeout);
case ERequestMode.Post:
webResponse = PostRequest(webRequest, parameters, timeout, requestCoding);
if (webResponse != null && webResponse.StatusCode == HttpStatusCode.OK)
using (Stream newStream = webResponse.GetResponseStream())
if (newStream != null)
using (StreamReader reader = new StreamReader(newStream, responseCoding))
string result = reader.ReadToEnd();
return null;
/// &summary&
/// get 请求指定地址返回响应数据
/// &/summary&
/// &param name="webRequest"&请求&/param&
/// &param name="timeout"&请求超时时间(毫秒)&/param&
/// &returns&返回:响应信息&/returns&
private HttpWebResponse GetRequest(HttpWebRequest webRequest, int timeout)
webRequest.Accept = "text/html, application/xhtml+xml, application/json, text/javascript, */*; q=0.01";
webRequest.Headers.Add("Accept-Language", "zh-cn,en-US,q=0.5");
webRequest.Headers.Add("Cache-Control", "no-cache");
webRequest.UserAgent = "DefaultUserAgent";
webRequest.Timeout =
webRequest.Method = "GET";
// 接收返回信息
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
return webR
catch (Exception ex)
return null;
/// &summary&
/// post 请求指定地址返回响应数据
/// &/summary&
/// &param name="webRequest"&请求&/param&
/// &param name="parameters"&传入参数&/param&
/// &param name="timeout"&请求超时时间(毫秒)&/param&
/// &param name="requestCoding"&请求编码&/param&
/// &returns&返回:响应信息&/returns&
private HttpWebResponse PostRequest(HttpWebRequest webRequest, Dictionary&string, string& parameters, int timeout, Encoding requestCoding)
// 拼接参数
string postStr = string.E
if (parameters != null)
parameters.All(o =&
if (string.IsNullOrEmpty(postStr))
postStr = string.Format("{0}={1}", o.Key, o.Value);
postStr += string.Format("&{0}={1}", o.Key, o.Value);
return true;
byte[] byteArray = requestCoding.GetBytes(postStr);
webRequest.Accept = "text/html, application/xhtml+xml, application/json, text/javascript, */*; q=0.01";
webRequest.Headers.Add("Accept-Language", "zh-cn,en-US,q=0.5");
webRequest.Headers.Add("Cache-Control", "no-cache");
webRequest.UserAgent = "DefaultUserAgent";
webRequest.Timeout =
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = byteArray.L
webRequest.Method = "POST";
// 将参数写入流
using (Stream newStream = webRequest.GetRequestStream())
newStream.Write(byteArray, 0, byteArray.Length);
newStream.Close();
// 接收返回信息
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
return webR
catch (Exception ex)
return null;
/// &summary&
/// 验证URL
/// &/summary&
/// &param name="url"&待验证 URL&/param&
/// &returns&&/returns&
private string VerifyUrl(string url)
if (string.IsNullOrEmpty(url))
throw new Exception("URL 地址不可以为空!");
if (url.StartsWith("http://", StringComparison.CurrentCultureIgnoreCase))
return string.Format("http://{0}", url);
  HttpPost 请求响应方式调用接口。
// Http Post 请求响应方式
string url = m_WebServiceUrl + EMethod.Add.ToString();
//@"http://localhost:25060/testService.asmx/Add";
Dictionary&string, string& parameters = new Dictionary&string, string& { { "parameter1", TextBox1.Text }, { "parameter2", TextBox2.Text } };
string result = HttpHelper.Helper.GetResponseString(url, ERequestMode.Post, parameters, Encoding.Default, Encoding.UTF8);
XElement root = XElement.Parse(result);
TextBox3.Text = root.V
关于SOAP和REST
  我们都知道REST相比SOAP建议的标准更轻量级,甚到用Javascript都可以调用,使用方更方便、高效、简单。但并不是说REST就是SOAP的替代者。他们都只是实现Web Service(web服务)的两种不同的架构风格。就安全性等方面来说,SOAP还是更好的。
阅读(...) 评论()

我要回帖

更多关于 c 调用webservice接口 的文章

 

随机推荐