繁体   English   中英

使用jQuery消耗WCF服务

[英]Consume WCF service using jQuery

我一直在努力尝试从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); 
    }
}

IService1.cs

    [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>

jQuery呼叫

<script type="text/javascript">

    $(document).ready(function () {
        CallMyService();
    });

    function CallMyService() {
        $.ajax({
            type: "POST",
            url: "http://localhost:54368/Service1.svc/GetData",
            data: '',
            dataType: "json",
            contentType: "application/json",
            success: ServiceSucceeded,
            error: ServiceFailed
        });
    }

    function ServiceFailed(result) {
        alert(result.status + ' ' + result.statusText);
    }

    function ServiceSucceeded(result) {
        var resultObject = result.GetDataResult;
        alert(resultObject);
    }

</script>

如果我尝试通过添加服务引用来使用C#项目中的WCF服务,则会得到以下信息:

在ServiceModel客户端配置部分中找不到引用合同'myReference.IService1'的默认终结点元素。 这可能是因为找不到您的应用程序的配置文件,或者是因为在客户端元素中找不到与该协定匹配的端点元素。

可能与错误有关吗? WCF服务在IIS本地托管。

我只是不知道还要检查什么。

更新:

我刚刚找到了解决方案,事实证明我需要使用以下代码在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();
        }
    }

WCF服务所在的本地主机,之后就可以了! 非常感谢你们两个告诉我有关Java调试器的信息,这给了我提示!!!

更新:

我刚刚找到了解决方案,事实证明我需要使用以下代码在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();
    }
}

WCF服务所在的本地主机,之后就可以了! 非常感谢你们两个告诉我有关Java调试器的信息,这给了我提示!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM