Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 插入方法有效,但GET方法无效_C#_.net_Wcf - Fatal编程技术网

C# 插入方法有效,但GET方法无效

C# 插入方法有效,但GET方法无效,c#,.net,wcf,C#,.net,Wcf,我正在使用WCF对Northwind数据库进行CRUD操作 首先,我创建了POST方法,当我使用WCF测试客户端尝试它时,该方法可以工作,但get方法显示此错误: 未能调用该服务。可能原因:服务离线或无法访问;客户端配置与代理不匹配;现有代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理、恢复到默认配置或刷新服务来进行恢复 我不知道是否要让我的ViewModel具有与Employees类相同的属性,然后迭代并显示结果 这里是配置文件 <?xml version="1.0"

我正在使用WCF对Northwind数据库进行CRUD操作

首先,我创建了POST方法,当我使用WCF测试客户端尝试它时,该方法可以工作,但get方法显示此错误:

未能调用该服务。可能原因:服务离线或无法访问;客户端配置与代理不匹配;现有代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理、恢复到默认配置或刷新服务来进行恢复

我不知道是否要让我的ViewModel具有与Employees类相同的属性,然后迭代并显示结果

这里是配置文件

<?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;}