Visual Studio中同Web服务不同端点能否共用请求响应类?
同一Web服务多端点共用请求响应类的解决方案
完全不需要重复编写代码,有几种简单的方式实现共用请求响应类:
方法1:仅添加一个服务引用,动态切换端点地址
既然两个端点属于同一个Web服务(WSDL结构完全一致),只需要添加其中一个环境的服务引用即可,运行时动态修改客户端的端点地址:
' 初始化客户端(基于添加的服务引用) Dim qaClient As New MyWebService.MyServiceClient() ' 切换到QA环境地址 qaClient.Endpoint.Address = New System.ServiceModel.EndpointAddress("https://qa.yourdomain.com/Service.svc") ' 调用服务,请求类直接复用 Dim request As New MyWebService.MyRequestClass() request.Property1 = "测试数据" Dim qaResponse = qaClient.TargetServiceMethod(request) ' 切换到生产环境 Dim prodClient As New MyWebService.MyServiceClient() prodClient.Endpoint.Address = New System.ServiceModel.EndpointAddress("https://prod.yourdomain.com/Service.svc") Dim prodResponse = prodClient.TargetServiceMethod(request)
方法2:配置文件中定义多端点,通过名称调用
在app.config或web.config的system.serviceModel节点下添加多个端点配置,共享同一个契约:
<system.serviceModel> <client> <endpoint name="QAService" address="https://qa.yourdomain.com/Service.svc" binding="basicHttpBinding" contract="MyWebService.IMyService" /> <endpoint name="ProdService" address="https://prod.yourdomain.com/Service.svc" binding="basicHttpBinding" contract="MyWebService.IMyService" /> </client> </system.serviceModel>
代码中通过指定端点名称来初始化不同环境的客户端:
' 调用QA环境服务 Using qaClient As New MyWebService.MyServiceClient("QAService") Dim request As New MyWebService.MyRequestClass() ' 填充请求参数 Dim response = qaClient.TargetServiceMethod(request) End Using ' 调用生产环境服务 Using prodClient As New MyWebService.MyServiceClient("ProdService") Dim response = prodClient.TargetServiceMethod(request) End Using
方法3:合并服务引用命名空间(不推荐)
如果已经添加了两个服务引用,可以删除其中一个,重新添加时指定与另一个相同的命名空间。Visual Studio会自动复用已生成的请求/响应类,仅生成不同的客户端类。不过这种方式不如前两种灵活,后续维护需要注意命名空间一致性。
优先推荐前两种方法,既能避免重复代码,又能灵活切换环境,减少维护成本。
内容的提问来源于stack exchange,提问作者Inglonias
相关产品推荐
相关产品推荐

