2009-04-03 18 views
3

おはようございます!WCF初心者質問:JavaScriptからメソッドを呼び出す

私はWCFが新しく、ASP.NET Webサービスと似ていると思っていましたが、クライアント側のJavaScriptからメソッドを呼び出すことができません。私のWebフォームは、次のようになります。

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

私のサービスのインターフェースは次のようになります。

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

     [OperationContract] 
     string SayHi(); 
    } 
} 

そして、ここではその実装です:

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

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

そして最後にはJavaScript:

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

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

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

サービスのSayHi()メソッドは決して実行されませんが、トラブルシューティングの理由や方法はわかりません。助言がありますか?

答えて

3

web.configの内容を投稿していません。どのバインディングを使用していますか?おそらくwebHttpBindingを使用しているはずです。

また、.svcファイルの内容を知るのに役立つ場合があります。私はそれを試したことはありませんが、WebScriptServiceHostFactoryをサービスホストファクトリとして使用する場合、web.configを変更する必要はありません。それは次のようにあなたの.SVCファイルを変更するのと同じくらい簡単です:

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

他のすべてが失敗した場合は、ここであなたのためにいくつかのリソースされています

0

コードはOKです。右手で作業する必要があります。 WebService属性とWebMethod属性を追加することもできます。

WCF Webサービスをデバッグするために、私は通常、Fiddlerを使用して、デバッガを接続して(ほとんどの場合Visual Studioで実行する)WCFコードを実行しているときにHTTP呼び出しを追跡します。