C# 插入方法有效,但GET方法无效
我正在使用WCF对Northwind数据库进行CRUD操作 首先,我创建了POST方法,当我使用WCF测试客户端尝试它时,该方法可以工作,但get方法显示此错误: 未能调用该服务。可能原因:服务离线或无法访问;客户端配置与代理不匹配;现有代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理、恢复到默认配置或刷新服务来进行恢复 我不知道是否要让我的ViewModel具有与Employees类相同的属性,然后迭代并显示结果 这里是配置文件C# 插入方法有效,但GET方法无效,c#,.net,wcf,C#,.net,Wcf,我正在使用WCF对Northwind数据库进行CRUD操作 首先,我创建了POST方法,当我使用WCF测试客户端尝试它时,该方法可以工作,但get方法显示此错误: 未能调用该服务。可能原因:服务离线或无法访问;客户端配置与代理不匹配;现有代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理、恢复到默认配置或刷新服务来进行恢复 我不知道是否要让我的ViewModel具有与Employees类相同的属性,然后迭代并显示结果 这里是配置文件 <?xml version="1.0"
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" sendTimeout="00:05:00" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:55658/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
name="BasicHttpBinding_IService1" />
</client>
</system.serviceModel>
</configuration>
下面是get方法:
public IEnumerable<Employee> GetEmployees()
{
List<Employee> list = new List<Employee>();
NorthwindContext db = new NorthwindContext();
list = db.Employees.ToList();
return list;
}
public IEnumerable GetEmployees()
{
列表=新列表();
NorthwindContext db=新的NorthwindContext();
list=db.Employees.ToList();
退货清单;
}
这是一项服务:
[ServiceContract]
public interface IService1
{
[OperationContract]
IEnumerable<Employee> GetEmployees();
[OperationContract]
void InsertEmployee(Employee e);
[OperationContract]
void UpdateEmployee(Employee e);
[OperationContract]
void DeleteEmployee(int id);
}
[服务合同]
公共接口IService1
{
[经营合同]
IEnumerable GetEmployees();
[经营合同]
无效插入员工(员工e);
[经营合同]
作废更新员工(员工e);
[经营合同]
无效删除员工(内部id);
}
更新
好的,我解决了它,问题是Employee类有外键,客户端无法“读取”它,它显示错误,因为他不知道如何读取该属性
我所做的只是创建EmployeeView类并插入我想要显示的属性
Get方法现在看起来是这样的
public IEnumerable<EmployeeView> GetEmployees()
{
NorthwindContext db = new NorthwindContext();
IQueryable<EmployeeView> list = db.Employees.Select(e => new EmployeeView
{
EmployeeID = e.EmployeeID,
FirstName = e.FirstName,
LastName = e.LastName
});
return list;
}
public IEnumerable GetEmployees()
{
NorthwindContext db=新的NorthwindContext();
IQueryable list=db.Employees.Select(e=>newEmployeeView
{
EmployeeID=e.EmployeeID,
FirstName=e.FirstName,
LastName=e.LastName
});
退货清单;
}
WCF通过属性公开所谓的契约,将以下属性添加到Get方法中,使其对服务可见
[经营合同]
你可以查看更多关于它的信息
要点是这样的
指示方法定义作为服务一部分的操作
在Windows通信基础(WCF)应用程序中的合同。< /P>
[运营合同]
公共IEnumerable GetEmployees()
{
列表=新列表();
NorthwindContext db=新的NorthwindContext();
list=db.Employees.ToList();
退货清单;
}
然后下一步是浏览到服务并检查它在浏览器中显示的内容(在VS中简单运行服务就足够了)
或者,如果服务已托管,则可以从浏览器浏览到该服务
更好的服务测试是使用WCF测试客户端,如果您安装了visual studio,这应该是默认设置。如果员工有另一个表的外键,则将出现解析错误。您需要为employee类创建另一个模型dto 型号:
public int EmployeeId {get;set;}
public ICollection<Order> Orders{get;set;} // this causes to parse error. Because this object have ICollection<Employee> and this causes infinite loop
或者,如果您想发送订单,您可以创建另一个dto您可能正在实施WCF Rest吗?我不知道-第一次创建WCF时,我只是使用WCF服务应用程序创建了一个项目,但即使我在接口方法属性中设置了属性,我在编写方法时也必须重复它们吗?由于Insert方法在没有问题的情况下工作,我的错误是,您不必在服务和合同上这样做,让我编辑一下我的答案,请慢慢来
public int EmployeeId {get;set;}
public ICollection<Order> Orders{get;set;} // this causes to parse error. Because this object have ICollection<Employee> and this causes infinite loop
public int EmployeeId {get;set;}