原始类型(字符串)作为参数-通过ajax post的wcf方法不';t工作(小提琴手工作)

原始类型(字符串)作为参数-通过ajax post的wcf方法不';t工作(小提琴手工作),ajax,wcf,primitive,Ajax,Wcf,Primitive,好的,这一个对于更了解这类事情的人来说应该很容易。我将限制我提供的代码的范围,因为这只适用于一种变体(fiddler) 这个问题很容易解释:我在WCF中有一个将字符串作为参数的方法。该方法需要具有包装正文样式的请求。如果我在fiddler中创建一个简单的对象并将其发送到上面,它就会工作。类似于{“提交”:“某物”}。如果我在JSON中通过ajax实现这一点,它将无法工作。我收到一个错误的请求错误,说这是不允许的。。。这是跨域的,但这不是问题所在,我在方法中添加了适当的头来处理这个问题。在这种情况

好的,这一个对于更了解这类事情的人来说应该很容易。我将限制我提供的代码的范围,因为这只适用于一种变体(fiddler)

这个问题很容易解释:我在WCF中有一个将字符串作为参数的方法。该方法需要具有包装正文样式的请求。如果我在fiddler中创建一个简单的对象并将其发送到上面,它就会工作。类似于{“提交”:“某物”}。如果我在JSON中通过ajax实现这一点,它将无法工作。我收到一个错误的请求错误,说这是不允许的。。。这是跨域的,但这不是问题所在,我在方法中添加了适当的头来处理这个问题。在这种情况下,永远不会调用该方法(这就像是签名的问题)

但事情是这样的。。。如果我用字符串的一个属性创建一个非常简单的类,并传入一个对象,它就可以正常工作。以包裹体样式传递对象效果良好。尝试使用“基元类型”(如字符串)执行此操作不会。。。有什么想法吗

这不起作用(但通过小提琴手起作用)

根据这份合同

        [OperationContract]
    [WebInvoke(Method = "*", 
        RequestFormat = WebMessageFormat.Json,
        BodyStyle=WebMessageBodyStyle.WrappedRequest)]
    string Reflect(String submission);
这确实有效

            var spec = new Object();
        spec.submission = "mysubmission";

        var dataToSend3 = '{"thespecial":' + JSON.stringify(spec) + '}';

        $.ajax({
            type: "POST",
            url: "http://localhost:8000/ServiceModelSamples/Service/rest/Reflecting",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: dataToSend3,
            success: function (item) {
                debugger;
                alert(item);
            },
            error: function (xhr) {
                debugger;
                alert(xhr);
            }
        });
根据这份合同

        [OperationContract]
    [WebInvoke(Method = "*",
        RequestFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    string Reflecting(Special thespecial);

是的,如果不使用xml包装,就无法发送基本数据类型

启用端点行为帮助后,可以检查完整的请求结构

假设您有webHttpBinding的端点名称“api”,那么您可以使用以下命令启用帮助

    < webHttp helpEnabled = "true " />
配置后,您可以看到以下帮助

  http://localhost:<port>/test.svc/api/help
http://localhost:/test.svc/api/help
这将显示实际的请求格式

要传递字符串,可以使用以下格式包装器

  <string xmlns="http://schemas.microsoft.com/2003/10/ 
 Serialization/">Hello World</string> 
你好,世界
也可以使用流输入参数


在这里实现流媒体功能

感谢您的回复。但这不是XML。。。这是一个使用JSON的“POST”请求。我认为你说的不太合适。
  <string xmlns="http://schemas.microsoft.com/2003/10/ 
 Serialization/">Hello World</string>