Ошибки C #: имена членов не могут совпадать с их типом включения, а интерфейсы объявляют типы - PullRequest
0 голосов
/ 01 марта 2011

Я пытаюсь запустить сервис для appFabric для Windows Azure.Я реализую и EchoService, и мне нужно реализовать кстати и интерфейс IEchoContract, все это на стороне сервера.Поэтому я продолжаю так:

На IEchoContract.cs

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


namespace Service
{
[ServiceContract(Name = "EchoContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
interface IEchoContract
{
    public interface IEchoContract
    {
        [OperationContract]
        string Echo(string text);
    }
}}

И на EchoSErvice.cs

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

namespace Service
{
class EchoService
{
    [ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public class EchoService : IEchoContract
    {
        public string Echo(string text)
        {
            Console.WriteLine("Echoing: {0}", text);
            return text;
        }
    }}}

Я получил две ошибки, я не экспертна C # Итак первый: когда я поставил EchoService: IEchoContract, я получил

'EchoService': member names cannot be the same as their enclosing type

Второй, когда я поставил открытый интерфейс IEchoContract

'IEchoContract' : interfaces declare types

Так что, пожалуйста, помогитеThx.

Ответы [ 4 ]

2 голосов
/ 01 марта 2011

Вы объявили интерфейс и класс дважды - объявите каждый только один раз.

IEchoContract.cs:

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

namespace Service
{
    [ServiceContract(Name = "EchoContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IEchoContract
    {
        [OperationContract]
        string Echo(string text);
    }
}

EchoService.cs:

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

namespace Service
{
    [ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public class EchoService : IEchoContract
    {
        public string Echo(string text)
        {
            Console.WriteLine("Echoing: {0}", text);
            return text;
        }
    }
}
1 голос
/ 01 марта 2011

Если вы видите в своем коде, что у вас есть класс с именем EchoSevice внутри класса с именем EchoService

namespace Service
{
  class EchoService
  {
    [ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public class EchoService : IEchoContract
    ...

Попробуйте удалить внешний класс, поскольку здесь он не имеет смысла

namespace Service
{
  [ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
  public class EchoService : IEchoContract
  ...

Вам также придется удалить внешний интерфейс, поскольку он также определяется дважды (вероятно, причина того, что ваши классы также были определены дважды)

0 голосов
/ 01 марта 2011

Вы определяете класс EchoService в классе EchoService - это невозможно. Просто удалите внешний "класс EchoService", и все будет в порядке.

0 голосов
/ 01 марта 2011

В EchoService.cs вы не можете вызвать внутренний класс EchoService, так как над ним уже есть класс EchoService. Вам нужно переименовать один из них.

...