在 C# 中访问 Web 服务的标准

本文关键字:服务 标准 Web 访问 | 更新日期: 2023-09-27 18:36:16

我想知道一种在C#中访问Web服务的标准方法,其中Web服务引用可以通过编程方式定义。

我有以下情况:

  1. 可以通过编程方式设置多个 Web 服务。因此,我无法使用Visual Studio提供的"添加Web服务引用"(或者我认为如果我错了,请纠正我)。
  2. 添加的 Web 服务具有相同的结构/操作/操作/请求/响应,但可能属于提供不同数据的不同域。

例如:

  webservice 01 :  http://abc.example.com/getData
  webservice 02 :  http://xyz.example.net/getData
  1. 是否仍可以使用从一个服务生成的代理并将其用于另一个服务,或者我是否必须处理原始 XML 响应?

编辑 01 :我想知道以下访问 Web 服务的片段是否可以推广到用于所有 Web 服务

        var binding = new BasicHttpBinding();
        var address = new EndpointAddress("http://www.abc.com/service.asmx");
        var factory = new ChannelFactory<IGeneralProxy>(binding, address);
        var obj = factory.CreateChannel();
        var responseString = obj.GetData("UserName", "Password");
        Assert.IsNotNull(responseString);

其中IGeneralProxy是客户端的接口

如果以上任何一点不清楚,请告诉我。

在 C# 中访问 Web 服务的标准

是的,只要服务相同,您就可以对两个服务使用相同的生成代理。我一直这样做。

这是我的代码截图。我使用 WSE 3.0,因为我正在处理的项目是 .net 2.0。

ServiceWse serivce = new ServiceWse();
CookieContainer cookieContainer = new CookieContainer();
serivce.Timeout = 1000 * 60 * CommonFunctions.GetConfigValue<int>(Consts.Common.WebServiceTimeout, 20);
serivce.Url = CommonFunctions.GetConfigValue(Consts.Urls.MyServiceSecuredURL, string.Empty);
serivce.CookieContainer = cookieContainer;
if (CommonFunctions.GetConfigValue(Consts.Security.UseSecuredServices, false))
    CommonFunctions.SetWSSecurity(_service.RequestSoapContext);

看看之前对类似问题的回答:

如何以编程方式将客户端连接到 WCF 服务?

您可以为每个 Web 服务执行此操作。

我们做类似的事情。Web 服务引用是针对我们服务的 Dev 版本创建的。我们还在 web.config 中为每个 Web 服务 URI 设置了一个设置,我们在实例化服务时使用;这样,当我们部署到生产环境时,我们所要做的就是更改 web.config 中的 URI,而不是重新生成项目。

var myService= new myService(){Uri = [service uri from web.config]};