首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在现有接口上应用ServiceContract和OperationContract

在现有接口上应用ServiceContract和OperationContract
EN

Stack Overflow用户
提问于 2012-05-14 17:04:57
回答 2查看 3.5K关注 0票数 3

我有一些现有的接口,可以在整个系统中使用。

现在,我想使用其中一个接口作为服务契约。

但问题是,我需要在现有接口上添加[ServiceContract][OperationContract]属性,它们会污染代码的其余部分。

有没有解决这个问题的办法,不复制接口?

将属性应用于具体实现?这是一个很好的实践吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-14 17:31:53

您可以简单地使用service-warpper类型的接口来扩展接口,即:

代码语言:javascript
复制
public interface IMyCode
{
    string GetResult();
}

[ServiceContract]
public interface IMyCodeService : IMyCode
{
    [OperationContract]
    string GetResult();
}

C#允许接口继承,编译器将发出警告,指出IMyCodeService.GetResult需要new,因为它隐藏了IMyCode.GetResult方法,但不附加new不会破坏实现,例如:

代码语言:javascript
复制
class Program
{
    static void Main(string[] args)
    {
        MyCodeService service = new MyCodeService();
        IMyCodeService serviceContract = (IMyCodeService)service;
        IMyCode codeContract = (IMyCode)service;

        service.GetResult();
        serviceContract.GetResult();
        codeContract.GetResult();

        Console.ReadKey();
    }
}

public interface IMyCode
{
    void GetResult();
}

public interface IMyCodeService : IMyCode
{
    void GetResult();
}

public class MyCodeService : IMyCodeService
{
    public void GetResult()
    {
        Console.Write("I am here");
    }
}

这样,您就可以在不更改现有代码的情况下,基于现有接口提供服务契约。

如果您共享协定程序集,而不是使用WCF为您生成代理,那么您甚至可以在接受现有接口的地方传递您的服务协定,因为服务接口继承自它。

票数 7
EN

Stack Overflow用户

发布于 2012-05-14 17:17:50

我们正在慢慢地尝试迁移到WCF,但也遇到了同样的问题。除了用属性来装饰服务接口之外,我们找不到其他的方法。它们是属性,所以希望不会对代码造成太大的污染。

我们必须做的一件事(当从遗留Web服务迁移时,确保所有依赖项都被移动到公共位置,以便可以从Global.aspx和WCF主机服务调用它们)

您必须在具体实现上实现属性(主要是与ServiceBehavior相关的属性),以便WCF Host可以托管它。至于OperationContract,我们主要应用于接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10580327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档