首页 > 解决方案 > 在 Visual Studio 中使用动态根 URL 生成 Web 服务

问题描述

我想创建一个与两个 SOAP Web 服务通信的 C# 应用程序。这些 Web 服务(WSDL 文件)使用相同的 url

<root>/...dirPath.../dms.cfc?wsdl
<root>/...dirPath.../cobra.cfc?wsdl

<root>应该是动态的,因为应用程序用户必须设置此变量。

首先我拿了这个

如何在不重新编译的情况下在 .NET 中动态切换 Web 服务地址?

并尝试了这个

https://www.codeproject.com/Articles/12317/How-to-make-your-Web-Reference-proxy-URL-dynamic

此外,我找到了这个链接

https://docs.microsoft.com/en-us/sql/reporting-services/report-server-web-service/net-framework/setting-the-url-property-of-the-web-service?view= sql-server-2017

但这些链接没有帮助我找不到设置URL behaviour,我无法通过代码访问 URL 属性。

我创建了一个应该处理这两个 web 服务的静态类。用户能够更改网络服务根 URL。

一个示例 URL 是

http://localhost:8500/CoBRA/...dirPath.../dms.cfc?wsdl

或者

http://myInstance.com/CoBRA/...dirPath.../dms.cfc?wsdl

由这段代码处理

public static class CoBRAService
    {
        private static cobraClient cobraBaseClient = new cobraClient();

        private static dmsClient cobraDmsClient = new dmsClient();

        public static void SetWebserviceRootUrl(string rootUrl)
        {
            // cobraBaseClient.url = $"{rootUrl}/path/dms.cfc?wsdl";
            // cobraDmsClient.url = $"{rootUrl}/path/cobra.cfc?wsdl";
        }
    }

两个 web 服务都没有继承System.Web.Services.Protocols.SoapHttpClientProtocol它们实现这个public partial class cobraClient : System.ServiceModel.ClientBase<MyProject.CoBRA_Base.cobra>, MyProject.CoBRA_Base.cobra

这是我的项目结构

在此处输入图像描述

我在哪里可以设置 web 服务 url 或如何访问 url 属性?

标签: c#visual-studioweb-servicessoap

解决方案


如果您的“CoBRA_BaseClient”和“CoBRA_DMSClient”继承自System.ServiceModel.ClientBase<TChannel> ,那么您可以尝试以下操作:

public static CoBRA_BaseClient CreateService()
{
    CoBRA_BaseClient service = new CoBRA_BaseClient();
    service.Endpoint.Address = new EndpointAddress("uri");
    return service;
}

public static CoBRA_DMSClient CreateService()
{
    CoBRA_DMSClient service = new CoBRA_DMSClient();
    service.Endpoint.Address = new EndpointAddress("uri");
    return service;
}

推荐阅读