深入Atlas系列:探究Application Services(2) - 自定义服务器端Profile Service支持

本文介绍如何通过两步自定义ASP.NET AJAX的ProfileService:指定路径和实现自定义WebService类。具体包括GetAllPropertiesForCurrentUser、GetPropertiesForCurrentUser及SetPropertiesForCurrentUser三个核心方法的实现细节。
  在上一篇文章中,我们讨论了使用ASP.NET AJAX默认的Profile Service。一般来说,它已经能够迎合大多数应用的需要了。不过除此之外,ASP.NET AJAX还提供了让我们自定义Profile Service的机制。要自定义Profile Service,一般来说要分为两步:


一、在ScriptManager中指定Profile Service的Path

在ASP.NET AJAX的客户端脚本中,如果没有使用Sys.Services.ProfileService.set_path方法来指定一个提供Profile Service的地址,就会使用默认的地址,它会使ASP.NET AJAX的Profile Service使用程序集中特定的类。一般来说,我们不需要手动调用Sys.Services.ProfileService.set_path方法,只需要在ScriptManager中指定即可。如下:
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
    
<ProfileService Path="CustomProfileService.asmx" />
</asp:ScriptManager>

打开页面后,可以在页面中发现如下的JavaScript代码:
None.gifSys.Services.ProfileService.set_path('/CustomProfileService.asmx');

出现“/”是因为我测试的页面在根目录下。因此,Profile Service就会使用指定的Web Service,而不是默认的Web Service类。


二、实现自己的Web Service类

指定了自己的Web Service类,自然就要实现自己的类了。事实上,我们要实现的就是3个方法。就这个方面来说,ASP.NET AJAX中Profile Service使用的默认的Web Service类Microsoft.Web.Profile.ProfileService是我们绝佳的参考。因此,我们在这里分析一下这些方法,对于我们的自定义工作是非常有帮助的。

可能需要注意的一点是,我们在实现这些方法时,从理论上来讲参数类型不用完全和Microsoft.Web.Profile.ProfileService中的方法完全相同。ASP.NET AJAX的能够根据参数的类型尽可能地将获得的JSON字符串转换成需要的类型。不过事实上,似乎Microsoft.Web.Profile.ProfileService里那些方法的参数选择已经是非常合理的。另外,由于客户端Profile Service代码不太容易修改(事实上客户端也不是不能扩展,最极端的情况,不就是我们自己实现一个ProfileService吗?),为了保持返回的JSON字符串能够被正确处理,这些方法的返回值一般来说可以不变。


1、GetAllPropertiesForCurrentUser方法

这个方法的作用是获得当前用户所有的Profile信息,它没有输入的参数,返回的JSON字符串形式如下:
{
    'ZipCode' : ...,
    'Address.City' : ...,
    'Address.State' : ...
}

它通过GroupName.ProfileName的形式来表示Profile Group,Group中的每一个Profile需要分别列出,而“...”则表示对应Profile值的JSON字符串。

在Microsoft.Web.Profile.ProfileService里,这个方法的代码如下:
[WebMethod]
public IDictionary<stringobject> GetAllPropertiesForCurrentUser()
{
    ProfileService.CheckProfileServicesEnabled();
   
return ProfileService.GetProfile(HttpContext.Current, null);
}


2、GetPropertiesForCurrentUser方法

这个方法的作用是获得当前用户指定的Profile信息,它的输入JSON字符串形式如下:
['ZipCode', 'Address.City', 'Address.State']

它的返回值的JSON字符串和GetAllPropertiesForCurrentUser相同,就不再赘述了。

在类中,这个方法的代码如下:
[WebMethod]
public IDictionary<stringobject> GetPropertiesForCurrentUser(string[] properties)
{
    ProfileService.CheckProfileServicesEnabled();
    
return ProfileService.GetProfile(HttpContext.Current, properties);
}

