2011-12-06 14 views
0

だから私はこれで私の髪を引き出しています。環境:ASP.net WebフォームC#2008. 私はすでにthisソリューションを提供しています。 次のようなasmx webserviceを作成しました(コードを参照)、私はブラウザ経由でアクセスしようとしています。基本的に私がhttp://localhost/service.asmxを指しているとき、それはうまく動作し、利用可能な操作やものを見ることができます。私はまた、URL http://localhost/service.asmx?op=MethodNameで詳細に操作を見ることができますが、実際にサービスを試したり呼び出したりするときに問題が発生します。私はhttp://localhost/service.asmx/MethodNameが見つかりません。 何が間違っている可能性がありますか?asmxサービスの操作結果が文書に見つかりません

[WebService(Namespace = "http://locahost/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService] 
public class WellnessService : System.Web.Services.WebService 
{ 

    [WebMethod] 
    public string MethodName() 
    { 
     return ViewManager.RenderView("~/Modules/CouponsPromotions/CouponCenter.ascx"); 
    } 
} 
public class ViewManager 
{ 
    public static string RenderView(string path) 
    { 
     return RenderView(path, null); 
    } 

    public static string RenderView(string path, object data) 
    { 
     Page pageHolder = new Page(); 
     UserControl viewControl = (UserControl)pageHolder.LoadControl(path); 

     if (data != null) 
     { 
      Type viewControlType = viewControl.GetType(); 
      FieldInfo field = viewControlType.GetField("Data"); 

      if (field != null) 
      { 
       field.SetValue(viewControl, data); 
      } 
      else 
      { 
       throw new Exception("View file: " + path + " does not have a public Data property"); 
      } 
     } 

     pageHolder.Controls.Add(viewControl); 

     StringWriter output = new StringWriter(); 
     HttpContext.Current.Server.Execute(pageHolder, output, false); 

     return output.ToString(); 
    } 
} 

これは私がJS

$(document).ready(function() { 
$('#liCoupons').click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "/services.asmx/MethodName", 
      data: "", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       $('#result').html(msg.d); 
      }, 
      error: ajaxFailed 
      //error 

     }); 
    }); 

    function ajaxFailed(xmlRequest) { 
     alert(xmlRequest.status + ' \n\r ' + 
       xmlRequest.statusText + '\n\r' + 
       xmlRequest.responseText); 
    } 
}); 
+0

URL書き換えをどこに使用していますか?それは私の世界を何百万回も吹き飛ばした。 :) – coderpros

+0

あなたはどのようにWebサービスを消費していますか? JS経由でコードを投稿してください –

+0

@coderpros私はこのURL http://localhost/service.asmx/MethodNameをWebブラウザで指しても、基本的に@PankajKumarのURLを書き換えません。 – xoail

答えて

2

経由で呼び出していますどのように私はちょうどコピーし、あなたの部分のコードを貼り付けたが、私自身の(唯一の静的なHTMLの「Hello World」を持っている)Webユーザーコントロールを追加し、テストしましたwebserviceとそれは正常に動作します。

いくつかのことを確認してください。

1)デバッグおよびWebサービスは、例外

2なくても正常にすべてのサーバーのコードを実行されているかどうかを確認するために、コードをステップ実行)http://localhost/service.asmx?op=Coupons部分に起動ボタンがあります。正しく動作するかどうかテストしてください。はい、私は問題が別の場所にあると思っています

3)さらに良いアイデアを得るために、エラーとスタックトレースを確認してください。問題の完全なエラーでここにスタックトレースを投稿してください。

これが役に立ちます。

+0

1.残念ながら、それはブレークポイントをヒットしません。私はそのサービスメソッドの呼び出しの前に壊れていると思います。 2.呼び出しボタンは、文書が見つからない場合に表示されます。 3.文書が見つかりません。スタックトレースはありません。 – xoail

+0

スタック追跡を取得するために管理される呼び出し: 例外の詳細:System.Web.HttpException:パス '/services.asmx/Coupons'にアクセスするために使用されたHTTP動詞POSTは許可されていません。 [HttpException(0x80004005):パス '/services.asmx/Coupons'へのアクセスに使用されたHTTP動詞POSTは許可されていません] System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContextコンテキスト、AsyncCallbackコールバック、オブジェクト状態)+2875994 システム.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+8681506 System.Web.HttpApplication.ExecuteStep(IExecutionStepステップ、Boolean&completedSynchronously)+155 – xoail

+1

@xoail:このリンクを見てくださいhttp:// dev .ektron.com/forum.aspx?g = posts&t = 16404これがあなたの問題であるかどうかを確認してください。呼び出しがメソッドを適切に呼び出さない場合、おそらく設定エラーであると思います。また、スタックトレースを編集の質問に投稿してください。 :) –

0

F11を使用してコードをデバッグし、Webサービスを呼び出すときに何が起きているかを確認し、 "ViewManager.RenderView("〜/ Modules/CouponsPromotions/CouponCenter.ascx ");"を返した内容を確認してください。 はすべてがうまくいくことを望んでいます。

+0

それは、そのブレークポイントをヒットしません。 – xoail

関連する問題