C# .Net动态调用webService实现思路及代码攻略
在 C# .Net 中,可以使用动态调用的方式调用 webService。本攻略将介绍如何使用 C# .Net 动态调用 webService 的实现思路及代码。
实现思路
使用 C# .Net 动态调用 webService 的实现思路如下:
-
创建一个代理类。
-
使用代理类调用 webService。
代码实现
以下是使用 C# .Net 动态调用 webService 的代码实现:
using System;
using System.Net;
using System.Reflection;
using System.Web.Services.Description;
using System.Xml.Serialization;
public class WebServiceCaller
{
public static object CallWebService(string url, string methodName, object[] args)
{
var webServiceAssembly = Assembly.GetExecutingAssembly();
var webServiceType = GetWebServiceType(url, webServiceAssembly);
var webServiceInstance = Activator.CreateInstance(webServiceType);
var methodInfo = webServiceType.GetMethod(methodName);
var result = methodInfo.Invoke(webServiceInstance, args);
return result;
}
private static Type GetWebServiceType(string url, Assembly webServiceAssembly)
{
var webRequest = WebRequest.Create(url + "?wsdl");
var webResponse = webRequest.GetResponse();
var webServiceDescription = ServiceDescription.Read(webResponse.GetResponseStream());
var webServiceDescriptionImporter = new ServiceDescriptionImporter();
webServiceDescriptionImporter.AddServiceDescription(webServiceDescription, null, null);
var codeNamespace = new CodeNamespace();
var codeCompileUnit = new CodeCompileUnit();
codeCompileUnit.Namespaces.Add(codeNamespace);
webServiceDescriptionImporter.Import(codeNamespace, codeCompileUnit);
var codeProvider = CodeDomProvider.CreateProvider("CSharp");
var assemblyReferences = new[]
{
"System.dll",
"System.Web.Services.dll",
"System.Web.dll",
"System.Xml.dll",
"System.Data.dll"
};
var compilerParameters = new CompilerParameters(assemblyReferences);
var compilerResults = codeProvider.CompileAssemblyFromDom(compilerParameters, codeCompileUnit);
var webServiceType = compilerResults.CompiledAssembly.GetTypes()[0];
return webServiceType;
}
}
在上面的代码中,我们创建了一个名为 WebServiceCaller
的类,并在其中添加了一个名为 CallWebService
的方法。在 CallWebService
方法中,我们使用动态调用的方式调用 webService。
示例说明
以下是两个示例,演示如何使用 C# .Net 动态调用 webService。
示例1:调用 HelloWorld 方法
以下是调用 HelloWorld 方法的步骤:
- 创建一个 webService。
可以使用以下代码创建一个名为 HelloWorld
的 webService:
using System.Web.Services;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class HelloWorld : WebService
{
[WebMethod]
public string HelloWorldMethod(string name)
{
return "Hello, " + name + "!";
}
}
在上面的代码中,我们创建了一个名为 HelloWorld
的 webService,并在其中添加了一个名为 HelloWorldMethod
的方法。
- 调用 HelloWorld 方法。
可以使用以下代码调用 HelloWorldMethod
方法:
var url = "http://localhost:8080/HelloWorld.asmx";
var methodName = "HelloWorldMethod";
var args = new object[] { "world" };
var result = WebServiceCaller.CallWebService(url, methodName, args);
Console.WriteLine(result);
在上面的代码中,我们使用 WebServiceCaller.CallWebService()
方法调用 HelloWorldMethod
方法,并将结果输出到控制台。
示例2:调用 GetWeather 方法
以下是调用 GetWeather 方法的步骤:
- 创建一个 webService。
可以使用以下代码创建一个名为 WeatherService
的 webService:
using System.Web.Services;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WeatherService : WebService
{
[WebMethod]
public string GetWeather(string city)
{
return "The weather in " + city + " is sunny.";
}
}
在上面的代码中,我们创建了一个名为 WeatherService
的 webService,并在其中添加了一个名为 GetWeather
的方法。
- 调用 GetWeather 方法。
可以使用以下代码调用 GetWeather
方法:
var url = "http://localhost:8080/WeatherService.asmx";
var methodName = "GetWeather";
var args = new object[] { "New York" };
var result = WebServiceCaller.CallWebService(url, methodName, args);
Console.WriteLine(result);
在上面的代码中,我们使用 WebServiceCaller.CallWebService()
方法调用 GetWeather
方法,并将结果输出到控制台。
结论
本攻略介绍了如何使用 C# .Net 动态调用 webService 的实现思路及代码,并提供了两个示例说明。我们提供了详细的步骤和示例说明,以帮助您快速了解和使用这些方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# .Net动态调用webService实现思路及代码 - Python技术站