我正在尝试为我自己的教育编目在 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);
}
});