6

前任:

[ServiceContract(Namespace = "@services.url@/",
        Name = "FedExContract")]

我需要在运行时更改“@services.url@”的值。

4

2 回答 2

0

您可以在运行时更改它。但这将是很多工作,而且必须在服务开始之前发生。服务启动后,您将无法修改合同信息。

我个人不喜欢依赖数据库的服务启动。如果出现问题,服务永远不会出现,故障排除对于 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";
};

当您想为不同的环境构建时,将常量文件换成新定义:

//As a part of your build process switch the Constants file:
public static class Constants
{
    public const string CURRENT_NAMESPACE = "url://Eclipse/Services";
};

它易于管理,您始终知道正在使用的命名空间......并且服务始终启动。那样有用吗?

于 2012-05-15T02:47:44.517 回答
0

除了使用条件编译符号之外,想不出任何其他方法,即

#if Debug 
[ServiceContract(Namespace = "@AA.BBB@/", Name = "FedExContract")]

#endif 

命名空间是静态的,因为如果您更改合约的命名空间,您可能需要重新创建客户端代理。

于 2012-05-14T15:06:07.090 回答