Câu hỏi của tôi xoay quanh Dịch vụ REST WCF cho IIS đáp ứng với JSONP. Tôi lấy các lớp học trong giải pháp này: http://msdn.microsoft.com/en-us/library/cc716898.aspx và thêm chúng vào của tôi. Mọi thứ đã hoạt động tốt trên máy trạm của nhà phát triển của tôi bằng cách sử dụng mạo danh với httpTransport nhưng khi tôi cố gắng chuyển sang máy chủ phát triển, tôi đã gặp phải một số vấn đề bảo mật. Những vấn đề này đã được giải quyết bằng cách sử dụng cấu hình bên dưới và người dùng nhận dạng App Pool. Tôi cũng cấu hình IIS metabase tập tin cho NTLM chỉ xác thực (chúng tôi đang sử dụng IIS 6 nhưng sẽ là IIS 7 sớm, cần phải làm việc trên cả hai) như tôi không có quyền truy cập để thực hiện một SPN. Tôi tin rằng cấu hình hiện tại đã giải quyết được sự cố bảo mật của tôi nhưng trong quá trình phản hồi JSONP của tôi đã bị hạ cấp xuống regualar JSON, đây là vấn đề. Dưới đây là cấu hình có liên quan:Ràng buộc JSONP tùy chỉnh WCF và httpsTransport
<services>
<service name="IS.Core.Infrastructure.RESTRouter.Transactions" behaviorConfiguration="">
<endpoint address="" behaviorConfiguration="webHttp" binding="customBinding"
bindingConfiguration="jsonpBinding" contract="IS.Core.Infrastructure.RESTRouter.ITransactions">
</endpoint>
</service>
<service name="IS.Core.Infrastructure.RESTRouter.Queue" behaviorConfiguration="">
<endpoint address="" behaviorConfiguration="webHttp" binding="customBinding"
bindingConfiguration="jsonpBinding" contract="IS.Core.Infrastructure.RESTRouter.IQueue" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="jsonpBinding">
<jsonpMessageEncoding />
<httpsTransport
manualAddressing="true"
authenticationScheme="Ntlm" />
</binding>
</customBinding>
</bindings>
<extensions>
<bindingElementExtensions>
<add name="jsonpMessageEncoding"
type="IS.Core.Infrastructure.RESTRouter.JsonpBindingExtension, RESTRouter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bindingElementExtensions>
</extensions>
đây là một trong những định nghĩa phương thức giao diện:
[OperationContract]
[WebGet(UriTemplate = "{ModelPath}/{ObjectTypeName}?callback={callback}", ResponseFormat = WebMessageFormat.Json)]
[JSONPBehavior(callback = "callback")]
JSONPXml NewObject(string ModelPath, string ObjectTypeName, string callback);
đây được thực hiện:
[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
public JSONPXml NewObject(string ModelPath, string ObjectTypeName, string callback) {
int val = getEmployeeIdByNTUsername(OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name);
JSONPXml jsp = null;
EntityPluginReflectorClient client = null;
try {
client = new EntityPluginReflectorClient();
string output = client.NewObject(ModelPath, ObjectTypeName);
jsp = new JSONPXml() { xml = output };
} catch (Exception e) {
InfrastructureLog.WriteException(this, "NewObject", e);
jsp = getExceptionResponse(e);
}
finally {
client.Close();
}
return (jsp);
}
và đây là hợp đồng dữ liệu:
[DataContract()]
public class JSONPXml {
public JSONPXml() { }
[DataMember]
public string xml;
}
Vui lòng cho tôi biết nếu cần thêm thông tin và cảm ơn vì đã xem xét điều này.
Cảm ơn, sau bình luận của bạn, tôi đã kiểm tra kỹ và tham số truy vấn gọi lại hiện diện trong cả hai môi trường. Một điều cần lưu ý là trên hệ thống cục bộ của tôi khi tôi thay đổi cấu hình từ httpTransport thành HttpsTransport, đầu ra trở thành json thông thường. –
Lạ. Bạn nói bạn đã bao gồm các lớp từ mẫu. Nếu bạn đặt một điểm ngắt trong cả hai phương thức WriteMessage của JSONPEncoderFactory thì có bất kỳ lỗi nào trong số chúng xảy ra khi bạn thực hiện cuộc gọi không? –