Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
C# 使用jQuery使用WCF服务_C#_Jquery_Wcf - Fatal编程技术网

C# 使用jQuery使用WCF服务

C# 使用jQuery使用WCF服务,c#,jquery,wcf,C#,Jquery,Wcf,我一直在努力尝试从WCF服务获取数据,但运气不佳,我会感谢您的帮助,这是我的代码,我在ajax调用的错误函数中总是得到“0 undefined”: Service1.svc.cs [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class Service1 : IService1 { public string GetData(

我一直在努力尝试从WCF服务获取数据,但运气不佳,我会感谢您的帮助,这是我的代码,我在ajax调用的错误函数中总是得到“0 undefined”:

Service1.svc.cs

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
    public string GetData()
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string output = "It worked";

        return serializer.Serialize(output); 
    }
}
    [OperationContract]
    [System.ServiceModel.Web.WebInvoke(Method = "POST",
        ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json)]
    string GetData();
IService1.cs

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
    public string GetData()
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string output = "It worked";

        return serializer.Serialize(output); 
    }
}
    [OperationContract]
    [System.ServiceModel.Web.WebInvoke(Method = "POST",
        ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json)]
    string GetData();
Web.config

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          </behavior>
        </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="ServiceAspNetAjaxBehavior">
          <enableWebScript />
          </behavior>
        </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
      <service behaviorConfiguration="ServiceBehavior" name="MyService.Service1">
        <endpoint address="" binding="webHttpBinding" contract="MyService.IService1" behaviorConfiguration="ServiceAspNetAjaxBehavior">
          <identity>
            <dns value="localhost"/>
          </identity>
          </endpoint>
          <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
          </service>
        </services>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>

localhost是您的WCF服务所在的位置,在这之后,它就可以工作了!非常感谢你们两位告诉我Javascript的调试器,这给了我线索

更新:

我刚刚找到了解决方案,结果我需要在WCF服务解决方案中创建一个Global.asax文件,代码如下:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost");
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");

            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
            HttpContext.Current.Response.End();
        }
    }
protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost");
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
    {
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");

        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
        HttpContext.Current.Response.End();
    }
}

localhost是您的WCF服务所在的位置,在这之后,它就可以工作了!非常感谢你们两位告诉我Javascript的调试器,这给了我线索

result.GetDataResult将向您提供该错误。您可以从Google Chrome调试javascript,并查看结果返回的值。我刚刚将其更改为:success:function(result){alert(result.d);},结果相同。如何从Google chrome调试javascript代码?不要在jQuery脚本中使用
alert(resultObject)
,而是使用
console.log(result)
。然后,您可以在浏览器的开发控制台(通常使用
F12
键打开)中查看结果。在打开的面板中查找名为Console的选项卡。我得到:请求的资源上没有“Access Control Allow Origin”头。因此,不允许访问源“null”。回复的HTTP状态代码为405。与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。顺便说一句,这是“提前感谢”,而不是“提前感谢”。