gpt4 book ai didi

ajax - 为什么我的 WCF JSONP 服务不通过 HTTPS 返回 JSONP

转载 作者:行者123 更新时间:2023-12-03 03:19:53 25 4
gpt4 key购买 nike

我有一个使用 JSONP 的 WCF 服务(托管在 Azure 中)。它在 HTTP 上工作得很好,即,如果它仅接收 JSON,则仅返回 JSON,如果它接收 JSONP,则返回 JSONP。但是,一旦我切换到 HTTPS(仅在 Azure 中提供 HTTPS 端点),无论调用是 JSON 还是 JSONP,它都仅返回 JSON。我的 HTTP 配置是:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint name="" crossDomainScriptAccessEnabled="true">
</standardEndpoint>
</webScriptEndpoint>
</standardEndpoints>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>

在服务 Global.asax 文件中我有:

public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}

void RegisterRoutes(RouteCollection routes)
{
routes.Add(new ServiceRoute("DirectTvService", new WebScriptServiceHostFactory(), typeof(DirectTVService.DirectTvService)));
}
}

我想从 HTTP 更改为 HTTPS,所以我添加

<security mode="Transport">
</security>

到 standardEndpoint 标记,因此:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint name="" crossDomainScriptAccessEnabled="true">
<security mode="Transport">
</security>
</standardEndpoint>
</webScriptEndpoint>
</standardEndpoints>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>

我将 IIS7 绑定(bind)从 HTTP 更改为 HTTPS。使用此配置,服务可以按 JSON 的预期工作,但仅返回 JSONP 请求的 JSON(响应未包装在回调函数中。

我的客户端请求的示例(在 CoffeeScript 中)是:

$.ajax
url: callUrl
dataType: 'jsonp'
data:
username: $('#txtUsername').val()
password: $('#txtPassword').val()
success: (data) =>
$.unblockUI()
Application.processLoginData data
false
error: (d, msg, status) ->
$.unblockUI()
alert "There was a problem contacting the database. " + status
false

我的服务方法装饰有:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public LoginResponse LoginUser(String username, String password)

有什么想法吗?

库尔特

最佳答案

奇怪的是,一个可行的解决方案是在 Azure 配置中同时拥有 HTTP 和 HTTPS 端点,但在我的 WCF 配置中只提供一个端点。我使用了以下 serviceModel 配置:

  <system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint name="" crossDomainScriptAccessEnabled="true">
</standardEndpoint>
</webScriptEndpoint>
</standardEndpoints>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>

一切都很好。一旦我删除了 Azure 配置中的 HTTP 端点,JSONP 就会停止工作(仅返回 JSON),并且如果我添加

<security mode="Transport">
</security>

到standardEndPoint(正如我期望对HTTPS所做的那样)它也停止工作......

关于ajax - 为什么我的 WCF JSONP 服务不通过 HTTPS 返回 JSONP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com