【发布时间】:2014-10-31 14:38:33
【问题描述】:
我想做的只是将 Json 响应从 Wcf 服务提供给 Wpf WebControl。我已测试 Wcf 服务是否正常工作,并且可以在 REST 客户端中看到 Json 响应。
我基本上尝试了两种方法(感谢慷慨的开发人员在这里分享他们的代码):-
下面是我的 ResourceInterceptor 如何构造 ResourceResponse。从文档中 ResourceResponse 只是一个原始数据块和指定 mime 类型的包装器。这应该意味着我应该能够将我的响应与 contentType 一起传递,并且 awesomium 应该能够识别。但是我的 ajax 请求都出现在“错误”中,jqXHR 中没有内容:-
private ResourceResponse readWebResponse(HttpWebRequest webreq)
{
HttpWebRequest.DefaultMaximumErrorResponseLength = 1048576;
HttpWebResponse webresp = null;// = webreq.GetResponse() as HttpWebResponse;
var memStream = new MemoryStream();
Stream webStream;
try
{
webresp = (HttpWebResponse)webreq.GetResponse();
webStream = webresp.GetResponseStream();
byte[] readBuffer = new byte[4096];
int bytesRead;
while ((bytesRead = webStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
memStream.Write(readBuffer, 0, bytesRead);
}
catch (WebException e)
{
var r = e.Response as HttpWebResponse;
webStream = r.GetResponseStream();
memStream = Read(webStream);
var wrongLength = memStream.Length;
}
memStream.Position = 0;
StreamReader sr = new StreamReader(memStream);
string webStreamContent = sr.ReadToEnd();
byte[] responseBuffer = Encoding.UTF8.GetBytes(webStreamContent);
// Initialize unmanaged memory to hold the array.
int responseSize = Marshal.SizeOf(responseBuffer[0]) * responseBuffer.Length;
IntPtr pointer = Marshal.AllocHGlobal(responseSize);
try
{
// Copy the array to unmanaged memory.
Marshal.Copy(responseBuffer, 0, pointer, responseBuffer.Length);
return ResourceResponse.Create((uint)responseBuffer.Length, pointer,webresp.ContentType);
}
finally
{
// Data is not owned by the ResourceResponse. A copy is made
// of the supplied buffer. We can safely free the unmanaged memory.
Marshal.FreeHGlobal(pointer);
webStream.Close();
}
}
我的 Ajax 请求如下所示:-
$.ajax({
url:urlBase+'/list'
,success: function(dt){deferred.resolve(dt);alert('hurray')},
error: function(jqXHR, textStatus, errorThrown ){
alert('oyei oyei something went wrong'+JSON.stringify(jqXHR));
var err = eval('(' + xhr.responseText + ')');
alert(err.Message);}
});
我得到的是:-
{"readyState":0,"responseText":"",status:0,"statusText":"error"}
- 我也尝试过从这里使用 Userscripts 方法:- http://answers.awesomium.com/questions/2289/can-i-use-userscripts-or-greasemonkey-scripts-in-a.html
在我的 Javascript 请求中,我只是像这样调用了上述实用程序:-
uScriptHelper.xmlHttpRequest({url:urlBase+'/list', onload=function(){return(this.responseText);}});
我可以看到用户脚本正在设置 responseText。但是我的 ajax 响应仍然是一样的 - 所有空参数的错误结果。我在这里做错了什么?
【问题讨论】: