C# 接口无法声明类型
我的问题:我正在尝试按照本教程介绍与windows窗体链接并使用数据库的wcf服务: 当我运行代码时,我得到两个错误: “IService1”:接口不能声明类型。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
“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; }
}
}
}