【问题标题】:c# SOAP client to PHP webservice with multiple namespacesc# SOAP 客户端到具有多个命名空间的 PHP Web 服务
【发布时间】:2012-10-05 16:49:49
【问题描述】:

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

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

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

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

【问题讨论】:

  • their web service namespace is generated automatically based on URL。如果您想在不破坏每个客户端的情况下将服务移动到新位置,这听起来是一个非常可怕的想法。
  • 这与我们告诉他们的完全一样,但他们不打扰。我们也在与其他公司合作,我们已经很少部署相同的网络服务,没有任何问题。但他们也使用 c# 服务模型。

标签: c# php web-services soap


【解决方案1】:

据我所知,您无法在运行时更改命名空间。肯定会起作用的明显选项可能是在编译时执行它,例如;

#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
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多