WCF服务 - 不实现接口成员

时间:2013-03-20 21:27:04

标签: c# asp.net .net asp.net-mvc wcf

我正在遵循有关如何在位于here.

的WCF服务中添加授权的指南

现在我的问题是当我创建服务并从中删除.DoWork()方法时,我收到一条错误消息:

'Testing.HelloService'没有实现接口成员'Testing.IHelloService.DoWork()

这显然是因为我删除了它,但它是否需要?在指南中它基本上说要从中删除.DoWork()方法,所以我正在写一个写错过的人。

当我创建它时,它会将HelloService和IHelloService文件添加到项目中。我是否需要向IHelloService添加更改?

以下是HelloService.svc.cs中的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Web;
using System.ServiceModel.Activation;

namespace MLA_Test_Service
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "HelloService" in code, svc and config file together.
    [AspNetCompatibilityRequirements(
    RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class HelloService : IHelloService
    {
        public string HelloWorld()
        {
            if (HttpContext.Current.User.Identity.IsAuthenticated)
                return HttpContext.Current.User.Identity.Name;
            else
                return "Unauthenticated Person";
        }
    }
}

以下是IHelloService.cs的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace MLA_Test_Service
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IHelloService" in both code and config file together.
    [ServiceContract]
    public interface IHelloService
    {
        [OperationContract]
        void DoWork();
    }
}

2 个答案:

答案 0 :(得分:4)

您的实施需要与您的界面相匹配。如果您不想实现DoWork方法,则需要从实现和接口开始。

实际上,您可能只需将DoWork替换为您实际要在服务上调用的方法的名称,而是实现该方法。它应该作为如何在WCF服务上启动操作的示例。

答案 1 :(得分:2)

它简单的C#,你继承了一个接口,你必须在类中实现它的所有声明方法。

接口中存在

DoWork(),因此请在HelloService类中实现。

此外,只有那些方法对您的WCF服务客户端可见,该客户端将在OperationContract中声明,即接口并标记为[OperationContract]