2017-11-28 42 views
0

HTMLページでASP.NET Webサービスメソッドを呼び出すことで、私の問題を解決するためのサポートを依頼したいと思います。コードは極端に単純ですが、一般的には機能しません。一般的に、私は1つのブラウザ - IE 11を見つけたので、魔法使いはうまく動作します。他のすべてのブラウザでは、Webサービスの応答は空です(XMLHttpRequestオブジェクトのstatusプロパティは200ではなく0を返します)。興味深いのは、メソッドアドレス(http://www.rpdp.hostingasp.pl/RPDPWebService.asmx/HelloWorld)をブラウザのURLバーに直接入力すると、結果が正しいことです。<文字列xmlns = "http://tempuri.org/" > Hello World </string >結論 - webserviceは正常に動作しますが、JSコードではメソッドを正しく呼び出すことができません。 この問題に関する複数の議論を読んだことがあります。問題はセキュリティ問題やクロスリソース共有に関係しているとします。これはすべて、私は多くのヒントを試みたが、成功しなかった。私はこの問題を非常に熟知しており、誰かが私が下のコードで何を変更してそれをすべてのブラウザで動作させることができるのかを知ることができれば非常に感謝しています。HTMLページで単純なasmx webserviceメソッドを呼び出す

種類について、

Piotrek

P.S.私はそれを(サーバー)の設定を変更することはできませんので、外部のASP.NET Webサーバーを私のWebサービスを公開します。

ASP.NETのWebサービス:私は(第一、第二、中 - 中)次のタグを追加したweb.config.xmlファイルで

namespace RPDP 
{ 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    [System.Web.Script.Services.ScriptService] 
    public class RPDPWebService : System.Web.Services.WebService 
    { 
     [WebMethod] 
     public string HelloWorld() 
     { 
      return "Hello World"; 
     } 
    } 
} 

:その上で、

<webServices> 
    <protocols> 
     <add name="HttpSoap"/> 
     <add name="HttpGet"/> 
     <add name="HttpPost"/> 
    </protocols> 
</webServices> 

<httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Headers" value="accept, content-type" /> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" /> 
    </customHeaders> 
</httpProtocol> 

HTMLページに私が私のWebサービスメソッドを呼び出します。

<html> 
<head> 
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script> 
    <script> 
    function go() 
    { 
     var req = new XMLHttpRequest(); 
     req.open("GET", "http://www.rpdp.hostingasp.pl/RPDPWebService.asmx/HelloWorld", true); 

     req.onreadystatechange = function(){ 
      if (req.readyState == 4) { 
       if (req.status >= 200 && req.status < 300 ||req.status == 304) {  
        var returnData = req.responseText; 
        alert('Success! Returned data: ' + returnData); 
       } else { 
        alert("Error; request.status = " + req.status); 
       } 
       req = null; 
      }; 
     } 

     req.send(); 
    } 
</script> 
</head> 
<body onload="go();"></body> 
</html> 

答えて

0

は、以下のブログ投稿を見てください:https://zqzhang.github.io/blog/2016/04/18/why-use-onload-in-cross-domain-ajax.html

クロスドメインのAjaxリクエストを実行するときに、インスタントメッセージがonreadystatechangeであることが示唆されています。

問題は、Access-Control-Allow-Originが2回定義されていたことでした。

+0

Örvarさんのお返事ありがとうございます。生憎結果は同じである - IE 11でOK :(他のブラウザでは、空の \t機能、外出先() \t {\t \t \tするvar reqは=新しいXMLHttpRequestを();。 \t \t req.open( "GET" 、 "http://www.rpdp.hostingasp.pl/RPDPWebService.asmx/HelloWorld"、TRUE); \t \t \t \t req.onload =関数(){ \t \t \t \t \t VAR returnData = req.responseText ; \t \t \t \t \t alert( '成功!返されたデータ: '+ returnData); \t \t \t \t req = null; \t \t \t \t \t \t req。send(null); \t} – PiotrGachPL

+0

Chrome開発者向けツールコンソールではどのようなエラーが表示されますか? –

+0

'Access-Control-Allow-Origin'を複数回設定することはできますか?あなたのwebconfigから ''を削除しようとする可能性があります。 –

関連する問題