我正在使用C#使用OData生成无类型自定义数据服务提供程序。
实现了所有必需的提供者和接口
仅在元数据创建期间动态指定所有实体
不能使用EDMX或反射提供者
提供了所有访问权限。
1)CustomMetaDataProvider
public bool TryResolveResourceType(string name, out ResourceType resourceType)
{
return this.resourceTypes.TryGetValue(name, out resourceType);
}
public bool TryResolveServiceOperation(string name, out ServiceOperation serviceOperation)
{
if (serviceOperations.TryGetValue(name, out serviceOperation))
{
serviceOperation.SetReadOnly();
return true;
}
else
{
serviceOperation = null;
return false;
}
}
2)CustomDataQueryProvider
public object InvokeServiceOperation(ServiceOperation serviceOperation, object[] parameters)
{
//Invoke the method present in ServiceOperation
}
当我提供以下网址时
http:// localhost / SampleService.svc / TestEntity(1)/ Id>
我可以获取id值。
当我使用网址打电话给服务时
http:// localhost / SampleService.svc / TestServiceOperation
我可以调用服务操作。
但是当我尝试调用Serv.Op时。指定实体后,我得到错误
http:// localhost / SampleService.svc / TestEntity / TestServiceOperation
当我使用这个url时,它找到相应的TestEntityResourceSet,
然后去查找name = TestServiceOperation的resourcetype
但是没有TestServiceOperation的资源类型。
需要在TryResolveServiceOperation中使用相应的SO名称进行搜索。
在网上搜索的所有示例都像调用Ser.Op.仅限.svc / SO类型。
我需要为每个实体单独调用服务操作。喜欢
http:// localhostTest.svc / Entity1 / SerOp1 http:// localhostTest.svc / Entity2 / SerOp2
如何做到这一点的任何好例子?感谢。