Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从javascript调用wcf服务_Javascript_Asp.net_Wcf_Call - Fatal编程技术网

无法从javascript调用wcf服务

无法从javascript调用wcf服务,javascript,asp.net,wcf,call,Javascript,Asp.net,Wcf,Call,大家好,我正试图从javascript函数调用wcf服务,因为某些原因asp.net无法识别名称空间,并在运行时给我一个错误,如果您有任何帮助,我们将不胜感激,代码如下: 默认aspx页面 <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> <Services> <asp:ServiceRef

大家好,我正试图从javascript函数调用wcf服务,因为某些原因asp.net无法识别名称空间,并在运行时给我一个错误,如果您有任何帮助,我们将不胜感激,代码如下:

默认aspx页面

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="~/WeatherService.svc"/>
        </Services>
    </asp:ScriptManager>

    Enter a zipcode:
    <input id="zipCodeInput" type="text" />
    <br/>
    <input id="getForecastButton" type="button" value="Get Forecast" onclick="onGetForecast()"/>
    <br/>



 <div id="resultsDiv">

    </div>
</form>
}

web.config文件

 <system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="WeatherServiceAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
<services>
  <service name="WeatherService">
    <endpoint address="" behaviorConfiguration="WeatherServiceAspNetAjaxBehavior"
      binding="webHttpBinding" contract="WeatherService" />
  </service>
</services>
  </system.serviceModel>


您的服务/服务方法似乎缺少ScriptService/ScriptMethod属性。

这里我使用javascript从WCF调用simple hello world

服务中心

