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:
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
			<%@ WebService Language="VB" CodeBehind="~/App_Code/WebService.vb" Class="WebService" %>

WebService.vb

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>