C# 接口无法声明类型

C# 接口无法声明类型,c#,.net,wcf,class,types,C#,.net,Wcf,Class,Types,我的问题:我正在尝试按照本教程介绍与windows窗体链接并使用数据库的wcf服务: 当我运行代码时,我得到两个错误: “IService1”:接口不能声明类型。 “UserDetails”:接口不能声明类型 我一直在寻找stackoverflow和google的答案,但唯一接近我的问题是没有答案。还有一些评论告诉他们这是一个代码问题还是一个配置问题。 我把我的两个文件IService.cs和Service.cs的代码放在这里: 副总统 using System; using System.Co

我的问题:我正在尝试按照本教程介绍与windows窗体链接并使用数据库的wcf服务:

当我运行代码时,我得到两个错误: “IService1”:接口不能声明类型。
“UserDetails”:接口不能声明类型

我一直在寻找stackoverflow和google的答案,但唯一接近我的问题是没有答案。还有一些评论告诉他们这是一个代码问题还是一个配置问题。 我把我的两个文件IService.cs和Service.cs的代码放在这里: 副总统

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

namespace WCFServiceForInsert
{
    // REMARQUE : vous pouvez utiliser la commande Renommer du menu Refactoriser pour changer le nom d'interface "IService" à la fois dans le code et le fichier de configuration.
    [ServiceContract]
    public interface IService
    {
        // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
        [ServiceContract]
        public interface IService1
        {
            [OperationContract]
            string InsertUserDetails(UserDetails userInfo);

            [OperationContract]
            DataSet SelectUserDetails();
        }

        // Use a data contract as illustrated in the sample below to add composite types to service operations.
        [DataContract]
         public class UserDetails
        {
            int id;
            string title;
            string salary;
            string benefits;
            string keywords;
            string jobType;
            string location;
            string startDate;
            string description;
            string recruitmentAgency;
            string agencyContact;
            string agencyPhone;
            string agencyEmail;
            string jobRef;
            string datePosted;
            string dateExpire;

            [DataMember]
            public int JobID
            {
                get { return id; }
                set { id = value; }
            }

            [DataMember]
            public string Title
            {
                get { return title; }
                set { title = value; }
            }
            [DataMember]
            public string Salary
            {
                get { return salary; }
                set { salary = value; }
            }
            [DataMember]
            public string Benefits
            {
                get { return benefits; }
                set { benefits = value; }
            }
            [DataMember]
            public string Keywords
            {
                get { return keywords; }
                set { keywords = value; }
            }
            [DataMember]
            public string JobType
            {
                get { return jobType; }
                set { jobType = value; }
            }
            [DataMember]
            public string Location
            {
                get { return location; }
                set { location = value; }
            }
            [DataMember]
            public string StartDate
            {
                get { return startDate; }
                set { startDate = value; }
            }
            [DataMember]
            public string Description
            {
                get { return description; }
                set { description = value; }
            }
            [DataMember]
            public string RecruitmentAgency
            {
                get { return recruitmentAgency; }
                set { recruitmentAgency = value; }
            }
            [DataMember]
            public string AgencyContact
            {
                get { return agencyContact; }
                set { agencyContact = value; }
            }
            [DataMember]
            public string AgencyPhone
            {
                get { return agencyPhone; }
                set { agencyPhone = value; }
            }
            [DataMember]
            public string AgencyEmail
            {
                get { return agencyEmail; }
                set { agencyEmail = value; }
            }
            [DataMember]
            public string JobRef
            {
                get { return jobRef; }
                set { jobRef = value; }
            }
            [DataMember]
            public string DatePosted
            {
                get { return datePosted; }
                set { datePosted = value; }
            }
            [DataMember]
            public string DateExpire
            {
                get { return dateExpire; }
                set { dateExpire = value; }
            }
        }
    }

}
Service.cs文件:

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

namespace WCFServiceForInsert
{
    // REMARQUE : vous pouvez utiliser la commande Renommer du menu Refactoriser pour changer le nom de classe "Service" à la fois dans le code, le fichier svc et le fichier de configuration.
    public class Service : IService
    {
        public DataSet SelectUserDetails()
        {
            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=registration;User ID=sa;Password=wintellect");
            con.Open();
            SqlCommand cmd = new SqlCommand("Select * from Table", con);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            sda.Fill(ds);
            cmd.ExecuteNonQuery();
            con.Close();
            return ds;
        }

