UPDATE1:
这是我在IE浏览器中复制并粘贴服务URL时所得到的:
HTTP://myservername/myservices.svc WSDL
- <wsdl:message name="ILodge_GetCountfor">
<wsdl:part name="parameters" element="tns:GetCountfor" />
</wsdl:message>
- <wsdl:message name="ILodge_GetCountfore">
<wsdl:part name="parameters" element="tns:GetCountfor" />
</wsdl:message>
- <wsdl:message name="ILodge_GetCountfor_Input">
<wsdl:part name="parameters" element="tns:GetCountfor" />
</wsdl:message>
- <wsdl:message name="ILodge_GetCountfor">
<wsdl:part name="parameters" element="tns:GetCountfor" />
</wsdl:message>
HTTP://myservername/myservices.svc XSD = xsd0
- <xs:element name="GetCountfor">
- <xs:complexType>
- <xs:sequence>
<xs:element minOccurs="0" name="GetCountforResult" type="xs:long" />
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="GetCountfor">
- <xs:complexType>
- <xs:sequence>
<xs:element minOccurs="0" name="Id" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="LevelId" type="xs:long" />
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="GetCountfor">
- <xs:complexType>
- <xs:sequence>
<xs:element minOccurs="0" name="GetCountfor" type="xs:long" />
</xs:sequence>
</xs:complexType>
</xs:element>
更新
我看到服务正在以XML格式返回:
public override string ToString()
{
//- <name>CLUE</name><desc>CLUE list</desc>
StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
sb.AppendLine("<kml xmlns=\"someSITE">");
sb.AppendLine("<FOLDER>");
sb.AppendLine("<name>Clue</name>");
sb.AppendLine("<desc>Clue list</desc>");
sb.AppendLine("</FOLDER>");
sb.AppendLine("</kml>");
return sb.ToString();
}
我尝试过不同的方式执行以下跨域引用但没有成功......我在这里做错了什么?我尝试调试并设置断点,但看起来它永远不会执行
$(document).ready(function () {
$.getJSON("http://servername/tools/myservice.svc/mymethod/?Id=1&callback=?", null,
function (result) {
alert("in test: " + result);
debugger
$("#spText").html(result);
});
OR
var path = "http://servername/tools/myservice.svc/mymethod?Id=1&callback=?";
$.ajax({
type: "GET",
url: path,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (response) {
debugger
if (response != null) {
//displayData(response);
}
}
});
OR
debugger
$.ajax({ url: "http://servername/tools/myservice.svc/mymethod",
data: { Id: "1" },
dataType: "jsonp",
success: function (json, textStatus) {
alert(json.d);
alert(textStatus);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
debugger
}
});
OR
$.ajax({
type: "GET",
cache: false,
url: "http://servername/tools/myservice.svc/mymethod/Id=1&callback=?",
scriptCharset: "utf-8",
dataType: "jsonp",
data: parameters,
success: function (data, textStatus) {
debugger
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
debugger
}
});
}
答案 0 :(得分:1)
我尝试过不同的方式来执行以下跨域引用,但没有成功......
由于安全风险,浏览器不允许跨域ajax请求。如果您的网页和Web服务位于不同的域中,则需要在与您的网页相同的域中添加第二个页面来代理请求。
答案 1 :(得分:0)
我猜“响应”无效jsonp。
将网址复制到您的浏览器地址栏中,向我们展示您将看到的内容。
以下是jsonp的示例:
someFunction({'foo':'some foo','bar':'some bar'})
它看起来像是一个带有object-literal作为参数的函数的调用。它看起来像是,因为它以后会是一个函数调用。 jsonp的工作方式是:
一个<script>
元素将被注入DOM,它将提供的URL设置为src-attribute。所以ressource不是字符串或XML文档,它是一个javascript文件。如果它被嵌入到文档中,它将被执行并且参数可以访问。
我不能告诉你创建jsonp的最终方式,这取决于你从哪里获取数据以及你喜欢用它做什么(当然还有给定的环境)。
答案 2 :(得分:0)
WCF服务的正常.Net扩展名是.svc,看起来你所有的调用都是.svs
我不认为.svs是一个普通的.net扩展,所以运行时甚至可能都没有尝试执行调用服务器端。
更改扩展程序或重新配置您的网络服务器。
答案 3 :(得分:0)
sb.AppendLine("<kml xmlns=\"someSITE">");
,应该是:sb.AppendLine("<kml xmlns=\"someSITE\">");
你可以从SO编辑器的突出显示功能告诉它,谢谢SO团队:)
public override string ToString()
{
//- <name>CLUE</name><desc>CLUE list</desc>
StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
sb.AppendLine("<kml xmlns=\"someSITE\">");
sb.AppendLine("<FOLDER>");
sb.AppendLine("<name>Clue</name>");
sb.AppendLine("<desc>Clue list</desc>");
sb.AppendLine("</FOLDER>");
sb.AppendLine("</kml>");
return sb.ToString();
}
答案 4 :(得分:0)
严格禁止XMLHttpRequest对象调用最初为该页面提供服务的域之外的Web服务。这有很大的安全原因。
在您的情况下,为该页面提供服务的域名是“localhost”。 javascript无法访问远程Web服务。你不会绕过这个。
那说,你有一个选择。你可以让你的javascript命中一个本地Web服务,它转过来并调用REMOTE Web服务并将信息传递回你的javascript。有关详细信息,请参阅this article on Simple-Talk,其中详细介绍了您可以使用的几种可能选项。