2012-04-03 13 views
4

Ich versuche, ein Datenmodell zu erstellen, um mit meiner GUI-Erweiterung zu arbeiten, ich habe einen einfachen Dienst erstellt, der eine Zeichenfolge zurückgibt. Ich habe die model.config konfiguriert und hinzugefügt, um den folgenden Eintrag in meinem web.configFehler beim Erstellen des Webdienstes in einem Modell

<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> 

Wenn ich versuche, diesen Dienst direkt im Browser ich folgende Fehlermeldung erhalten auszuführen:

Parser-Fehlermeldung: ist kein Dienstverhalten namens 'Tridion.Web.UI.ContentManager.WebServices.DeveloperBehavior'.

und wenn ich versuche, es in GUI über die JS aufrufen bekomme ich diesen Fehler:

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 

I SDL Tridion 2011 bin mit (nicht SP1). Hier

sind der Service-Code

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"; 
     } 
    } 
} 

Modell Config:

<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 Einträge:

<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

Können Sie Ihren Web-Service-Code und das JavaScript Ihres Befehls auch teilen? Ohne diese ist es ziemlich schwierig zu sehen, was hier falsch läuft. –

+0

@FrankvanPuffelen - nur das Code-Snippet hinzugefügt. – sachspeak

+0

Können Sie bitte den Einzug dieser Konfiguration beheben? Sie können es in jedem Texteditor machen und es wird für alle hier lesbarer gemacht. –

Antwort

2

Wenn Sie richtig Ihren eigenen Web-Service in Ihrem Modell config enthalten Die Datei generiert einen JavaScript-Proxy für den Aufruf Ihres Dienstes. Sie finden den generierten JavaScript-Code in der Datei Default.aspx? Mode = js, die Sie in den Debugging-Tools Ihres Browsers finden.

Wenn der JavaScript-Proxy nicht vorhanden ist, stellen Sie sicher, dass Sie die Update-Nummer in Ihrer System.config erhöht haben. Wenn Sie dies getan haben und der Proxy immer noch nicht angezeigt wird, überprüfen Sie das generierte JavaScript und die Ereignisprotokolle auf Fehlermeldungen.

4

Tridion.Web.UI.ContentManager.WebServices.DeveloperBehavior wird in der Datei web.config des WebRoot-Verzeichnisses definiert. Wahrscheinlich versuchen Sie dies in einer anderen Anwendung (Pool) auszuführen.

Ich schlage vor sicherzustellen, dass Ihr Modell und Editor sind nur virtuelle Verzeichnisse IIS und nicht Anwendungen.

+0

Es ist als Vdir und nicht als Webanwendung eingerichtet. – sachspeak

+0

Das ist sehr seltsam. Er sollte es dann erben. Haben Sie versucht, das Verhalten einfach in Ihre eigene web.config zu kopieren? –

Verwandte Themen