可以看到,GetAllPropertiesForCurrentUser和GetPropertiesForCurrentUser中都是使用了ProfileService.GetProfile静态方法来获得结果的,我们来仔细看一下这个方法的实现。如下:
ContractedBlock.gifExpandedBlockStart.gif GetProfile静态方法
 1 internal static IDictionary<stringobject> GetProfile(HttpContext context, string[] properties)
 2 {
 3     // 当前用户的Profile
 4     ProfileBase profile = context.Profile;
 5 
 6     // 如果没有profile,则返回null
 7     if (profile == null)
 8     {
 9         return null;
10     }
11 
12     // 作为结果返回的字典
13     IDictionary<stringobject> dictResult = new Dictionary<stringobject>();
14 
15     // 如果properties为null,表示需要返回所有的参数
16     if (properties == null)
17     {
18         // 枚举web.config中注册的每一个Profile属性设置
19         foreach (SettingsProperty property in ProfileBase.Properties)
20         {
21             // 获得Profile属性名称
22             string name = property.Name;
23 
24             // 如果web.config配置文件里没有定义ReadAccessProperties,
25             // 或者该Profile属性被定义在ReadAccessPropeties中。
26             if ((ProfileService._allowedGet != null&& ProfileService._allowedGet.ContainsKey(name))
27             {
28                 // 则准备输出
29                 dictResult.Add(name, profile[name]);
30             }
31         }
32 
33         // 返回结果
34         return dictResult;
35     }
36 
37     // 枚举参数的每一项,它们是需要输出的Profile信息
38     foreach (string prop in properties)
39     {
40         // 如果web.config配置文件里没有定义ReadAccessProperties,
41         // 或者该Profile属性被定义在ReadAccessPropeties中。
42         if ((ProfileService._allowedGet != null&& ProfileService._allowedGet.ContainsKey(prop))
43         {
44             // 则准备输出
45             dictResult.Add(prop, profile[prop]);
46         }
47     }
48 
49     // 返回结果
50     return dictResult;
51 }

这个方法还是非常容易理解和编写的,不需要涉及到任何序列化或者反序列化操作,那些工作完全由ASP.NET的Web Service Access机制代为完成了。


3、SetPropertiesForCurrentUser方法

这个方法的作用是保存当前用户的Profile信息,它的输入JSON字符串形式如下:
{
    'ZipCode' : ...,
    'Address.City' : ...,
    'Address.State' : ...
}

而它返回的则是正确保存的Profile数量。代码如下:
[WebMethod]
public int SetPropertiesForCurrentUser(IDictionary<stringobject> values)
{
    ProfileService.CheckProfileServicesEnabled();
    
return ProfileService.SetProfile(HttpContext.Current, values);
}

起关键作用的方法是ProfileService.SetProfile静态方法,我们来仔细看一下这个方法:
ContractedBlock.gifExpandedBlockStart.gif SetProfile静态方法
 1 internal static int SetProfile(HttpContext context, IDictionary<stringobject> profileValues)
 2 {
 3     // 如果没有提供保存的Profile值,则返回0
 4     if ((profileValues == null|| (profileValues.Count == 0))
 5     {
 6         return 0;
 7     }
 8 
 9     // 获取当前用户的Profile值
10     ProfileBase profile = context.Profile;
11 
12     // 如果当前没有Profile,也返回0
13     if (profile == null)
14     {
15         return 0;
16     }
17 
18     int count = 0;
19 
20     // 获得当前的Serializer,
21     // 以获取JavaScriptTypeResolver和JavaScriptConverter的支持
22     WebServiceData data = WebServiceData.GetWebServiceData(context, context.Request.FilePath);
23     JavaScriptSerializer serializer = data.Serializer;
24 
25     // 枚举提供的每一个Profile的值
26     foreach (KeyValuePair<stringobject> pair in profileValues)
27     {
28         // 获得Profile的名称
29         string name = pair.Key;
30         if ((ProfileService._allowedSet != null&& ProfileService._allowedSet.ContainsKey(name))
31         {
32             // 通过Profile名称获得在web.config中的Profile定义
33             SettingsProperty property = ProfileBase.Properties[name];
34             // 如果存在这个Profile属性
35             if (property != null)
36             {
37                 // 获得Profile属性的类型
38                 Type type = property.PropertyType;
39                 // 调用内部的ObjectConverter.ConvertObjectToType方法进行转换,
40                 // 然后赋值给相应的Profile
41                 profile[name] = ObjectConverter.ConvertObjectToType(pair1.Value, type, serializer);
42 
43                 // 已经保存的Profile属性数量加1
44                 count++;
45                 continue;
46             }
47         }
48     }
49 
50     return count;
51 }

方法也不难理解,不过可以需要对于ASP.NET AJAX的序列化与反序列化能力有一定了解,例如第22和23行构造了一个JavaScriptSerializer的目的是使用包含在WebServiceData内的JavaScriptTypeResolver信息,以此获得从字符串形式的type描述到确定type类型的映射关系。这其实是一个非常有用的特性,不过有点让人想不通的是,在目前的WebServiceData中由于没有方法添加自定义的JavaScriptTypeResolver,因此这个功能的效用为0。难道未来的版本会有办法利用到这个特性?拭目以待吧,虽然我觉得比较困难。

我们也可以看到,这个方法中使用了内部的ObjectConverter.ConvertObjectToType方法来将一个嵌套的Dictionay和List转换为指定的类型。如果我们要使用这个方法,应该怎么做呢?事实上,ASP.NET AJAX提供了我们一定的序列化与反序列化能力。请看JavaScirptSerializer的公有实例方法ConvertToType<T>的实现:
public T ConvertToType<T>(object obj)
{
    
return (T) ObjectConverter.ConvertObjectToType(obj, typeof(T), this);
}

它直接调用了内部的ObjectConverter.ConverObjectToType方法,这不就是我们所需要的功能吗?

等一下!别高兴的太早!请注意,这是一个范型方法!我们这里只能获得一个Profile属性的类型对象,不能在编译期指定调用哪种具体类型的范型方法,也就是说,我们不能在这里简单地使用这个范型方法。我们在这里需要对范型方法的调用进行“后期绑定”,因为只有在执行期才能获得范型的类型。

后期绑定?这不就是Reflection提供的功能吗?因此,我们可以使用.NET Framework 2.0的Reflection机制,它已经对于范型类型提供了支持。在这里,我们可以这么做:
JavaScriptSerializer serializer = new JavaScriptSerializer();

Type type 
= value.GetType(); // 获得所需的Profile属性的Type对象
MethodInfo info 
= typeof(JavaScriptSerializer).GetMethod("ConvertToType").MakeGenericMethod(type);
return info.Invoke(serializer, new object[] { value });

这样,我们就实现了对于范型方法调用的“后期绑定”:在执行期才决定调用哪个具体类型的范型方法。这么做会有性能损失,例如查找ConvertToType方法并构造相应的范型的MethodInfo,但是如果我们使用Dictionary<Type, MethodInfo>将type和它所对应的MethodInfo保存起来,可以在一定程度上的减少性能的损失。不过使用Method.Invoke造成的性能损失就无法避免了。

另外,我打算在接下来的文章中详细分析一下ASP.NET AJAX中提供给开发人员的序列化与反序列化能力,以及它们是如何配合JavaScriptTypeResolver与JavaScriptConverter提供一定的自定义能力。





我们现在已经知道了如何自定义服务器端的Profile Service支持,但是如果我们一直使用客户端的“标准”功能,还谈不上“自定义”或者“扩展”。那么在下一片文章中,我们一起来讨论一下自定义客户端的Profile Service支持吧。
清华镜像的mongoDB el7下面有这些文件:mongodb-atlas-1.11.0.x86_64.rpm 2.0 KiB 2024-02-03 02:36 mongodb-atlas-1.12.0.x86_64.rpm 2.0 KiB 2024-02-03 02:36 mongodb-atlas-1.12.1.x86_64.rpm 2.0 KiB 2024-02-03 02:36 mongodb-atlas-1.12.2.x86_64.rpm 2.0 KiB 2024-02-03 02:36 mongodb-atlas-1.13.0.x86_64.rpm 2.0 KiB 2024-02-03 02:36 mongodb-atlas-1.14.0.x86_64.rpm 2.0 KiB 2024-02-03 02:36 mongodb-atlas-1.14.1.x86_64.rpm 2.0 KiB 2024-02-03 02:36 mongodb-atlas-1.14.2.x86_64.rpm 2.0 KiB 2024-02-03 02:36 mongodb-atlas-1.14.3.x86_64.rpm 2.0 KiB 2024-02-09 05:07 mongodb-atlas-1.15.0.x86_64.rpm 2.0 KiB 2024-02-23 08:22 mongodb-atlas-1.15.1.x86_64.rpm 2.0 KiB 2024-03-01 09:58 mongodb-atlas-1.16.0.x86_64.rpm 2.0 KiB 2024-03-08 11:36 mongodb-atlas-1.17.0.x86_64.rpm 2.0 KiB 2024-03-15 13:04 mongodb-atlas-1.18.0.x86_64.rpm 2.0 KiB 2024-03-28 16:47 mongodb-atlas-1.19.0.x86_64.rpm 2.0 KiB 2024-04-03 18:14 mongodb-atlas-1.20.0.x86_64.rpm 2.0 KiB 2024-04-12 21:00 mongodb-atlas-1.21.0.x86_64.rpm 2.0 KiB 2024-04-27 00:44 mongodb-atlas-1.22.0.x86_64.rpm 2.0 KiB 2024-05-02 01:54 mongodb-atlas-1.23.0.x86_64.rpm 2.0 KiB 2024-05-24 21:02 mongodb-atlas-1.24.0.x86_64.rpm 2.0 KiB 2024-06-21 03:40 mongodb-atlas-cli-1.11.0.x86_64.rpm 19.1 MiB 2024-02-03 02:36 mongodb-atlas-cli-1.12.0.x86_64.rpm 19.2 MiB 2024-02-03 02:36 mongodb-atlas-cli-1.12.1.x86_64.rpm 19.2 MiB 2024-02-03 02:36 mongodb-atlas-cli-1.12.2.x86_64.rpm 19.2 MiB 2024-02-03 02:36 mongodb-atlas-cli-1.13.0.x86_64.rpm 19.2 MiB 2024-02-03 02:36 mongodb-atlas-cli-1.14.0.x86_64.rpm 19.2 MiB 2024-02-03 02:36 mongodb-atlas-cli-1.14.1.x86_64.rpm 19.6 MiB 2024-02-03 02:36 mongodb-atlas-cli-1.14.2.x86_64.rpm 19.6 MiB 2024-02-03 02:36 mongodb-atlas-cli-1.14.3.x86_64.rpm 19.1 MiB 2024-02-09 05:07 mongodb-atlas-cli-1.15.0.x86_64.rpm 19.2 MiB 2024-02-23 08:22 mongodb-atlas-cli-1.15.1.x86_64.rpm 19.2 MiB 2024-03-01 09:58 mongodb-atlas-cli-1.16.0.x86_64.rpm 19.0 MiB 2024-03-08 11:36 mongodb-atlas-cli-1.17.0.x86_64.rpm 19.2 MiB 2024-03-15 13:04 mongodb-atlas-cli-1.18.0.x86_64.rpm 19.0 MiB 2024-03-28 16:48 mongodb-atlas-cli-1.19.0.x86_64.rpm 19.0 MiB 2024-04-03 18:14 mongodb-atlas-cli-1.20.0.x86_64.rpm 19.0 MiB 2024-04-12 21:00 mongodb-atlas-cli-1.21.0.x86_64.rpm 19.2 MiB 2024-04-27 00:44 mongodb-atlas-cli-1.22.0.x86_64.rpm 19.2 MiB 2024-05-02 01:54 mongodb-atlas-cli-1.23.0.x86_64.rpm 19.2 MiB 2024-05-24 21:02 mongodb-atlas-cli-1.24.0.x86_64.rpm 19.2 MiB 2024-06-21 03:40 mongodb-cli-1.31.1.x86_64.rpm 10.9 MiB 2024-02-03 02:36 mongodb-cli-1.31.3.x86_64.rpm 10.8 MiB 2024-02-09 05:07 mongodb-cli-2.0.0.x86_64.rpm 5.6 MiB 2024-03-15 13:04 mongodb-database-tools-100.8.0.x86_64.rpm 51.2 MiB 2024-02-03 02:36 mongodb-database-tools-100.9.0.x86_64.rpm 52.4 MiB 2024-02-03 02:36 mongodb-database-tools-100.9.1.x86_64.rpm 52.4 MiB 2024-02-03 02:36 mongodb-database-tools-100.9.2.x86_64.rpm 52.4 MiB 2024-02-03 02:36 mongodb-database-tools-100.9.3.x86_64.rpm 52.4 MiB 2024-02-03 02:36 mongodb-database-tools-100.9.4.x86_64.rpm 52.4 MiB 2024-02-03 02:36 mongodb-database-tools-100.9.5-1.x86_64.rpm 53.6 MiB 2024-06-18 02:53 mongodb-mongosh-1.10.0.x86_64.rpm 43.5 MiB 2024-02-03 02:37 mongodb-mongosh-1.10.1.x86_64.rpm 43.5 MiB 2024-02-03 02:37 mongodb-mongosh-1.10.2.x86_64.rpm 43.5 MiB 2024-02-03 02:37 mongodb-mongosh-1.10.3.x86_64.rpm 43.5 MiB 2024-02-03 02:37 mongodb-mongosh-1.10.4.x86_64.rpm 43.5 MiB 2024-02-03 02:37 mongodb-mongosh-1.10.5.x86_64.rpm 43.5 MiB 2024-02-03 02:37 mongodb-mongosh-1.10.6.x86_64.rpm 46.4 MiB 2024-02-03 02:37 mongodb-mongosh-1.9.0.x86_64.rpm 43.4 MiB 2024-02-03 02:37 mongodb-mongosh-1.9.1.x86_64.rpm 43.4 MiB 2024-02-03 02:37 mongodb-mongosh-2.0.0.x86_64.rpm 49.2 MiB 2024-02-03 02:37 mongodb-mongosh-2.0.1.x86_64.rpm 49.2 MiB 2024-02-03 02:37 mongodb-mongosh-2.0.2.x86_64.rpm 49.9 MiB 2024-02-03 02:37 mongodb-mongosh-2.1.0.x86_64.rpm 49.9 MiB 2024-02-03 02:37 mongodb-mongosh-2.1.1.x86_64.rpm 49.9 MiB 2024-02-03 02:37 mongodb-mongosh-2.1.3.x86_64.rpm 50.6 MiB 2024-02-03 02:37 mongodb-mongosh-2.1.4.x86_64.rpm 50.6 MiB 2024-02-09 05:07 mongodb-mongosh-2.1.5.x86_64.rpm 50.6 MiB 2024-02-20 07:35 mongodb-mongosh-2.2.0.x86_64.rpm 53.8 MiB 2024-03-15 13:04 mongodb-mongosh-2.2.1.x86_64.rpm 53.8 MiB 2024-03-20 14:32 mongodb-mongosh-2.2.10.x86_64.rpm 55.8 MiB 2024-06-25 04:37 mongodb-mongosh-2.2.2.x86_64.rpm 54.3 MiB 2024-03-27 16:20 mongodb-mongosh-2.2.3.x86_64.rpm 54.6 MiB 2024-04-04 18:31 mongodb-mongosh-2.2.4.x86_64.rpm 54.6 MiB 2024-04-16 22:01 mongodb-mongosh-2.2.5.x86_64.rpm 55.1 MiB 2024-04-25 00:05 mongodb-mongosh-2.2.6.x86_64.rpm 55.8 MiB 2024-05-17 19:15 mongodb-mongosh-2.2.9.x86_64.rpm 55.8 MiB 2024-06-15 02:00 mongodb-mongosh-shared-openssl11-1.10.0.x86_64.rpm 42.0 MiB 2024-02-03 02:37 mongodb-mongosh-shared-openssl11-1.10.1.x86_64.rpm 42.0 MiB 2024-02-03 02:37 mongodb-mongosh-shared-openssl11-1.10.2.x86_64.rpm 42.0 MiB 2024-02-03 02:37 mongodb-mongosh-shared-openssl11-1.10.3.x86_64.rpm 42.0 MiB 2024-02-03 02:37 mongodb-mongosh-shared-openssl11-1.10.4.x86_64.rpm 42.0 MiB 2024-02-03 02:37 mongodb-mongosh-shared-openssl11-1.10.5.x86_64.rpm 42.0 MiB 2024-02-03 02:37 mongodb-mongosh-shared-openssl11-1.10.6.x86_64.rpm 44.9 MiB 2024-02-03 02:37 mongodb-mongosh-shared-openssl11-1.9.0.x86_64.rpm 41.9 MiB 2024-02-03 02:37 mongodb-mongosh-shared-openssl11-1.9.1.x86_64.rpm 41.9 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl11-2.0.0.x86_64.rpm 46.9 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl11-2.0.1.x86_64.rpm 46.9 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl11-2.0.2.x86_64.rpm 47.6 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl11-2.1.0.x86_64.rpm 47.7 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl11-2.1.1.x86_64.rpm 47.7 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl11-2.1.3.x86_64.rpm 48.3 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl11-2.1.4.x86_64.rpm 48.3 MiB 2024-02-09 05:07 mongodb-mongosh-shared-openssl11-2.1.5.x86_64.rpm 48.4 MiB 2024-02-20 07:35 mongodb-mongosh-shared-openssl11-2.2.0.x86_64.rpm 51.5 MiB 2024-03-15 13:04 mongodb-mongosh-shared-openssl11-2.2.1.x86_64.rpm 51.5 MiB 2024-03-20 14:32 mongodb-mongosh-shared-openssl11-2.2.10.x86_64.rpm 53.5 MiB 2024-06-25 04:37 mongodb-mongosh-shared-openssl11-2.2.2.x86_64.rpm 52.0 MiB 2024-03-27 16:20 mongodb-mongosh-shared-openssl11-2.2.3.x86_64.rpm 52.3 MiB 2024-04-04 18:31 mongodb-mongosh-shared-openssl11-2.2.4.x86_64.rpm 52.4 MiB 2024-04-16 22:01 mongodb-mongosh-shared-openssl11-2.2.5.x86_64.rpm 52.9 MiB 2024-04-26 00:31 mongodb-mongosh-shared-openssl11-2.2.6.x86_64.rpm 53.5 MiB 2024-05-17 19:15 mongodb-mongosh-shared-openssl11-2.2.9.x86_64.rpm 53.5 MiB 2024-06-15 02:00 mongodb-mongosh-shared-openssl3-1.10.0.x86_64.rpm 42.0 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-1.10.1.x86_64.rpm 42.0 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-1.10.2.x86_64.rpm 42.0 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-1.10.3.x86_64.rpm 42.0 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-1.10.4.x86_64.rpm 42.0 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-1.10.5.x86_64.rpm 42.0 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-1.10.6.x86_64.rpm 44.9 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-1.9.0.x86_64.rpm 41.9 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-1.9.1.x86_64.rpm 41.9 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-2.0.0.x86_64.rpm 46.9 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-2.0.1.x86_64.rpm 46.9 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-2.0.2.x86_64.rpm 47.7 MiB 2024-02-03 02:38 mongodb-mongosh-shared-openssl3-2.1.0.x86_64.rpm 47.7 MiB 2024-02-03 02:39 mongodb-mongosh-shared-openssl3-2.1.1.x86_64.rpm 47.7 MiB 2024-02-03 02:39 mongodb-mongosh-shared-openssl3-2.1.3.x86_64.rpm 48.4 MiB 2024-02-03 02:39 mongodb-mongosh-shared-openssl3-2.1.4.x86_64.rpm 48.4 MiB 2024-02-09 05:07 mongodb-mongosh-shared-openssl3-2.1.5.x86_64.rpm 48.4 MiB 2024-02-20 07:35 mongodb-mongosh-shared-openssl3-2.2.0.x86_64.rpm 51.5 MiB 2024-03-15 13:04 mongodb-mongosh-shared-openssl3-2.2.1.x86_64.rpm 51.5 MiB 2024-03-20 14:32 mongodb-mongosh-shared-openssl3-2.2.10.x86_64.rpm 53.6 MiB 2024-06-25 04:37 mongodb-mongosh-shared-openssl3-2.2.2.x86_64.rpm 52.0 MiB 2024-03-27 16:20 mongodb-mongosh-shared-openssl3-2.2.3.x86_64.rpm 52.3 MiB 2024-04-04 18:31 mongodb-mongosh-shared-openssl3-2.2.4.x86_64.rpm 52.4 MiB 2024-04-16 22:01 mongodb-mongosh-shared-openssl3-2.2.5.x86_64.rpm 52.9 MiB 2024-04-26 00:31 mongodb-mongosh-shared-openssl3-2.2.6.x86_64.rpm 53.5 MiB 2024-05-17 19:15 mongodb-mongosh-shared-openssl3-2.2.9.x86_64.rpm 53.6 MiB 2024-06-15 02:00 mongodb-org-7.0.0-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-7.0.1-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-7.0.11-1.el7.x86_64.rpm 6.2 KiB 2024-05-24 21:02 mongodb-org-7.0.12-1.el7.x86_64.rpm 6.2 KiB 2024-06-29 05:41 mongodb-org-7.0.2-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-7.0.3-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-7.0.4-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-7.0.5-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-7.0.6-1.el7.x86_64.rpm 6.2 KiB 2024-02-29 09:38 mongodb-org-7.0.7-1.el7.x86_64.rpm 6.2 KiB 2024-03-19 14:15 mongodb-org-7.0.8-1.el7.x86_64.rpm 6.2 KiB 2024-04-04 18:31 mongodb-org-7.0.9-1.el7.x86_64.rpm 6.2 KiB 2024-04-28 00:59 mongodb-org-database-7.0.0-1.el7.x86_64.rpm 6.3 KiB 2024-02-03 02:39 mongodb-org-database-7.0.1-1.el7.x86_64.rpm 6.3 KiB 2024-02-03 02:39 mongodb-org-database-7.0.11-1.el7.x86_64.rpm 6.3 KiB 2024-05-24 21:02 mongodb-org-database-7.0.12-1.el7.x86_64.rpm 6.3 KiB 2024-06-29 05:41 mongodb-org-database-7.0.2-1.el7.x86_64.rpm 6.3 KiB 2024-02-03 02:39 mongodb-org-database-7.0.3-1.el7.x86_64.rpm 6.3 KiB 2024-02-03 02:39 mongodb-org-database-7.0.4-1.el7.x86_64.rpm 6.3 KiB 2024-02-03 02:39 mongodb-org-database-7.0.5-1.el7.x86_64.rpm 6.3 KiB 2024-02-03 02:39 mongodb-org-database-7.0.6-1.el7.x86_64.rpm 6.3 KiB 2024-02-29 09:38 mongodb-org-database-7.0.7-1.el7.x86_64.rpm 6.3 KiB 2024-03-19 14:15 mongodb-org-database-7.0.8-1.el7.x86_64.rpm 6.3 KiB 2024-04-04 18:31 mongodb-org-database-7.0.9-1.el7.x86_64.rpm 6.3 KiB 2024-04-28 00:59 mongodb-org-database-tools-extra-7.0.0-1.el7.x86_64.rpm 11.5 KiB 2024-02-03 02:39 mongodb-org-database-tools-extra-7.0.1-1.el7.x86_64.rpm 11.5 KiB 2024-02-03 02:39 mongodb-org-database-tools-extra-7.0.11-1.el7.x86_64.rpm 11.5 KiB 2024-05-24 21:02 mongodb-org-database-tools-extra-7.0.12-1.el7.x86_64.rpm 11.5 KiB 2024-06-29 05:41 mongodb-org-database-tools-extra-7.0.2-1.el7.x86_64.rpm 11.5 KiB 2024-02-03 02:39 mongodb-org-database-tools-extra-7.0.3-1.el7.x86_64.rpm 11.5 KiB 2024-02-03 02:39 mongodb-org-database-tools-extra-7.0.4-1.el7.x86_64.rpm 11.5 KiB 2024-02-03 02:39 mongodb-org-database-tools-extra-7.0.5-1.el7.x86_64.rpm 11.5 KiB 2024-02-03 02:39 mongodb-org-database-tools-extra-7.0.6-1.el7.x86_64.rpm 11.5 KiB 2024-02-29 09:38 mongodb-org-database-tools-extra-7.0.7-1.el7.x86_64.rpm 11.5 KiB 2024-03-19 14:15 mongodb-org-database-tools-extra-7.0.8-1.el7.x86_64.rpm 11.5 KiB 2024-04-04 18:31 mongodb-org-database-tools-extra-7.0.9-1.el7.x86_64.rpm 11.5 KiB 2024-04-28 00:59 mongodb-org-mongos-7.0.0-1.el7.x86_64.rpm 24.8 MiB 2024-02-03 02:39 mongodb-org-mongos-7.0.1-1.el7.x86_64.rpm 24.9 MiB 2024-02-03 02:39 mongodb-org-mongos-7.0.11-1.el7.x86_64.rpm 25.1 MiB 2024-05-24 21:02 mongodb-org-mongos-7.0.12-1.el7.x86_64.rpm 24.8 MiB 2024-06-29 05:41 mongodb-org-mongos-7.0.2-1.el7.x86_64.rpm 24.9 MiB 2024-02-03 02:39 mongodb-org-mongos-7.0.3-1.el7.x86_64.rpm 24.9 MiB 2024-02-03 02:39 mongodb-org-mongos-7.0.4-1.el7.x86_64.rpm 24.9 MiB 2024-02-03 02:39 mongodb-org-mongos-7.0.5-1.el7.x86_64.rpm 24.9 MiB 2024-02-03 02:39 mongodb-org-mongos-7.0.6-1.el7.x86_64.rpm 25.0 MiB 2024-02-29 09:38 mongodb-org-mongos-7.0.7-1.el7.x86_64.rpm 25.1 MiB 2024-03-19 14:15 mongodb-org-mongos-7.0.8-1.el7.x86_64.rpm 25.1 MiB 2024-04-04 18:31 mongodb-org-mongos-7.0.9-1.el7.x86_64.rpm 25.1 MiB 2024-04-28 00:59 mongodb-org-server-7.0.0-1.el7.x86_64.rpm 36.2 MiB 2024-02-03 02:39 mongodb-org-server-7.0.1-1.el7.x86_64.rpm 36.2 MiB 2024-02-03 02:39 mongodb-org-server-7.0.11-1.el7.x86_64.rpm 36.5 MiB 2024-05-24 21:02 mongodb-org-server-7.0.12-1.el7.x86_64.rpm 36.2 MiB 2024-06-29 05:41 mongodb-org-server-7.0.2-1.el7.x86_64.rpm 36.2 MiB 2024-02-03 02:39 mongodb-org-server-7.0.3-1.el7.x86_64.rpm 36.2 MiB 2024-02-03 02:39 mongodb-org-server-7.0.4-1.el7.x86_64.rpm 36.2 MiB 2024-02-03 02:39 mongodb-org-server-7.0.5-1.el7.x86_64.rpm 36.2 MiB 2024-02-03 02:39 mongodb-org-server-7.0.6-1.el7.x86_64.rpm 36.4 MiB 2024-02-29 09:38 mongodb-org-server-7.0.7-1.el7.x86_64.rpm 36.4 MiB 2024-03-19 14:15 mongodb-org-server-7.0.8-1.el7.x86_64.rpm 36.4 MiB 2024-04-04 18:31 mongodb-org-server-7.0.9-1.el7.x86_64.rpm 36.4 MiB 2024-04-28 00:59 mongodb-org-tools-7.0.0-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-tools-7.0.1-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-tools-7.0.11-1.el7.x86_64.rpm 6.2 KiB 2024-05-24 21:02 mongodb-org-tools-7.0.12-1.el7.x86_64.rpm 6.2 KiB 2024-06-29 05:41 mongodb-org-tools-7.0.2-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-tools-7.0.3-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-tools-7.0.4-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-tools-7.0.5-1.el7.x86_64.rpm 6.2 KiB 2024-02-03 02:39 mongodb-org-tools-7.0.6-1.el7.x86_64.rpm 6.2 KiB 2024-02-29 09:38 mongodb-org-tools-7.0.7-1.el7.x86_64.rpm 6.2 KiB 2024-03-19 14:15 mongodb-org-tools-7.0.8-1.el7.x86_64.rpm 6.2 KiB 2024-04-04 18:31 mongodb-org-tools-7.0.9-1.el7.x86_64.rpm 6.2 KiB 2024-04-28 00:59涉及版本很多,我应该如何选择下载,确保完整性
最新发布
06-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值