问题描述
联系方式:
这是我与Crud Operation合同的合同界面。
[ServiceContract]
public interface IWcfCrudServices
{
[OperationContract]
Object addEmployee(Employees employee);
[OperationContract]
object getAllEmployees();
[OperationContract]
Object updateEmployee(Employees employee);
[OperationContract]
object deleteEmployee(Employees employee);
}
逻辑 具有逻辑基础方法的类,也许我在这里做错了什么?模型工作正常。
public class WcfCrudService : IWcfCrudServices
{
norTHWNDContext ctx = new norTHWNDContext();
public Object addEmployee(Employees employee)
{
ctx.Employees.Add(employee);
ctx.SaveChanges();
return ctx.Employees;
}
public object deleteEmployee(Employees employee)
{
Employees employeeForDelete = ctx.Employees.Find(employee.EmployeeId);
if (employeeForDelete != null)
{
ctx.Employees.Remove(employeeForDelete);
ctx.SaveChanges();
}
return ctx.Employees;
}
public object getAllEmployees()
{
return ctx.Employees;
}
public object updateEmployee(Employees employee)
{
Employees employeeForUpdate = ctx.Employees.Find(employee.EmployeeId);
if ( employeeForUpdate !=null)
{
employeeForUpdate.FirstName = employee.FirstName;
employeeForUpdate.LastName = employee.LastName;
employeeForUpdate.Country = employee.Country;
employeeForUpdate.City = employee.City;
employeeForUpdate.Address = employee.Address;
}
return ctx.Employees;
}
}
}
主机 主持人工作得很好,我确定这里没有问题。
class Program
{
static void Main(string[] args)
{
Uri baseHttpUrl = new Uri("http://localhost:8090/MyServices");
using (ServiceHost serviceHost = new ServiceHost(typeof(MyServices.WcfCrudService),baseHttpUrl))
{
serviceHost.AddServiceEndpoint(typeof(MyServices.IWcfCrudServices),new BasicHttpBinding(),"CrudAssig");
serviceHost.open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Service name: "+serviceHost.Description.Name);
Console.WriteLine("Press <ENTER> to terminate the service!");
Console.ReadLine();
}
}
}
客户 我的方法无济于事。
class Program
{
static void Main(string[] args)
{
Uri endpointAdress = new Uri("http://localhost:8090/MyServices/CrudAssig");
EndpointAddress endpoint = new EndpointAddress(endpointAdress);
IWcfCrudServices proxy = ChannelFactory<IWcfCrudServices>.CreateChannel(new BasicHttpBinding(),endpoint);
}
}
下一步该怎么做?我是在逻辑上还是在客户身上弄错了?我正在尝试从服务中调用用于CRUD操作的方法,但是它只是无法正常工作。
解决方法
您可以通过服务引用方式调用wcf服务,以检测服务器是否有错误。您可以先发布服务器的元数据,然后添加服务引用,然后通过服务引用调用服务器。
您可以查看此演示以将元数据添加到您的服务中:
<configuration>
<system.serviceModel>
<services>
<service name="Metadata.Example.SimpleService">
<endpoint address=""
binding="basicHttpBinding"
contract="Metadata.Example.ISimpleService" />
</service>
</services>
<behaviors>
</behaviors>
</system.serviceModel>
</configuration>
您也可以参考此链接:
How to: Publish Metadata for a Service Using a Configuration File
通过服务引用调用服务可以检查服务器端是否存在错误。如果服务调用没有问题,则代码的逻辑可能是错误的。