使用Ext.js"网络错误400错误请求"从WCF获取数据

时间:2014-05-09 13:44:13

标签: javascript ajax web-services wcf extjs

我正在尝试使用Ext.js从WCF获取数据。我想点击一个按钮获取所有数据。这是我到目前为止所尝试的: 这是我的JavaScript函数:

buttonClick: function () {
        var myparams = { 'name': 'baris' };

        Ext.Ajax.request({
            url: 'http://localhost:57044/www/HelloWorldService.svc/GetMessage',//replace with ajax call
            //params: Ext.encode(myparams),
            method: 'GET',
            type: 'ajax',
            success: function (response, opts) {
                if (response.responseText) {
                    Ext.MessageBox.alert('Success', response.responseText);
                }
                else {
                    Ext.MessageBox.alert('Failed', 'Unable to get');
                }
            },
            failure: function (response, opts) {
                alert("failure="+response.responseText);
            }
        });
    }

这是我的网络服务界面代码:

namespace Mobile.Service.Maintenance
{
    [ServiceContract]
    interface IHelloWorldService
    {
        [OperationContract]
        [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Wrapped,
               RequestFormat = WebMessageFormat.Json,
               ResponseFormat = WebMessageFormat.Json)]
        String GetMessage();
    }
}

这是Web服务类代码:

namespace Mobile.Service.Maintenance
{
    public class HelloWorldService : IHelloWorldService
    {

        public String GetMessage()
        {
            return "Hello world from " +  "baris" + "!";
        }
    }
}

我使用this教程实现了WCF服务。我创建了一个控制台应用程序并使用了WCF,但是我没有使用Ext.js和Ajax做同样的事情。如果我单击该按钮,它将始终返回到失败功能。在失败函数response.responseText输出一个空字符串。

我在Firebug中收到此错误: NetworkError:400错误请求 - http://localhost:57044/www/HelloWorldService.svc/GetMessage?_dc=1399642562150

(YanıtBaşlıkları=响应标题,İstemBaşlıkları=请求标题抱歉土耳其语本地化) 提前谢谢。

这是来自萤火虫的截图。 enter image description here

1 个答案:

答案 0 :(得分:2)

让我们了解WCF服务提供的服务的概念。 WCF服务提供了两种服务。

1)基于SOAP的服务。

2)基于休息的服务 - 现在由Web API替换(但仍然由WCF支持,如果您想开发基于休息的服务,请使用Web API)

第一次按照本教程,您构建了基于SOAP的服务,并且您可以从控制台应用程序中使用该服务作为基于控制台的应用程序,基于.net的应用程序确实具有支持基于SOAP的服务的必要工具。

第二次尝试使用服务时,您尝试使用基于Javascript的服务(本例中为ExtJ)不支持使用基于SOAP的服务。至少我没有遇到任何能够从浏览器全面消费基于SOAP的服务的javascript框架。

因此,如果您想从Web浏览器(本例中为Ext js)使用这些服务,那么您应该开发基于REST的服务

您需要在代码中更改一些内容才能完成此任务

namespace Mobile.Service.Maintenance
{
    [ServiceContract]
    interface IHelloWorldService
    {
        [OperationContract]
        [WebGet(BodyStyle = WebMessageBodyStyle.Wrapped,
               RequestFormat = WebMessageFormat.Json,
               ResponseFormat = WebMessageFormat.Json
               )]
        String GetMessage();
    }
}

更改您的web.config,以便您尝试提供WCF Restful服务

在web.config中的行为部分下添加以下端点行为

 <endpointBehaviors>
        <behavior name="restfulbehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>

添加以下端点行为

<services>
      <service name="Mobile.Service.Maintenance.HelloWorldService">
        <endpoint address="" behaviorConfiguration="restfulbehavior"
                  binding="webHttpBinding"
                  bindingConfiguration="" 
contract="Mobile.Service.Maintenance.IHelloWorldService"/>


      </service>
    </services>

首先尝试使用浏览器运行服务。

本地主机:57044 /网络/ HelloWorldService.svc /的GetMessage

如果浏览器显示来自酒吧的hello world,请祝贺您拥有第一个基于Web的宁静服务。

stackoverflow不允许我发布图片,在<system.servicemodel>下添加配置

这里有一篇关于宁静服务的优秀文章

http://www.codeproject.com/Articles/571813/A-Beginners-Tutorial-on-Creating-WCF-REST-Services

希望这会有所帮助 谢谢