在模型中创建Web服务时出错

时间:2012-04-03 10:44:43

标签: tridion

我正在尝试创建一个数据模型来使用我的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" />

2 个答案:

答案 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和事件日志以获取错误消息。