我正在尝试创建一个数据模型来使用我的GUI扩展,我创建了一个返回字符串的简单服务。我已经配置了model.config并在我的web.config中添加了以下条目
<services>
<service name="CMSExtensions.Model.Services.PublicationInfo" behaviorConfiguration="Tridion.Web.UI.ContentManager.WebServices.DeveloperBehavior">
<endpoint name="PublicationInfo" address="" behaviorConfiguration="Tridion.Web.UI.ContentManager.WebServices.AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="Tridion.Web.UI.ContentManager.WebServices.WebHttpBindingConfig" contract="CMSExtensions.Model.Services.PublicationInfo"/>
</service>
</services>
当我尝试直接在浏览器中运行此服务时,出现以下错误:
分析程序错误消息:没有名为'Tridion.Web.UI.ContentManager.WebServices.DeveloperBehavior'
的服务行为。
当我尝试通过GUI中的JS调用它时,我收到此错误:
Uncaught TypeError: Cannot call method 'GetPublicationData' of undefined
CMSExtensions.Popups.PublicationInfo._onExecuteButtonClickedPublicationInfo_v6.0.0.39607.0_.aspx:433
(anonymous function)PublicationInfo_v6.0.0.39607.0_.aspx:2
EventRegister.f.executeListenerPublicationInfo_v6.0.0.39607.0_.aspx:16
aPublicationInfo_v6.0.0.39607.0_.aspx:16
Tridion.ObjectWithEvents.processHandlersPublicationInfo_v6.0.0.39607.0_.aspx:14
Tridion.ObjectWithEvents.fireEventPublicationInfo_v6.0.0.39607.0_.aspx:14
Tridion.Controls.Button.onclickPublicationInfo_v6.0.0.39607.0_.aspx:428
Tridion.Controls.Button.onmouseupPublicationInfo_v6.0.0.39607.0_.aspx:428
(anonymous function)PublicationInfo_v6.0.0.39607.0_.aspx:2
EventRegister.f.executeListenerPublicationInfo_v6.0.0.39607.0_.aspx:16
a
我正在使用SDL Tridion 2011(无SP1)。
这是服务代码
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using CMSExtensions.Model.Progress;
using Tridion.Web.UI.Models.TCM54;
namespace CMSExtensions.Model.Services
{
[ServiceContract(Namespace = "http://CMSExtensions.Model.Services", Name = "PublicationInfo")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class PublicationInfo : WCFServiceBase
{
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
public string GetUserDescription()
{
return "sachin";
}
}
}
模型配置:
<cfg:groups>
<cfg:group name="CMSExtensions.Model.Services" merger="Tridion.Web.UI.Core.Configuration.Resources.DomainModelProcessor" merge="always">
<cfg:domainmodel name="CMSExtensions.Model.Services">
<cfg:fileset>
<!-- <cfg:file type="script">/Scripts/Constants.js</cfg:file> -->
</cfg:fileset>
<cfg:services>
<cfg:service type="wcf">/Services/PublicationInfo.svc</cfg:service>
</cfg:services>
</cfg:domainmodel>
</cfg:group>
</cfg:groups>
Web.config条目:
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="CMSExtensions.Model.Services.PublicationInfo" behaviorConfiguration="Tridion.Web.UI.ContentManager.WebServices.DeveloperBehavior">
<endpoint name="PublicationInfo" address="" behaviorConfiguration="Tridion.Web.UI.ContentManager.WebServices.AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="Tridion.Web.UI.ContentManager.WebServices.WebHttpBindingConfig" contract="CMSExtensions.Model.Services.PublicationInfo"/>
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
答案 0 :(得分:4)
Tridion.Web.UI.ContentManager.WebServices.DeveloperBehavior在WebRoot目录的web.config文件中定义。所以很可能你试图在不同的应用程序(池)中运行它。
我建议您确保您的模型和编辑器只是虚拟目录IIS而不是应用程序。
答案 1 :(得分:2)
如果您在模型中正确包含自定义Web服务,配置文件将生成用于调用您的服务的JavaScript代理。您可以在Default.aspx?mode = js文件中找到生成的JavaScript代码,您可以在浏览器的调试工具中找到它。
如果JavaScript代理不在其中,请确保您已增加System.config中的更新编号。如果您已完成此操作且代理仍未显示,请检查生成的JavaScript和事件日志以获取错误消息。