我正在使用 C#使用 OData 生成无类型自定义数据服务提供程序。
实现了所有必需的提供程序和接口。
所有实体将仅在元数据创建期间动态指定。
不能使用 EDMX 或反射提供程序。
提供所有访问权限。
1) 自定义元数据提供者
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) 自定义数据查询提供者
public object InvokeServiceOperation(ServiceOperation serviceOperation, object[] parameters)
{
//Invoke the method present in ServiceOperation
}
当我给出以下 url
http://localhost/SampleService.svc/TestEntity(1)/Id>
我能够获取 id 值。
当我使用 url
http://localhost/SampleService.svc/TestServiceOperation
调用服务时,我可以调用服务操作。
但是当我尝试调用 Serv.Op 时。指定实体后,我收到错误
http://localhost/SampleService.svc/TestEntity/TestServiceOperation
当我使用这个 url 时,它会找到相应的 TestEntityResourceSet,
然后去查找 name=TestServiceOperation 的资源类型。
但是 TestServiceOperation 没有资源类型。需要在 TryResolveServiceOperation 中搜索对应的 SO 名称。
在网上搜索的所有示例都像调用 Ser.Op。仅在 .svc/SO 类型之后。
我需要为每个实体单独调用服务操作。喜欢
http://localhostTest.svc/Entity1/SerOp1 http://localhostTest.svc/Entity2/SerOp2
如何做到这一点的任何好例子?谢谢。