c# - 将 ASMX 服务迁移到 WCF 服务 - AJAX 帖子

标签 c# asp.net .net wcf web-services

我有一个 asp.net asmx 服务,我想将它转换为一个 wcf 服务。

我在使用参数从 jquery ajax POST 请求调用 wcf 服务时遇到问题。

如果我调用不带参数的 WCF 服务或以 json 格式传递参数,它工作正常。

当执行下面的 jquery post 到 wcf 服务时,我得到错误 500。

请注意,我无法更改发出 jquery 请求的方式。

原始 ASMX 服务:

[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void SendStatus(string param1, string param2)
{
..................
}

jQuery 发布:

var d = { param1: 1, param2: 2 };
        $.ajax({
            type: "POST",
            url: "/Service1.asmx/SendStatus",
            data: d,
            success: function () { }
        });

新的 WCF 服务:

[OperationContract]
[WebInvoke]

public void SendStatus(string param1, string param2)
{
}

jQuery 发布:

var d = { param1: 1, param2: 2 };
 $.ajax({
            type: "POST",
            url: "/Service2.svc/SendStatus",
            data: d,
            success: function () { }
        });

最佳答案

-- 编辑-- 我记得这个问题曾经让我抓狂过一次,所以我回去再看一眼。果然……考虑到 Javscript 保持原样的要求,我坚持认为这对于当前版本的 WCF 实际上是不可能的。请考虑以下几点:

1) 您需要使用 webHttpBinding,因为这是唯一支持 REST 样式服务的绑定(bind)(basicHttpBinding 和 WSHttpBinding 都使用 SOAP 包装器)。 (此处引用:BasicHttpBinding vs WsHttpBinding vs WebHttpBinding)

2) 此问题中所写的 AJAX 调用使用内容类型“application/x-www-form-urlencoded”(您可以使用 Fiddler 确认这一点)。

3) 您还可以确认 WCF 在调用服务方法之前抛出异常。异常情况如下:

The body style 'Bare' is not supported by 'WebScriptEnablingBehavior'. Change the body style to be 'WrappedRequest'.

但“裸”主体样式是 Microsoft 对使用基本参数的 REST 请求的说法(即,不“包装”在 JSON 或 XML 中)。也就是说,没有可能的配置允许 WCF 处理这个特定的 AJAX 请求。您甚至可以实现自己的 WebContentTypeMapper,但它仍然无法工作。这家伙是他们:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2473190-consider-making-the-system-servicemodel-channels-r

我的结论是(假定您不能使用 MVC,这会让这变得小菜一碟),您需要以某种方式将此请求路由到基本的 .ASPX 页面,并使用可信赖的旧 Webforms 方法(Page. IsPostBack、Request.Params["param1"] 等)。

-- 结束编辑--

根据上面的其他线程,看起来您需要在 AJAX 调用中添加/修复一些参数:

...
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(d)
...

关于c# - 将 ASMX 服务迁移到 WCF 服务 - AJAX 帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9967991/

相关文章:

c# - ViewModel 中的 ObservableCollection,模型中的列表

c# - 从 JavaScript 调用 ASP 函数

c# - 如何在 pictureBox1 边框周围绘制一个矩形?

c# - JavaScript 或 C#

c# - 使用 JSON.NET 解析 json 字符串

c# - NPOI Mapper可以设置行号吗

c# - MEF 导出是否每次都根据请求进行缓存或发现?

c# - SQLDataReader 运行速度太慢取决于标准

c# - 如何隐藏母版页导航栏中的元素

c# - C# 如何知道何时运行静态构造函数?