我有WCF服务
ITourService.cs
namespace Service
{
[ServiceContract]
public interface ITourService
{
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Xml)]
double?[] GetPoints(string tourname);
}
}
的Web.config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="TourService.TourService">
<endpoint binding="webHttpBinding" contract="TourService.ITourService" behaviorConfiguration="webHttp"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp helpEnabled="true"/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
所以我使用jQuery 1-6-2.min.js并尝试调用方法。
功能Start()开始通话
var varType;
var varUrl;
var varData;
var varContentType;
var varDataType;
var varProcessData;
function CallService() {
$.ajax({
type : varType, //GET or POST or PUT or DELETE verb
url : varUrl, // Location of the service
data : varData, //Data sent to server
contentType : varContentType, // content type sent to server
dataType : varDataType, //Expected data format from server
processdata : varProcessData, //True or False
success : function(msg) {//On Successfull service call
ServiceSucceeded(msg);
},
error: ServiceFailed// When Service call fails
});
}
function Start() {
varType = "POST";
varUrl = "http://localhost:1592/TourService.svc/GetPoints/";
varData = '{tourname:customname}'; //tourname=customname doesn't works too and many other variants
varContentType = "application/json; charset=utf-8";
varDataType = "xml";
varProcessData = false;
CallService();
}
function ServiceSucceeded(result) {
alert(result);
}
function ServiceFailed(result) {
alert('Service call failed: ' + result.status + ' ' + result.statusText);
varType = null;
varUrl = null;
varData = null;
varContentType = null;
varDataType = null;
varProcessData = null;
}
然而出了问题。
我收到一条消息:服务呼叫失败:0错误
WCF服务工作正常,我在C#
上使用标准客户端进行了检查我认为从javascript到WCF的访问存在错误,但我不知道在哪里。
答案 0 :(得分:3)
您已根据W3C标准实施了Web服务,即您的Web服务需要XML格式的请求以及XML格式的答案。但是,在Javascript代码中,您可以使用JSON数据创建REST请求。
当您监控浏览器与服务之间的通信时,您可能会看到该服务以“404 Not found”回答,因为它只会回复URL http://localhost:1592/TourService.svc而不是{{3 }}
因此,要继续,您需要将Web服务转变为REST服务。我还建议不仅要将JSON用于请求,还要用于响应。
您可以在此http://localhost:1592/TourService.svc/GetPoints/中找到使用WCF构建的简单REST服务的示例。
答案 1 :(得分:0)
varData = '{"tourname": "customname"}';
应该有用。
答案 2 :(得分:0)
我想只是
varData = {tourname: "customname"};
应该有用;
答案 3 :(得分:0)
为了将processData
对象转换为编码字符串
varData
为真
varData = { tourname : 'customname' }
...
varProcessData = true;