Ошибка создания веб-службы в модели - PullRequest
4 голосов
/ 03 апреля 2012

Я пытаюсь создать модель данных для работы с моим расширением 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>

Когда я пытаюсь запустить этот сервис непосредственно в браузере, я получаю следующую ошибку:

ParserСообщение об ошибке: нет поведения службы с именем 'Tridion.Web.UI.ContentManager.WebServices.DeveloperBehavior'.

, и когда я пытаюсь вызвать его через 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 Tridion2011 (без 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 ]

4 голосов
/ 03 апреля 2012

Tridion.Web.UI.ContentManager.WebServices.DeveloperBehavior определяется в файле web.config каталога WebRoot. Поэтому, скорее всего, вы пытаетесь запустить это в другом приложении (пуле).

Я предлагаю убедиться, что ваша модель и редактор - это просто виртуальные каталоги IIS, а не приложения.

2 голосов
/ 03 апреля 2012

Если вы правильно включите свой пользовательский веб-сервис в файл конфигурации вашей модели, то сгенерирует прокси JavaScript для вызова вашего сервиса.Сгенерированный код JavaScript можно найти в файле Default.aspx? Mode = js, который вы найдете в инструментах отладки вашего браузера.

Если прокси-сервер JavaScript отсутствует, убедитесь, что выувеличил номер обновления в вашем System.config.Если вы сделали это, и прокси-сервер все еще не отображается, проверьте сгенерированный JavaScript и журналы событий на наличие сообщений об ошибках.

...