规格:
- 服务器2012
- 框架3.5
我已经在服务器http://ipaddress/eSignatureWS.asmx?op=SaveImg.
中部署了我的Web服务
问题:当我将ajax数据类型更改为"json";或";文本";它有一个内部服务器错误,但当我使用";脚本";它不会有错误,但不会保存图像。当我在本地尝试时,它使用";json"/"文本";但当我部署它时,它就不再工作了。
这是我的代码:
Jquery
function signatureSave() {
var canvas = document.getElementById("newSignature"); // save canvas image as data url (png format by default)
var data = canvas.toDataURL("image/png");
var signatureData = data.replace(/^data:image/(png|jpg);base64,/, "");
var donum = "sampleImg"; //imagename
$.support.cors = true;
//var imgData = JSON.stringify(signatureData);
$.ajax({
type: "Post",
async: false,
url: "http://ipaddress/eSignatureWS.asmx?op=SaveImg",
data: { "filename": donum, "imgBit": signatureData },
dataType: "json",
success: function (data) { //alert(data);
if (data.match("true")) {
document.getElementById('errorImage').innerHTML = "Successfully Submitted!";
}
else {
document.getElementById('errorImage').innerHTML = "Error occured.";
}
},
error: function (XMLHttpRequest, testStatus, errorThrown) {
document.getElementById('errorImage').innerHTML = errorThrown;
alert(XMLHttpRequest + testStatus + errorThrown);
}
})
Web服务
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string SaveImg(string filename, string imgBit)
{
try
{
string filepath = WebConfigurationManager.AppSettings["ImgLocation"].ToString();
string imgPath = filepath + filename + ".png";
//creates a png image signature
using (FileStream fs = new FileStream(imgPath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
byte[] data = Convert.FromBase64String(imgBit);
bw.Write(data);
bw.Close();
JavaScriptSerializer js = new JavaScriptSerializer();
string strJSON = js.Serialize("true");
return strJSON;
}
}
}
catch (Exception ex)
{
}
}
检查编辑部分
我猜你不知道ASP.NET中默认设置为100KB的"maxJsonLength"属性。直到我对同一主题进行了最新搜索,我才意识到这一点:)
在Web.Config文件中,您可以根据需要更改此默认限制。
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="1000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
这个是1.000.000字节,大约1MB。如果您需要通过Web服务发送更大的文件,您可以设置更高的值。
检查一下,请告诉我它是否有效。
编辑:我最近发现这不是你应该做的唯一设置。您还应该在web.config文件中设置httpruntime节点的"maxRequestLength"属性,如:
<system.web>
<httpRuntime targetFramework="4.5" maxRequestLength="10000" executionTimeout="10800" />
</system.web>
这里,maxRequestLength是以KB为单位的,因此10000的意思是~10MB(确切地说是9,77MB)。如果用户的带宽较低,并且您的请求长度要求大于10MB,则可以将executionTimeout属性设置为更高的值。这是以秒为单位的,所以10800意味着3小时。
我想你在这儿拍到了。
干杯!