0

我们正在构建通过肥皂网络服务与另一个应用程序通信的应用程序。另一个应用程序是由另一家公司使用 PHP 开发的。我们的应用程序是他们网络服务的客户端。

我们有测试环境,我们连接了我们的应用程序并且一切正常。然后我们转移到生产环境。但是它们的 web 服务命名空间是根据 URL 自动生成的,因此 test 和 prod env 中的命名空间不匹配。

我再次使用 svcutil 生成 SOAP 客户端用于生产,但是当我将解决方案部署到测试环境时,我无法连接到他们的 Web 服务。他们也不愿意改变任何事情。

是否可以在运行时根据端点地址更改 Web 服务客户端的命名空间?

4

1 回答 1

2

据我所知,您不能在运行时更改命名空间。肯定会起作用的明显选择可能是在编译时进行,例​​如;

#if PRODUCTION
[ServiceContract(Namespace = "MyProduction Namespace", Name = "PhpServiceContract")]
#else
[ServiceContract(Namespace = "MyTest Namespace", Name = "PhpServiceContract")]
#endif

如果您在多个地方使用它并且不想#if到处使用,只需将其移至常量即可;

[ServiceContract(Namespace=Definitions.CURRENT_NAMESPACE, Name = "PhpServiceContract")]

然后在一个地方定义它;

public static class Definitions
{
#if PRODUCTION
    public const string CURRENT_NAMESPACE = "MyProduction Namespace";
#else
    public const string CURRENT_NAMESPACE = "MyTest Namespace";
#endif
};
于 2012-10-05T17:14:07.737 回答