前:
[ServiceContract(Namespace = "@services.url@/",
Name = "FedExContract")]
我需要在运行时更改“@ services.url @”的值。
答案 0 :(得分:0)
除了使用条件编译符号之外别无其他想法,即
#if Debug
[ServiceContract(Namespace = "@AA.BBB@/", Name = "FedExContract")]
#endif
命名空间是静态的,因为如果更改合同的命名空间,可能需要重新创建客户端代理。
答案 1 :(得分:0)
您可以在运行时更改它。但这将是很多工作,它必须在服务开始之前发生。服务启动后,您无法修改合同信息。
我个人不喜欢依赖于DB的服务启动。如果出现问题,服务永远不会出现,故障排除对于IT来说可能是一个复杂的过程。如果我要去运行时路由,我会将命名空间值存储在配置文件中。只需保持简单,仍然可以像您在问题中描述的那样替换后部署令牌。
从评论中提到构建过程。这就是我们处理它的方式:使命名空间成为一个常量字符串。例如:
[DataContract(Namespace=Constants.CURRENT_NAMESPACE]
public class MyClass
{ }
现在在一个单独的文件中声明:
// in a separate file define:
public static class Constants
{
public const string CURRENT_NAMESPACE = "url://Services";
};
如果要为不同的环境构建,请更换Constants文件以获取新定义:
//As a part of your build process switch the Constants file:
public static class Constants
{
public const string CURRENT_NAMESPACE = "url://Eclipse/Services";
};
易于管理,您始终知道正在使用的命名空间......并且服务始终启动。这有用吗?