Accéder à un WebService ASMX depuis un autre serveur (vb.net/jquery)?
Bonjour,
J'essai de mettre en place un webservice ASMX en VB.Net, hors je rencontre des difficultés pour communiquer avec depuis un serveur externe.
En Localhost, je n'ai pas de problème d'accessibilité, mais depuis un autre serveur, j'ai une erreur CORS:
Citation:
Access to XMLHttpRequest at 'http://www.myDNS1.com/WebService.asmx/CallTestGet' from origin 'http://www.myDNS2.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
J'ai ajouté les DLL suivante depuis NuGet :
- System.Web.Cors.dll
- System.Web.Http.dll
- System.Web.Http.Cors.dll
- System.Web.Http.WebHost.dll
web.config
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer> |
global.asax
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <%@ Import Namespace="System.Web.Routing" %>
<%@ Import Namespace="System.Web.Cors" %>
<script runat="server">
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim context = HttpContext.Current
Dim response = context.Response
response.AddHeader("Access-Control-Allow-Origin", "*")
If context.Request.HttpMethod = "OPTIONS" Then
response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept")
'response.Flush()
response.AddHeader("Access-Control-Max-Age", "1728000")
response.End()
End If
End Sub
'[...]
</script> |
WebService.asmx
Code:
<%@ WebService Language="VB" CodeBehind="~/App_Code/WebService.vb" Class="WebService" %>
WebService.vb
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Imports System.Web.Script.Services
Imports System.Web.Services
<System.Web.Script.Services.ScriptService()>
<WebService(Namespace:="http://www.myDNS1.com/")>
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)>
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Public Class WebService
Inherits System.Web.Services.WebService
<WebMethod()>
Public Function CallTestPost(name As String, age As Integer) As String
Return String.Format("Name: {0}{2}Age: {1}{2}TimeStamp: {3}", name, age, Environment.NewLine, DateTime.Now.ToString())
End Function
<WebMethod()>
<ScriptMethod(UseHttpGet:=True)>
Public Function CallTestGet() As String
Return Trim("Webservice Success call =)")
End Function
End Class |
ConsumeWebservice.aspx
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| <h3>Calling WebServices : CallTest</h3>
<div style="width: 300px; border: 2px dotted red;padding:10px;">
<div><b>POST</b></div>
<div>Name :</div>
<div>
<asp:TextBox ID="txtName" runat="server" Text="" /></div>
<div>Age :</div>
<div>
<asp:TextBox ID="txtAge" runat="server" Text="" /></div>
<div>
<asp:Button ID="btnSubmit" Text="Submit" runat="server" /></div>
<div id="rsltPost">-- wait req --</div>
</div>
<div style="width: 300px; border: 2px dotted orange;padding:10px;">
<div><b>GET</b></div>
<div id="rsltGet">-- wait req --</div>
</div>
<script type="text/javascript">
$(function () {
$("[id*=btnSubmit]").click(function () {
var name = $.trim($("[id*=txtName]").val());
var age = $.trim($("[id*=txtAge]").val());
$.ajax({
type: "POST",
url: "http://www.myDNS1.com/WebService.asmx/CallTestPost",
data: "{ name: '" + name + "', age: " + age + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
//alert(r.d);
$('#rsltPost').html('success : ' + r.d);
},
error: function (r) {
//alert(r.responseText);
$('#rsltPost').html('error : ' + r.responseText);
},
failure: function (r) {
//alert(r.responseText);
$('#rsltPost').html('failure : ' + r.responseText);
}
});
return false;
});
});
$(function () {
$.ajax({
type: "GET",
url: "http://www.myDNS1.com/WebService.asmx/CallTestGet",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
//alert(r.d);
$('#rsltGet').html('success : ' + r.d);
},
error: function (r) {
//alert(r.responseText);
$('#rsltGet').html('error : ' + r.responseText);
},
failure: function (r) {
//alert(r.responseText);
$('#rsltGet').html('failure : ' + r.responseText);
}
});
});
</script> |