因此,我对创建Web服务非常陌生,但已成功设法创建一个简单的Web服务,从数据库中List(Of dictionary(of string, string))
对象返回我需要的信息。
为了测试,我手动创建了这个,我的代码如下:
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Web.Script.Serialization
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class test
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function dic() As String
Dim newDic As New List(Of Dictionary(Of String, String))
Dim one As New Dictionary(Of String, String)
one.Add("id", "1")
one.Add("name", "the name")
one.Add("price", "5.99")
newDic.Add(one)
Dim two As New Dictionary(Of String, String)
two.Add("id", "2")
two.Add("name", "item name two")
two.Add("price", "1299")
newDic.Add(two)
Dim s As New JavaScriptSerializer
Dim str As String = s.Serialize(newDic)
Return str
End Function
End Class
这个webservice“dic”给了我序列化的字符串/列表,如下所示:
[{"id":"1","name":"the name","price":"5.99"},{"id":"2","name":"item name two","price":"1299"}]
我可以在VB代码中读到这个:
Sub loadMe() Handles Me.Load
Dim t As New websvce.testSoapClient
Dim d As String = t.dic
Dim s As New JavaScriptSerializer
Dim d2 = s.DeserializeObject(d)
Response.Write(d2(1)("name") & "<hr>")
End Sub
它给出了索引为“1”的“name”元素的输出。它工作正常。
但是,不出所料,当尝试使用jQuery使用jQuery获取此信息时,它不起作用,如下所示:
$(document).ready(function () {
$.getJSON('URL/test.asmx/dic', function (data) {
alert(data);
});
});
所以我花了很多时间用谷歌搜索这个,发现各种各样的评论和对话告诉我为什么不允许跨域脚本编写,并且有使用代理的方法,向页面添加标题等等......但......没有解决问题的确凿解决方案。
以下是我发现的一些问题:
Origin http://localhost is not allowed by Access-Control-Allow-Origin
How to implement "Access-Control-Allow-Origin" header in asp.net
还有更多,但我找不到符合我标准的绝对解决方案。我希望以类似于上面的格式输出数据,并使用jQuery从另一个域访问它。
最简单的解决方法是编写一个在接收服务器上运行的处理页面,只需按照上面的VB代码示例加载数据,然后在该服务器上作为webMethod
运行以吐出JSON ,但我宁愿整个事情可以由Web服务处理,因此无需在使用服务器上运行额外的文件。
EDIT;实际上,我还需要能够执行POST操作。