C#const与WCF服务定义的接口相关联

时间:2016-10-29 21:35:46

标签: c# wcf interface const

我正在编写WCF服务,并且正在使用Fault处理默认的IErrorHandler.ProvideFault实现:

    public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
    {
        log.Error("ProvideFault called. Converting Exception to AdministrationFault....");

        var defaultFault = new FaultException<AdministrationFault>(
            new DefaultFault { Reason = error.Message }, error.Message);

        fault = Message.CreateMessage(version,
            defaultFault.CreateMessageFault(),
            DEFAULT_FAULT_ACTION);
    }

您看到的常量DEFAULT_FAULT_ACTION需要与我的服务的FaultContractAttribute具有相同的值。鉴于我的服务是在界面中定义的:

[ServiceContract(Namespace = "http://example.com/service/IFooService")]
public interface IFooService
{
    [OperationContract]
    [FaultContract(typeof(DefaultFault),
        Action = "http://example.com/service/IFooService/fault/DefaultFault")]
    void AddUser(UserInfo userInfo, string password);
}

我无法创建const变量来存储命名空间/操作值。所以现在我被迫创建一个类来存储常量:

public class StupidHackyConstClass {
    public const string NAMESPACE = "http://exampl.com/service/IFooService";
    public const string DEFAULT_FAULT_ACTION = NAMESPACE + "/fault/DefaultFault"
}

这样我就可以重构接口属性和错误处理程序实现以使用公共值。我知道一个关于consts的类是一个可怕的反模式,但似乎我在这里有一个漏洞......有什么建议吗?

0 个答案:

没有答案