【问题标题】:How do you modify the location of a service reference at runtime?如何在运行时修改服务引用的位置?
【发布时间】:2011-03-08 11:04:10
【问题描述】:

我有一个客户端 VB .NET 3.5 WPF 应用程序,它基本上是一个测试工具 - 它调用同一个解决方案中的 Web 服务(经典的 .NET 2.0 Web 服务,而不是 WCF 应用程序)。检查某些服务方法是否正确运行。

我已将服务作为服务参考添加到 VS 中的客户端项目中,并将两个项目的解决方案设置为启动项目。当我在本地调试和运行整个事情时,它工作得很好。但问题是,我需要用户能够在运行时输入 URL,并让测试工具在指定的 URL 处检查服务,而不是在 VS 运行的位置检查服务。这样测试工具就可以检查已部署的 Web 服务副本。问题是服务引用中似乎没有任何方法可以使 URL 动态化并且可以从 VB 代码中设置。有可能吗?

【问题讨论】:

    标签: .net web-services url


    【解决方案1】:

    我认为您可以动态地将客户端指向服务。服务引用是您的服务的代理。

    我相信您可以使用以 Url 作为参数的服务引用(服务代理)的其他构造函数。

    例如YourServiceProxy("目标网址")

    如果您用户更改/编辑服务 url,我认为您可以初始化其他采用用户指定 url 的服务代理实例。

    【讨论】:

    • 干杯,这不太正确,但足够接近让我得到正确的答案。 1-parameter 构造函数不希望将参数用作 URL,而是在 app.config 中查找端点名称(VS 在添加 webreference 时将其放在那里。但是出现了一个双参数构造函数让您覆盖给定端点名称的 URL。ServiceProcy("endpoint name", "actual url")
    【解决方案2】:

    在运行时动态更改 Web 服务的 URL:
    在 config.sys(或 app.config)文件中,查找 xml 标签 .
    复制整个端点标签及其内容,并将副本粘贴到同一文件中原始标签的正下方。
    将新副本的名称属性更改为新名称(假设此示例的新名称为“NewName”);将地址属性更改为新的 URL。
    在代码中,像以前一样创建服务引用,但在“new”语句中,为类构造函数使用一个参数,即新名称:
    ServiceReference1.MyClient cl = new ServiceReference1.MyClient("NewName");
    然后像以前一样调用 ServiceReferences 方法:
    字符串 sRes = cl.MyMethod(myParm);

    这也适用于 Visual Basic,只需在代码中使用 VB 语法即可。

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2012-07-11
      • 2016-12-16
      • 1970-01-01
      相关资源
      最近更新 更多