C# 访问DotNetNuke中asmx webservice文件中的ModuleID和PortalID

C# 访问DotNetNuke中asmx webservice文件中的ModuleID和PortalID,c#,asp.net,ajax,asmx,dotnetnuke,C#,Asp.net,Ajax,Asmx,Dotnetnuke,我的DotNetNuke模块中有一个asmx webservice文件。如何访问此asmx文件中的PortalID和ModuleID。当我尝试在代码behinde.ascx.cs文件中运行良好的代码时,它返回portalID=0,ModuleID=1 private Components.Setting _ModuleSettings; _ModuleSettings = new Components.Setting(PortalId, ModuleId); 模块设置要求您处于模块的上下文

我的DotNetNuke模块中有一个asmx webservice文件。如何访问此asmx文件中的PortalID和ModuleID。当我尝试在代码behinde.ascx.cs文件中运行良好的代码时,它返回portalID=0,ModuleID=1

 private Components.Setting _ModuleSettings;
 _ModuleSettings = new Components.Setting(PortalId, ModuleId);

模块设置要求您处于模块的上下文中。.asmx服务不会有那种级别的上下文。

编辑 下面的内容仍然正确,但是DNN 6.2的发行版包含了专门用于在DNN中构建web服务的服务框架。服务框架是一个比使用基于.asmx的服务更好的解决方案

/EDIT

由于您执行的是web服务调用,而不是DNN模块,因此不会为您提供上下文。但是,您可以自己重新创建它。获取当前门户设置的步骤

var domainName = Globals.GetDomainName(request);
var alias = PortalAliasController.GetPortalAliasInfo(domainName);

return new PortalSettings(-1, alias);
由于您的选项卡不在页面的上下文中,ActiveTab将返回默认值(除非您可以用活动选项卡ID替换-1)

要获取模块上下文,您需要将moduleId和tabId传递给您的服务,然后调用:

var module = new ModuleController().GetModule(moduleId, tabId)

这个答案比选择的答案有用得多。谢谢@goughy000查看DNN服务框架,它是一个比手工推出的基于.asmx的服务更好的解决方案。不幸的是,我们正在开发一个旧的门户网站,客户不会升级:(