具有多个名称空间的c#SOAP客户端到PHP Web服务

具有多个名称空间的c#SOAP客户端到PHP Web服务,c#,php,web-services,soap,C#,Php,Web Services,Soap,我们正在构建一个通过soapweb服务与另一个应用程序通信的应用程序。另一个应用程序是由另一家公司使用PHP开发的。我们的应用程序是他们web服务的客户端 我们有一个测试环境,在那里我们连接了我们的应用程序,一切正常。然后我们转到生产环境。但他们的web服务名称空间是基于URL自动生成的,所以test和prod env中的名称空间不匹配 我再次使用svcutil生成了用于生产的SOAP客户端,但当我将解决方案部署到test env时,我无法连接到他们的web服务。他们也不愿意改变任何事情 是否可

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

我们有一个测试环境,在那里我们连接了我们的应用程序,一切正常。然后我们转到生产环境。但他们的web服务名称空间是基于URL自动生成的,所以test和prod env中的名称空间不匹配

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


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

据我所知,您不能在运行时更改命名空间。显而易见的选择是在编译时执行,比如

#if PRODUCTION
[ServiceContract(Namespace = "MyProduction Namespace", Name = "PhpServiceContract")]
#else
[ServiceContract(Namespace = "MyTest Namespace", Name = "PhpServiceContract")]
#endif
如果您在多个位置使用它,并且不想
#如果到处都是
,只需将其移动到常量即可

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

他们的web服务名称空间是根据URL自动生成的
。如果你想在不破坏每个客户的情况下将服务移动到一个新的位置,这听起来是一个非常可怕的想法。这和我们告诉他们的完全一样,但他们不介意。我们也在与其他公司合作,我们已经很少部署同一组Web服务,而且没有问题。但他们也使用c#服务模式。