2

我正在尝试为我自己的教育编目在 asp.net 应用程序中使用服务的多种方式。

使用标准(即非 ajax)WCF 服务时,如果您将端点行为与“webHttp”一起使用,则 json 结果不会用“d”包装。如果您将端点行为与“enableWebScript”一起使用,您将获得预期的“d”包装器。

这是.net 4.5 现在的一个特性,还是为什么你没有得到带有 webHttp 的“d”包装器?

我现在的理解是,实现“d”包装器的是底层的 MS-AJAX 基础结构,如果您在没有 AJAX 基础结构的情况下使用 WCF(例如,如果设置 RESTful 服务),则可以避免这种情况。

我没有任何真正复杂的实现——我只是试图捕捉实现服务的不同方式的细微差别——但以防万一,这里是我用来用“d”发现这种行为的代码。

这是暴露的方法:

[ServiceContract]
public interface IServicesDemo_WCF
{
    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
    string ReturnWcfMessage();
}

这是配置:

<system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="WebService.AJAX_WCFAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>
      <behavior name="WebService.WCFBehavior">
          <webHttp />
      </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
      <behavior name="WCFServiceBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
<services>
  <service name="WebService.ServicesDemo_AJAX_WCF">
    <endpoint address="" behaviorConfiguration="WebService.AJAX_WCFAspNetAjaxBehavior"
      binding="webHttpBinding" contract="WebService.ServicesDemo_AJAX_WCF" />
  </service>
    <service name="WebService.ServicesDemo_WCF" behaviorConfiguration="WCFServiceBehavior">
        <endpoint address="" behaviorConfiguration="WebService.WCFBehavior"
          binding="webHttpBinding" contract="WebService.IServicesDemo_WCF" />
    </service>
</services>

这是来自客户的电话:

$.ajax({
            type: "Get",
            data: data,
            contentType: "application/json; charset=utf-8",
            url: "ServicesDemo_WCF.svc/ReturnWcfMessage",
            success: function (data) {
                $('#wcf_content').html(data);
            },
            error: function (msg) {
                alert(msg);
            }
        });
4

0 回答 0