        public string InsertUserDetails(IService.UserDetails userInfo)
        {
            string Message;
            Message = "";
            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=registration;User ID=sa;Password=wintellect");
            con.Open();
            SqlCommand cmd = new SqlCommand("insert into RegistrationTable(Title,Salary,Benefits,Keywords,JobType,Location,StartDate,Description,RecruitmentAgency,AgencyContact,AgencyPhone,AgencyEmail,JobRef,DatePosted,DateExpire) values(@Title,@Salary,@Benefits,@Keywords,@JobType,@Location,@StartDate,@Description,@RecruitmentAgency,@AgencyContact,@AgencyPhone,@AgencyEmail,@JobRef,@DatePosted,@DateExpire)", con);
            cmd.Parameters.AddWithValue("@Title", userInfo.Title);
            cmd.Parameters.AddWithValue("@Salary", userInfo.Salary);
            cmd.Parameters.AddWithValue("@Benefits", userInfo.Benefits);
            cmd.Parameters.AddWithValue("@Keywords", userInfo.Keywords);
            cmd.Parameters.AddWithValue("@JobType", userInfo.JobType);
            cmd.Parameters.AddWithValue("@Location", userInfo.Location);
            cmd.Parameters.AddWithValue("@StartDate", userInfo.StartDate);
            cmd.Parameters.AddWithValue("@Description", userInfo.Description);
            cmd.Parameters.AddWithValue("@RecruitmentAgency", userInfo.RecruitmentAgency);
            cmd.Parameters.AddWithValue("@AgencyContact", userInfo.AgencyContact);
            cmd.Parameters.AddWithValue("@AgencyPhone", userInfo.AgencyPhone);
            cmd.Parameters.AddWithValue("@AgencyEmail", userInfo.AgencyEmail);
            cmd.Parameters.AddWithValue("@JobRef", userInfo.JobRef);
            cmd.Parameters.AddWithValue("@DatePosted", userInfo.DatePosted);
            cmd.Parameters.AddWithValue("@DateExpire", userInfo.DateExpire);
            int result = cmd.ExecuteNonQuery();
            if (result == 1)
            {
                Message = userInfo.Title + " Details inserted successfully";
            }
            else
            {
                Message = userInfo.Title + " Details not inserted successfully";
            }
            con.Close();
            return Message;
        }
    }
}

只需将类移到接口定义之外。另外,最好的做法是不嵌套接口(对于C#,通常最好的做法是每个文件使用一个类/接口)


只需将类移到接口定义之外。另外,最好的做法是不嵌套接口(对于C#,通常最好的做法是每个文件使用一个类/接口)


只需将类移到接口定义之外。另外,最好的做法是不嵌套接口(对于C#,通常最好的做法是每个文件使用一个类/接口)


只需将类移到接口定义之外。另外,最好的做法是不嵌套接口(对于C#,通常最好的做法是每个文件使用一个类/接口)



错误消息很清楚-不能在
接口
声明中声明
。将
UserDetails
声明移动到
IService
声明之外以修复它。查看示例代码-它没有在接口内声明任何类型。出于某种原因,您已经将
IService1
UserDetails
包装在一个接口中,但这不在同一个代码中……我尝试了@ChrisG给我的解决方案,但它没有起作用(它将UserDetails声明放在IService声明之外,就像MarcinJuraszek所说的那样)。我仍然有错误。Jon Skeet您所说的“它不在同一代码中”是什么意思?错误消息很清楚-您不能在
接口
声明中声明
。将
UserDetails
声明移动到
IService
声明之外以修复它。查看示例代码-它没有在接口内声明任何类型。出于某种原因,您已经将
IService1
UserDetails
包装在一个接口中,但这不在同一个代码中……我尝试了@ChrisG给我的解决方案,但它没有起作用(它将UserDetails声明放在IService声明之外,就像MarcinJuraszek所说的那样)。我仍然有错误。Jon Skeet您所说的“它不在同一代码中”是什么意思?错误消息很清楚-您不能在
接口
声明中声明
。将
UserDetails
声明移动到
IService
声明之外以修复它。查看示例代码-它没有在接口内声明任何类型。出于某种原因,您已经将
IService1
UserDetails
包装在一个接口中,但这不在同一个代码中……我尝试了@ChrisG给我的解决方案,但它没有起作用(它将UserDetails声明放在IService声明之外,就像MarcinJuraszek所说的那样)。我仍然有错误。Jon Skeet您所说的“它不在同一代码中”是什么意思?错误消息很清楚-您不能在
接口
声明中声明
。将
UserDetails
声明移动到
IService
声明之外以修复它。查看示例代码-它没有在接口内声明任何类型。出于某种原因,您已经将
IService1
UserDetails
包装在一个接口中,但这不在同一个代码中……我尝试了@ChrisG给我的解决方案,但它没有起作用(它将UserDetails声明放在IService声明之外,就像MarcinJuraszek所说的那样)。我仍然有错误。Jon Skeet你说的“不在同一代码中”是什么意思?谢谢你的回答!然而,它还没有解决错误,但我仍然有相同的错误与你的回答嗯。。。我从编译过的测试床上复制了这个。你确定他们是一样的吗?事实上我确实忘记了一件事:我确实忘记了一些东西。。。公共类服务:IService应更改为公共类服务:IService1。否则您将得到接口未实现的错误。它没有改变任何东西:(只是错误的名称,它现在是IService1无法声明typesWeird。您能确保每个都是完全独立的…公共接口IService{}公共接口IService1{…}公共类UserDetails{…}在移动到下一个接口/类之前,请确保关闭接口或类的每个打开大括号。感谢您的回答!尽管它没有解决错误,但我仍然与您的回答有相同的错误。嗯…我从编译的测试床上复制了这个。您确定它们是相同的吗?实际上我忘记了一件事:我为获取一些信息…公共类服务:IService应该更改为公共类服务:IService1。否则,您将得到未实现的接口错误。它没有更改任何内容:(只是错误的名称,现在是IService1无法声明typesWeird。您能确保每个都是完全独立的吗…公共接口IService{}公共接口IService1{…}公共类UserDetails{…}在移动到下一个接口/类之前,请确保关闭接口或类的每个打开大括号。感谢您的回答!尽管它没有解决错误,但我仍然与您的回答有相同的错误。嗯…我从编译的测试床上复制了这个。您确定它们是相同的吗?实际上我忘记了一件事:我为获取一些信息…公共类服务:IService应该更改为公共类服务:IService1。否则,您将得到接口未实现错误。它没有更改任何内容:(只是名称)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace WCFServiceForInsert
{

// REMARQUE : vous pouvez utiliser la commande Renommer du menu Refactoriser pour changer le nom d'interface "IService" à la fois dans le code et le fichier de configuration.
// There is not a reason to keep this IService unless it is necessary for some other piece of your code
[ServiceContract]
public interface IService
{


}

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string InsertUserDetails(UserDetails userInfo);

        [OperationContract]
        DataSet SelectUserDetails();
    }


    // Use a data contract as illustrated in the sample below to add composite types to service operations.
    // You must declare this outside of the Interface definition.
    [DataContract]
     public class UserDetails
    {
        int id;
        string title;
        string salary;
        string benefits;
        string keywords;
        string jobType;
        string location;
        string startDate;
        string description;
        string recruitmentAgency;
        string agencyContact;
        string agencyPhone;
        string agencyEmail;
        string jobRef;
        string datePosted;
        string dateExpire;

        [DataMember]
        public int JobID
        {
            get { return id; }
            set { id = value; }
        }

        [DataMember]
        public string Title
        {
            get { return title; }
            set { title = value; }
        }
        [DataMember]
        public string Salary
        {
            get { return salary; }
            set { salary = value; }
        }
        [DataMember]
        public string Benefits
        {
            get { return benefits; }
            set { benefits = value; }
        }
        [DataMember]
        public string Keywords
        {
            get { return keywords; }
            set { keywords = value; }
        }
        [DataMember]
        public string JobType
        {
            get { return jobType; }
            set { jobType = value; }
        }
        [DataMember]
        public string Location
        {
            get { return location; }
            set { location = value; }
        }
        [DataMember]
        public string StartDate
        {
            get { return startDate; }
            set { startDate = value; }
        }
        [DataMember]
        public string Description
        {
            get { return description; }
            set { description = value; }
        }
        [DataMember]
        public string RecruitmentAgency
        {
            get { return recruitmentAgency; }
            set { recruitmentAgency = value; }
        }
        [DataMember]
        public string AgencyContact
        {
            get { return agencyContact; }
            set { agencyContact = value; }
        }
        [DataMember]
        public string AgencyPhone
        {
            get { return agencyPhone; }
            set { agencyPhone = value; }
        }
        [DataMember]
        public string AgencyEmail
        {
            get { return agencyEmail; }
            set { agencyEmail = value; }
        }
        [DataMember]
        public string JobRef
        {
            get { return jobRef; }
            set { jobRef = value; }
        }
        [DataMember]
        public string DatePosted
        {
            get { return datePosted; }
            set { datePosted = value; }
        }
        [DataMember]
        public string DateExpire
        {
            get { return dateExpire; }
            set { dateExpire = value; }
        }
    }


 }