2009-04-03 17 views
3

Grüße!WCF Newbie Frage: Aufruf Methoden von JavaScript

Ich bin neu in WCF und ich dachte, es wäre ASP.NET-Webdienste ähnlich, aber ich kann keine Methode von clientseitig JavaScript aufrufen. Meine Web-Formular sieht wie folgt aus:

<form id="form1" runat="server"> 
    <div> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
     <Scripts> 
      <asp:ScriptReference Path="~/test.js" /> 
     </Scripts> 
     <Services> 
      <asp:ServiceReference Path="~/MyService.svc" /> 
     </Services> 
     </asp:ScriptManager> 
    </div> 
    <button onclick="test()">Click Me</button> 
</form> 

Mein Service der Schnittstelle sieht wie folgt aus:

namespace Test 
{ 
    [ServiceContract(Namespace = "Test")] 
    public interface IMyService 
    { 
     [OperationContract] 
     void DoWork(); 

     [OperationContract] 
     string SayHi(); 
    } 
} 

Und hier ist seine Umsetzung:

namespace Test 
{ 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class MyService : IMyService 
    { 
     public void DoWork() 
     { 
     } 

     public string SayHi() 
     { 
      return "Hello, World!"; 
     } 
    } 
} 

Und schließlich das JavaScript:

function test() { 
    Test.MyService.SayHi(SayHiSuccess, SayHiError); 
} 

function SayHiSuccess(result) { 
    alert(result[0]); 
} 

function SayHiError(error) { 
    alert(error.toString()); 
} 

Es erscheint Ars, dass die SayHi() -Methode des Dienstes nie ausgeführt wird, obwohl ich mir nicht sicher bin, warum oder wie eine Fehlerbehebung durchgeführt werden soll. Irgendwelche Vorschläge?

Antwort

3

Sie haben Ihre web.config-Inhalte nicht veröffentlicht. Welche Bindung verwendest du? Sie sollten wahrscheinlich webHttpBinding verwenden.

Es kann auch hilfreich sein, den Inhalt Ihrer .svc-Datei zu kennen. Obwohl ich es nie ausprobiert habe, verstehe ich, dass Sie web.config überhaupt nicht ändern müssen, wenn Sie WebScriptServiceHostFactory als Ihre Service-Host-Factory verwenden. Das ist so einfach wie Ihre SVC-Datei wie folgt zu ändern:

<%@ ServiceHost Service="MyService" 
    Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" 
%> 

Wenn alle Stricke reißen, sind hier einige Ressourcen für Sie:

0

Ihr Code sieht OK aus. Sollte richtig funktionieren. Sie könnten versuchen, die Attribute WebService und WebMethod ebenfalls hinzuzufügen.

Zum Debuggen eines WCF-Webdiensts verwende ich normalerweise Fiddler, um HTTP-Aufrufe zu verfolgen, während der WCF-Code mit einem angehängten Debugger ausgeführt wird (in Visual Studio in den meisten Fällen ausgeführt).