using System;
using System.Collections.Generic;
using System.Linq;`
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.ServiceModel.Activation;
//注意:您可以使用“重构”菜单上的“重命名”命令来同时更改代码、svc和配置文件中的类名“服务”

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service : IService
{
 [WebGet(ResponseFormat = WebMessageFormat.Json)]
    public string helloworld(string name)
    {
        name = "Hello " + name;
        return  name;
    }
}
web.config

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="Service" behaviorConfiguration="DefaultBehavior">
        <endpoint address="" binding="webHttpBinding" contract="IService" name="RunningBarbus.Services.RunningBarbusService" behaviorConfiguration="AjaxBehavior">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex"/>
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding crossDomainScriptAccessEnabled="true">
          <security mode="None"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="AjaxBehavior">
          <!--<enableWebScript/>-->
          <webHttp  helpEnabled="true" automaticFormatSelectionEnabled="false" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <standardEndpoints>
      <webScriptEndpoint>
        <standardEndpoint crossDomainScriptAccessEnabled="true" name="">
        </standardEndpoint>
      </webScriptEndpoint>
    </standardEndpoints>
   </system.serviceModel>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="access-control-allow-headers" value="content-type, Accept" />
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" />
        <add name="Access-Control-Max-Age" value="1728000" />
      </customHeaders>
    </httpProtocol>
    <modules runAllManagedModulesForAllRequests="true"/>

  </system.webServer>
</configuration>

javascript代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jsonp.aspx.cs" Inherits="jsonp" %>

<!DOCTYPE html >

<html>
<head runat="server">
    <title></title>
 <script src="js/jquery-1.10.2.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        var name="";
        var Type;
        var Url = "http://192.168.X.X/WCFjavascript/Service.svc/helloworld?name=world";
        var Data;
        var ContentType;
        var DataType;
        var ProcessData;
        var method;
        //Generic function to call WCF  Service
        function CallService() {
            $.ajax({
                type: Type, //GET or POST or PUT or DELETE verb
                url: Url, // Location of the service
               // data: name, //Data sent to server
                contentType: ContentType, // content type sent to server
                //data: '[{"name":"' + name + '"}]',
                dataType: DataType, //Expected data format from server
                processdata: ProcessData, //True or False
                success: function (msg) {//On Successfull service call
                    ServiceSucceeded(msg);
                },
                error: ServiceFailed// When Service call fails
            });
        }
        function ServiceFailed(xhr) {
            alert(xhr.responseText);
            if (xhr.responseText) {
                var err = xhr.responseText;
                if (err)
                    error(err);
                else
                    error({ Message: "Unknown server error." })
            }
            return;
        }
        function ServiceSucceeded(result) {
            debugger;
            if (DataType == "jsonp") {
                alert(result);
                resultObject = result.helloworld;
                var string = result.name ;
                alert(string);
            }
        }
        function helloworld() {
            debugger;
            var uesrid = "";
            Type = "GET";
            // Url = "http://192.168.X.X/WCFjavascript/Service.svc/helloworld?'"+uesrid+'"';
            Url = Url;

            DataType = "jsonp"; ProcessData = false;
            method = "helloworld";
            CallService();
        }

        $(document).ready(
         function () {

             helloworld();
         }
);

    enter code here
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    </div>
    </form>
</body>
</html>

var name=“”;
var类型;
变量Url=”http://192.168.X.X/WCFjavascript/Service.svc/helloworld?name=world";
var数据;
var内容类型;
var数据类型;
var过程数据;
var方法;
//调用WCF服务的通用函数
函数CallService(){
$.ajax({
type:type,//GET或POST或PUT或DELETE动词
url:url,//服务的位置
//data:name,//发送到服务器的数据
contentType:contentType,//内容类型已发送到服务器
//数据:'[{“name”:“'+name+'“}]”,
dataType:dataType,//服务器的预期数据格式
processdata:processdata,//True或False
success:function(msg){//On Successfull service call
服务成功(msg);
},
错误:servicefiled//当服务调用失败时
});
}
函数服务失败(xhr){
警报(xhr.responseText);
if(xhr.responseText){
var err=xhr.responseText;
如果(错误)
错误(err);
其他的
错误({消息:“未知服务器错误”。})
}
返回;
}
函数ServiceSuccessed(结果){
调试器;
如果(数据类型==“jsonp”){
警报(结果);
resultObject=result.helloworld;
var string=result.name;
警报(字符串);
}
}
函数helloworld(){
调试器;
var uesrid=“”;
Type=“GET”;
//Url=”http://192.168.X.X/WCFjavascript/Service.svc/helloworld?“+uesrid+”;
Url=Url;
DataType=“jsonp”;ProcessData=false;
方法=“helloworld”;
CallService();
}
$(文件)。准备好了吗(
函数(){
helloworld();
}
);
在这里输入代码

你知道我应该使用什么吗?我的意思是,你能给我一个确切的语法来放入文件吗?我查阅了文档,似乎对于WCF,你所要做的就是在方法上添加WebInvoke属性:
<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="Service" behaviorConfiguration="DefaultBehavior">
        <endpoint address="" binding="webHttpBinding" contract="IService" name="RunningBarbus.Services.RunningBarbusService" behaviorConfiguration="AjaxBehavior">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex"/>
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding crossDomainScriptAccessEnabled="true">
          <security mode="None"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="AjaxBehavior">
          <!--<enableWebScript/>-->
          <webHttp  helpEnabled="true" automaticFormatSelectionEnabled="false" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <standardEndpoints>
      <webScriptEndpoint>
        <standardEndpoint crossDomainScriptAccessEnabled="true" name="">
        </standardEndpoint>
      </webScriptEndpoint>
    </standardEndpoints>
   </system.serviceModel>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="access-control-allow-headers" value="content-type, Accept" />
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" />
        <add name="Access-Control-Max-Age" value="1728000" />
      </customHeaders>
    </httpProtocol>
    <modules runAllManagedModulesForAllRequests="true"/>

  </system.webServer>
</configuration>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jsonp.aspx.cs" Inherits="jsonp" %>

<!DOCTYPE html >

<html>
<head runat="server">
    <title></title>
 <script src="js/jquery-1.10.2.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        var name="";
        var Type;
        var Url = "http://192.168.X.X/WCFjavascript/Service.svc/helloworld?name=world";
        var Data;
        var ContentType;
        var DataType;
        var ProcessData;
        var method;
        //Generic function to call WCF  Service
        function CallService() {
            $.ajax({
                type: Type, //GET or POST or PUT or DELETE verb
                url: Url, // Location of the service
               // data: name, //Data sent to server
                contentType: ContentType, // content type sent to server
                //data: '[{"name":"' + name + '"}]',
                dataType: DataType, //Expected data format from server
                processdata: ProcessData, //True or False
                success: function (msg) {//On Successfull service call
                    ServiceSucceeded(msg);
                },
                error: ServiceFailed// When Service call fails
            });
        }
        function ServiceFailed(xhr) {
            alert(xhr.responseText);
            if (xhr.responseText) {
                var err = xhr.responseText;
                if (err)
                    error(err);
                else
                    error({ Message: "Unknown server error." })
            }
            return;
        }
        function ServiceSucceeded(result) {
            debugger;
            if (DataType == "jsonp") {
                alert(result);
                resultObject = result.helloworld;
                var string = result.name ;
                alert(string);
            }
        }
        function helloworld() {
            debugger;
            var uesrid = "";
            Type = "GET";
            // Url = "http://192.168.X.X/WCFjavascript/Service.svc/helloworld?'"+uesrid+'"';
            Url = Url;

            DataType = "jsonp"; ProcessData = false;
            method = "helloworld";
            CallService();
        }

        $(document).ready(
         function () {

             helloworld();
         }
);

    enter code here
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    </div>
    </form>
</body>
</html>