调用WCF方法

时间:2011-07-14 14:34:33

标签: javascript jquery wcf

我有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的访问存在错误,但我不知道在哪里。

4 个答案:

答案 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;