我有一个用VB.NET编写并在IIS 7上运行的简单SOAP服务。如果我使用Web.config添加Access-Control-Allow-Origin
标头,我可以从运行JavaScript的远程客户端访问该服务:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
</system.webServer>
我实际上更喜欢在Global.asax中这样做。我有一个用C#编写的SOAP服务在同一台服务器上运行,这个方法运行得很好;但是,VB.NET服务没有。如果我删除上面的Web.config代码并添加以下Global.asax代码,则不会发送标头,远程客户端也无法使用该服务。
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*")
If HttpContext.Current.Request.HttpMethod = "OPTIONS" Then
'These headers are handling the "pre-flight" OPTIONS call sent by the browser
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache")
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept")
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000")
HttpContext.Current.Response.End()
End If
End Sub
这与我用C#编写的类似服务中的方法相同,但是这个方法不会发送标头,也不允许远程客户端连接。
我错过了什么?