gpt4 book ai didi

AJAX 跨域图像发布到 WCF 服务

转载 作者:行者123 更新时间:2023-12-02 22:39:25 25 4
gpt4 key购买 nike

我已经在这上面卡了 2 天了。

有人可以提供一个示例,说明如何将跨域 AJAX 发布到 WCF 服务吗?

我正在尝试将图像上传到 WCF 服务器。

编辑

WCF 服务:

[WebInvoke(UriTemplate = "/upload", Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped), CorsEnabled]
void UploadImage(Stream image);

Ajax 调用:

function UploadImage() {
image = document.getElementById("myimage").src;
var data = '{"image": "' + image + '"}'
//alert(data);
$.ajax({
url: "http://localhost:44665/api/upload",
type: "POST",
contentType: "application/json",
data: data,
success: function (result) {
alert("success");
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR.responseText);
}
});
}

如果我将 WCF 参数从 Stream 更改为 string,我就可以让它工作。但我需要上传图片而不是字符串。

我现在收到一个 WCF 错误:

The server encountered an error processing the request. See server logs for more details.

** 编辑 2 **我添加了以下答案中提到的 global.asax 代码并将其添加到我的 web.config 中:

<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>

<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="myServiceBehavior">
<servicedebug includeexceptiondetailinfaults="true" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>

</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"
aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
</configuration>

我现在在 Google Chrome 控制台中收到一条错误消息:

POST http://localhost:44665/api/upload 500 (Internal Server Error) 

最佳答案

因此,您正在尝试从 JavaScript 向托管在另一个域中的 WCF 服务执行 POST 操作。通常情况下,如果不在 WCF 服务端进行一些特殊设置,您将无法做到这一点。

您必须将以下 header 添加到服务端 Global.asax.cs 的响应中(如果服务项目不包含 Global.asax.cs 创建一个)。

protected void Application_BeginRequest(object sender, EventArgs e)
{
//..
EnableCrossDomainCall();
}

private void EnableCrossDomainCall()
{
// this header tells that from any domain you can access me.
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");

if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
// this one tells about the supported methods to client.
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods",
"GET, POST, OPTIONS");

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers",
"Content-Type, Accept");

HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");

HttpContext.Current.Response.End();
}
}

更新:

您不能只通过 AJAX 发布任何文件,通过 AJAX 您只能传输数据。您可以使用 this使用隐藏的 iframe 上传模仿 AJAX 的文件的插件。

您可以像在 link 中那样在 WCF 端处理流对象.尝试先上传小尺寸图片,您可以通过设置 maxRequestLength 来控制最大尺寸在 web.config 中。

关于AJAX 跨域图像发布到 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10935690/

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