我有一个使用 JSONP(托管在 Azure 中)的 WCF 服务。它在 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>
到标准端点标签,因此:
<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 绑定从 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)
有任何想法吗?
库尔特